На сайте корпорации Microchip есть набор библиотек,
"Microchip Application Libraries"
который включает в себя библиотеки работы с USB , Memory Disk Drive (MDD) , mTouchCap Library , библиотеки
работы с графикой и TCP/IP стек. На основе TCP/IP стека из этого набора библиотек и реализован ниже
описанный Ethernet модуль .
      Изначально модуль разрабатывался для ознакомления с возможностями PIC18F67J60 и PIC18F67J90.
Эти микроконтроллеры имеют встроенный 10Base-T Ethernet контроллер с интегрированным MAC и PHY что позволяет реализовать подключение микроконтролера к сети Ethernet с минимальным числом дополнительных деталей.
В дальнейшем , на основе этого модуля были созданы несколько весьма полезных устройств, например: сетевой тестер,
для проверки работы локальной сети и устройство удаленного управления, проще говоря надо было управлять парой реле по локальной сети.
В процессе использования нашлось еще много полезных применений данного модуля например сервер времени с синхронизацией по GPS и электронное табло с возможностью изменять
информацию по сети.
      На приведенной ниже электрической схеме показан один из вариантов использования модуля
"Сетевой тестер" клавиатура и светодиоды LED0-LED5 конструктивно выполнены на отдельной плате, т.е. в конфигурации
"устройство удаленного управления " вместо платы с клавиатурой просто подключается плата с транзисторными ключами
и реле.
      Как уже говорилось за основу взят пример "TCPIP Demo App" из "Microchip Application Libraries"
все настройки портов в этом примере находятся в файле "HardwareProfile.h ". Данный файл содержит настройки портов
под разные демо платы и разные компиляторы , за основу была взята конфигурация демо платы "PICDEMNET2".
Для приведенной нижне печатной платы необходимо изменить порты к которым подключены светодиоды и добавить определения
портов для клавиатуры.
      Затем надо настроить файл TCPIPConfig.h в этом файле можно включать и выключать различные сетевые
службы менять IP адреса по умолчанию , пароли и многие другие функции. Для начала это лучше делать с помощью утилиты
TCPIPConfig.exe.
      Наличие 128 килобайт памяти программ позволяет разместить небольшой сайт прямо в память контролера,
можно использовать и внешнюю память на ЕЕPROM или MMC карту. При использовании MMC карты объем сайта может быть
довольно большой но у меня пока в этом необходимости не возникало, для сетевого тестера достаточно сайта с сообщением
вроде "It Works" , а для удаленного управления достаточно сайта из микрочиповского примера .
      Чтобы разместить свой сайт в память контролера или в ЕЕPROM необходимо сконвертировать
ваш сайт в *.С, для размещения в память контролера или *.BIN для размещения в ЕЕPROM. Для конвертации своей
страницы в .c или в .bin файл в комплекте идет утилита MPFSImg.exe при ее использовании обнаружилось несколько
нюансов:
      Конвертер кроме создания MPFSImg еще меняет фаилы HTTPPrint.h, HTTPPrint.idx.
Если вы по каким либо причинам не станните пользоваться Convert WebPages to MPFS.bat
Или поменяете структуру каталогов проекта то для MPFS2.exe, в качестве Project Directory указывайте
путь где находится проект.
      MPFSImg в имидж кидает все подряд в месте с комментариями ,а их например в файле mchp.js
чуть меньше половины, 2 с копейками килобайта. Комментарии хороши в исходниках но в контролере они лежат мертвым
грузом.
      Чтобы отобразить на web-странице сервера динамическую переменную, достаточно заключить её тильдами, в виде ~variable~,
а в коде файла CustomHTPPApp.c создать функцию, вида HTTPPrint_variable()
void HTTPPrint_config_ip(void)
{
HTTPPrintIP(AppConfig.MyIPAddr);
return;
}
void HTTPPrint_config_gw(void)
{
HTTPPrintIP(AppConfig.MyGateway);
return;
}
void HTTPPrint_config_subnet(void)
{
HTTPPrintIP(AppConfig.MyMask);
return;
}
      Переменные на Ajax создаются похожим образом, только динамическая переменная создается в отдельном XML файле, в виде:
~var1~, а в коде HTML-страницы вызывается функция их обновления: document.getElementById('var1').innerHTML = getXMLValue(xmlData, 'var1');
Конфигурация сетевых служб.
В данном примере реализованы многие сетевые службы, включение/выключение сетевых служб производится в файле "TCPIPConfig.h " (строки 70-97).
Для включения или выключения соответствующей сетевой службы достаточно убрать или поставить двойной слеш перед соответствующей строкой.
В приведенной ниже прошивке конфигурация сетевых служб такая:
// ======================================================================= // Application Options // ======================================================================= /* Application Level Module Selection * Uncomment or comment the following lines to enable or * disabled the following high-level application modules. */ //#define STACK_USE_UART // Application demo using UART //for IP address display and stack configuration //#define STACK_USE_UART2TCP_BRIDGE // UART to TCP Bridge application example //#define STACK_USE_IP_GLEANING #define STACK_USE_ICMP_SERVER // Ping query and response capability #define STACK_USE_ICMP_CLIENT // Ping transmission capability //#define STACK_USE_HTTP_SERVER // Old HTTP server #define STACK_USE_HTTP2_SERVER // New HTTP server with POST, Cookies, Authentication, etc. //#define STACK_USE_SSL_SERVER // SSL server socket support (Requires SW300052) //#define STACK_USE_SSL_CLIENT // SSL client socket support (Requires SW300052) #define STACK_USE_AUTO_IP // Dynamic link-layer IP address // automatic configuration protocol #define STACK_USE_DHCP_CLIENT // Dynamic Host Configuration Protocol // client for obtaining IP address #define STACK_USE_DHCP_SERVER // Single host DHCP server //#define STACK_USE_FTP_SERVER // File Transfer Protocol (old) //#define STACK_USE_SMTP_CLIENT // Simple Mail Transfer Protocol for sending email //#define STACK_USE_SNMP_SERVER // Simple Network Management Protocol v2C Community Agent //#define STACK_USE_TFTP_CLIENT // Trivial File Transfer Protocol client //#define STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE // HTTP Client example in GenericTCPClient.c //#define STACK_USE_GENERIC_TCP_SERVER_EXAMPLE // ToUpper server example in GenericTCPServer.c //#define STACK_USE_TELNET_SERVER // Telnet server //#define STACK_USE_ANNOUNCE // Microchip Embedded Ethernet Device Discoverer server/client //#define STACK_USE_DNS // Domain Name Service // Client for resolving hostname strings to IP addresses //#define STACK_USE_NBNS // NetBIOS Name Service // Server for repsonding to NBNS hostname broadcast queries //#define STACK_USE_REBOOT_SERVER // Module for resetting this PIC remotely. // Primarily useful for a Bootloader. //#define STACK_USE_SNTP_CLIENT // Simple Network Time Protocol // for obtaining current date/time from Internet //#define STACK_USE_UDP_PERFORMANCE_TEST// Module for testing UDP TX performance characteristics. //#define STACK_USE_TCP_PERFORMANCE_TEST// Module for testing TCP TX performance characteristics //#define STACK_USE_DYNAMICDNS_CLIENT // Dynamic DNS client updater module //#define STACK_USE_BERKELEY_API // Berekely Sockets APIs are availableВключены:
ICMP SERVER и ICMP CLIENT - что позволяет модулю отвечать на Ping-и и пинговать другие узлы.
Dynamic link-layer IP address - что позволяет плате автоматически выбрать IP из заданного диапазона, если IP небыл назначен DHCP Сервером
DHCP CLIENT - Пытается получить IP адрес у DHCP севера при наличии такового в сети.
DHCP SERVER - Раздает IP адреса клиентам
HTTP SERVER - модуль содержит в себе маленький сайт с демонстрацией POST, Cookies, Authentication.
Печатная плата.
      Печатная плата изначально разрабатывалась не для какой то конкретной цели, а просто для ознакомления
с PIC18F67J60. Наличие небольшего участка для макетирования позволяет быстро переделать плату под любую задачу.
Печатная плата разведена под разъем SI-50152 или JFM24110, причем линии входа и выхода поменяны местами. Это сделано для того что бы
с помощью стандартного патчкорда можно было подключить плату как к компютеру так и к свитчу.
      Печатную плату в sprintlayout-50 можно скачать
здесь.Проект и прошивка под данную печатную плату
здесь.
Подключаемся.
      Подключаем плату к компьютеру ,как уже говорилось, с помощью стандартного патчкорда.
Плата пытается получить IP адрес у внешнего DHCP. если это удается то IP адрес платы будет тот что назначит
DHCP в противном случае должно стать что-то из этого 169.254.1.0 - 169.254.254.255. IP адрес который будет
присвоен в случае отсутствия DHCP определяется функцией AutoIPTasks в файле AutoIP.c
if (AutoIPClient.flags.bits.checkAddress == FALSE)
{
AutoIPClient.flags.bits.checkAddress = TRUE;
AppConfig.MyMask.Val = 0x00000000;
// Generate a random IP address (based on the MAC address) to try and claim.
// Dynamic link-local addresses can fall within the range:
// 169.254.1.0 - 169.254.254.255
AutoIPClient.packet.TargetIPAddr.byte.MB = AutoIPRand(i) % 256;
AutoIPClient.packet.TargetIPAddr.byte.UB = (AutoIPRand(i) % 254) + 1;
AutoIPClient.packet.TargetIPAddr.word.LW = 0xFEA9;
ARPResolve (&AutoIPClient.packet.TargetIPAddr);
AutoIPClient.eventTime = TickGet();
}
и если в конфигурации включен DHCP сервер, #define STACK_USE_DHCP_SERVER в TCPIPConfig.h не
должна быть закоменированна и в настойках TCP/IP вашего компьютера включено "Получить IP адрес автоматически"
то вашему компьютеру будет назначен IP адрес.В свойствах TCPIP должно быть "Получить IP адрес автоматически" далее после включения платы смотрим "подключение по локальной сети" закладка "Поддержка" должно быть
Тип адреса: Присвоен DHCP
IP ххх.ххх.ххх.ххх
Маска ххх.ххх.ххх.ххх
Основной шлюз ххх.ххх.хх.хх
Собственно основной шлюз и будет адресом нашей платы
Можно попробовать пропинговать нашу плату
Если все нормально, можно попробовать зайти на веб страничку платы
На сайте прошивке страничка из микрочиповского примера, почи без изменений,
с различными примерами и пояснениями к ним.
      Назначение кнопок в режиме "сетевой тестер" :
"F1" позволяет в ручную задать IP адрес платы
"F2" ввод IP адреса для пинга , модуль пингует введенный ip адрес после нажатия "Enter"
"F3" Изменетие MAK адреса модуля
"Shift" Дополнительные функции кнопок , ввод букв A,B,C,D,E,F, удаление ошибочно введенного имвола "Shift" "0 <-"
Задавать вопросы можно здесь