На сайте корпорации 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 <-"
Задавать вопросы можно здесь