Как работает микросхема сетевого контроллера. ENC28J60 Подключаем Микроконтроллер к сети Ethernet

28.03.2024

Как показала практика, бытовые спутниковые тюнера, используемые кабельными операторами, нередко приходится перезапускать из-за периодического пропадания звука или изображения. Вызвано это различными факторами: неоднородный уровень сигнала с конвектора, перегрев приёмника или высыхание электролитов. Можно держать дежурный персонал для оперативного переключения, однако когда это экономически невыгодно поможет описываемый девайс. В принципе, применение разработанного устройства не ограничено только этой сферой деятельности.

Кратко:
Назначение. Позволяет посредством локальной сети (или Интернета) управлять включением и отключением нагрузок, подключенных к управляемым реле.
Устройство. Принципиально устройство состоит из трёх модулей: Ethernet-модуль, модуль микроконтроллера, модуль управления нагрузками.
Ethernet-модуль собран на микросхеме от Microchip ENC28J60 и его целесообразнее взять готовый, например здесь: http://www.aliexpress.com/wholesale?SearchText=enc28j60 . В качестве микроконтроллера использовал микросхему Atmega32. В модуле управления стоят транзисторные ключи, включающие соответствующие реле. Каждое реле включает или отключает питание на потребителе, нуждающемся в этом.
Принцип действия. Принцип действия устройства несложно понять из принципиальной схемы:

Для интерактивного использования системы предусмотрен веб-интерфейс, зайдя в который, оператор включает или отключает соответствующий порт(см.рисунок). Конструкцией и прошивкой предусмотрено использование 20 портов вывода: PA0…PA7, PC0…PC7, PD4…PD7. Однако, при желании количество выходов можно увеличить до 80 штук — для этого необходимо использовать дешифраторы (например К155ИД3) и переписать яваскрипт вебпанели, чтобы выходы МК генерировали управляющие слова (0x0…0xF). Такой подход несколько усложнит схему устройства и появится необходимость перезагрузки тюнеров «по очереди». Гораздо уместнее использовать несколько описываемых устройств под различными IP-адресами.

Прошивка микроконтроллера . Чтобы прошить Atmega32 я использовал программатор «4 проводка» для COM-порта и софт . Прошивал на стареньком ПК под управлением Windows XP. На современных операционках не пробовал, ввиду отсутствия COM-а. прошивки.

Ещё необходимо установить фьюзы как на картинке.

Исходные коды прошивки с комментариями можно скачать . В папке с исходниками лежит рабочий Makefile. Чтобы скомпилировать проект я пользовался бесплатным . Для этого открываем командную строку, заходим в папку с проектом и набираем «make». В результате работы компилятора в папке появится несколько промежуточных файлов линкования и файл прошивки HEX.

Чтобы очистить результат работы компилера — там же, в командной строке, пишем «make clean».

Если будете пилить исходники, то обратите внимание на две функции:

Fill_tcp_data_p(buf,plen,PSTR("строка, передаваемая в пакет")); char stroka = "строка, передаваемая в пакет"; fill_tcp_data(buf,plen,stroka);

Первую функцию используем там, где явно необходимо передать строку (статический текст). Вторую юзаем со строковыми переменными.
Из файла ip_arp_udp_tcp.c :

Uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s) { char c; // fill in tcp data at position pos // // with no options the data starts after the checksum + 2 more bytes (urgent ptr) while ((c = pgm_read_byte(progmem_s++))) { buf=c; pos++; } return(pos); } ... uint16_t fill_tcp_data(uint8_t *buf,uint16_t pos, const char *s) { return(fill_tcp_data_len(buf,pos,(uint8_t*)s,strlen(s))); }

Собранные экземпляры:

Демонстрация работы:

В прошивке микроконтроллера предусмотрена смена IP-адреса (по умолчанию 192.168.1.99) и домена яваскрипта. Так, переход по адресу: 192.168.1.99/?i=91 изменит адрес устройства на 192.168.1.91 после перезагрузки (пользуйтесь очень аккуратно и только при острой необходимости, чтобы не потерять устройство!!! :)). Домен скрипта меняется так: 192.168.1.99/?d=mydomain.com , т.е. ваш скрипт будет подгружаться с адреса: mydomain.com/eth/script.js . Обратите внимание, что в директории eth на сервере должны лежать .

Открываете script.js и меняете описания портов под свои нужды:

Var name = "Управление портами:"; // заголовок // ниже названия портов (можно заменить на что-нибудь осмысленное) var title = ["PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PD4", "PD5", "PD6", "PD7"];

Например у меня так:

Var name = "«Радуга», 75 градус"; // заголовок // ниже названия портов (можно заменить на что-нибудь осмысленное) var title = ["Русский иллюзион", "24 техно", "Усадьба", "Здоровое ТВ", "Ретро", "Драйв", "Феникс+кино", "Детский", "Охота и рыбалка", "Europa Plus", "Sony Entertaiment", "Sony Sci-Fi", "Мультимания", "National Geographic", "НСТ", "не используется", "не используется", "не используется", "не используется", "WWW-СЕРВЕР"];

Для блока питания можно использовать зарядное устройство для мобильного телефона (выходное напряжение около 7 вольт). В режиме ожидания ток потребления около 120 мА. При включении одного реле ток потребления возрастает до 180 мА. Необходимо учитывать, что если будет необходимость активировать все реле одновременно (отключать все ресиверы), то и блок питания должен быть уже соответствующей мощности (как минимум 1.5 А).

Представленная статья является всего лишь демонстрацией устройства. В коммерческой версии направление этой разработки существенно расширено — портов до 150 штук, три датчика температуры и прочее, всё зависит от заказа. (Ещё один пример на 40 портов: )

Конструктивно устройство можно разместить в корпусе какого-нибудь отслужившего свой срок коммутатора в телекоммуникационную стойку 19″. Так как такого коммутатора под рукой не оказалось, то заказал в «Мобильном сервисе » вот такую коробушку от оптоволоконной вводно-распредительной системы (стоит 290 тыш без НДС):

Предположим, у нас возникла необходимость в создании устройства с возможностью подключения к сети Ethernet. Вариантов имеется довольно много, но все их можно условно разделить на 3 вида.

Преобразователь RS-232-Ethernet, обычно представляющий собой виртуальный COM-порт, преобразующий поток данных RS-232 в IP-пакеты на одном конце, и неким устройством, которое занимается приёмом и раскодированием этих пакетов, и отдающее контроллеру в виде RS-232 на другом конце. Пример подобного устройства: Tibbo EM100. Достоинства такого решения-простота программирования. Не нужно вникать в тонкости протоколов, подключаемое устройство может вообще быть не в курсе, что данные ему приходят не напрямую с последовательного порта, а, например, из Интернета. Недостатки у такого решения тоже имеются-не получится использовать протоколы более высоких уровней, такие, как SNMP, HTTP и прочие, т.е. о WEB-интерфейсе, к примеру, можно забыть.

Некое продвинутое устройство, «чёрный ящик», который обладает своим процессором, памятью, стеком протоколов, сам занимается обработкой Ethernet-пакетов, и наружу отдаёт опять же RS-232 или SPI. Примеры таких решений: Lantronix XPort, представляющий собой законченный ультракомпактный встраиваемый сервер размером чуть больше разъёма RG-45:

Микросхема WIZNET W5100, и основанный на ней Arduino Ethernet Shield:

Тут у разработчика уже больше свободы, например, можно поднять на этом контроллере WEB-сервер или Telnet, и через них управлять встраиваемым устройством. Из недостатков можно отметить невысокую гибкость (можно использовать только те протоколы, которые заложили разработчики) и высокую стоимость, зачастую превышающую стоимость управляемого устройства.

Взять контроль в свои руки, подключив к своему любимому контроллеру драйвер физического уровня (PHY), такой как микросхема ENC28J60 стандарта 10 Base-T, или микросхема ENC624J600 стандарта 10/100 Base-T от всё той-же фирмы Microchip, или же взять контроллер семейства PIC18FXXJXX со встроенным PHY, и программно реализовать все необходимые протоколы. Стек протоколов можно написать самому (не слишком тривиальная задача), или воспользоваться уже готовым стеком (существует довольно большой выбор TCP стеков для микроконтроллеров различных производителей разной степени бесплатности и качества). В этой статье будет представлен краткий обзор TCP стека фирмы Microchip, предназначенный для применения на микроконтроллерах этой фирмы.

Итак, путь ясен, время определиться с инструментами.

Нам понадобятся:

Один из поддерживаемых этих стеком контроллеров. Если будем использовать внешнюю микросхему PHY, то практически любой МК производства Microchip, семейств PIC18 (8бит), PIC24 (16бит), и PIC32 (32бит). Если хотим обойтись без внешнего PHY, берём что-нибудь из семейства PIC18F67J60.

TCP/IP стек Microchip. Cтек входит в состав Microchip Application Libraries (далее MAL). Библиотека бесплатная, поддерживает довольно широкий ряд контроллеров Microchip, и помимо TCP стека содержит так-же стек USB, библиотеку для работы с тач-скринами, смарт-картами и т.п. Последнюю версию библиотеки можно взять .

Среда разработки. Бесплатные MPLab 8 (слегка устаревшая, но проверенная годами), или MPLab-X (вышедшая с Beta-стадии пару месяцев назад, основанная на Netbeans, перспективная, но пока не слишком стабильная среда разработки).

Компилятор. Официально поддерживаются C18, C30, и C32. Ознакомительную 60-и дневную версию можно скачать с сайта . Через 60 дней ознакомительная версия остаётся функциональной, но выключает режим оптимизации, в связи с чем код может потребовать больше места в ROM.

Программатор и (или) внутрисхемный отладчик. Рекомендую ICD3 или PICKIT3 (ICD2 тоже работает, но не поддерживается средой Mplab-X, и более медленная).

Вместо пайки своей платы, можно воспользоваться одним из многочисленных отладочных комплектов, производства фирмы Microchip (которые всем хороши, кроме своей цены и трудностью покупки в России):

  • PIC18 Explorer с дочерней платой PICTail
  • Explorer 16 c дочерней платой PICTail+
  • PIC32 Starter Kit с платой расширения IO Expansion Board и PICTail+ (в этом случае не понадобится внешний отладчик, т.к. в PIC32 Starter Kit он уже встроен)

Существуют и альтернативные решения от фирм Olimex (ENC28J60-H) и «Тритон» (TRT-Ethernet).

Если мы решили сразу делать свою плату:

Можно задействовать как контроллер со встроенным PHY (PIC18F87J60)

Либо контроллер с внешним PHY (ENC28J60), подключенным по шине SPI (например, ENC28J60):

Из внешней обвязки понадобится только трансформатор (например, PULSE H1012), разъём RJ-45 (существуют разъёмы RJ-45 сразу со встроенным трансформатором и светодиодами), да десяток резисторов. Для тактирования контроллера обязателен кварц на 25 МГц (при этом внутренняя частота МК может быть поднята до 40МГц при помощи PLL).
Обратите внимание, что во внешнем PHY контроллере ENC624J600 уже содержится прошитый MAC-адрес, тогда как в ENC28J60 и PIC18F87J60 его нет, и нужно либо использовать покупную микросхему, содержащую MAC, либо устанавливать его програмно.

Так же на этом этапе надо определиться, где будут храниться файлы для WEB-сервера и SNMP mib-ы. Вариантов несколько: или непосредственно в памяти программ контроллера (а при среднем размере стека с набором необходимых модулей ~33кб и контроллером с внутренней ROM 128кб мы получим ~95кб места для файлов), или использовать внешнюю микросхему EEPROM (стек поддерживает 25LC1024), FLASH (серия SST25), SD-карту или даже USB-диск (понадобится PIC32 с USB на борту).

Итак, с «железом» определились, посмотрим теперь, что же может предложить нам эта библиотека?

Поддерживаемый функционал:

Протоколы: ARP, IP, ICMP, UDP, TCP, DHCP, SNMP, SMTP, HTTP, FTP, TFTP
Поддержка TCP и UDP
Поддержка SSL
Поддержка NetBIOS
Поддержка DNS

Стек поддерживаемых протоколов:

Имеются исходники http-сервера, поддерживающего GET и POST запросы, SSL-аутентификацию и сжатие GZIP, клиент и сервер ICMP, клиент и сервер SNMP (версии 1, 2 и 3, в т.ч. SNMP TRAP), программный мост TCP2UART, сервер TELNET, клиент DynDNS, DNS, DHCP, и многое другое.

При всём при этом, стек занимает не так много памяти. Так, реальный проект, содержащий WEB-сервер, DHCP и DNS-клиент, мост Ethernet─Serial, сервер TFTP и SNMP, клиент SMTP, потребует порядка 33 килобайта памяти программ (ROM) и 2 килобайта памяти данных (RAM), при том, что типичный размер памяти PIC18F67J60 составляет 128кб.

Производительность стека:


Как видно, скорости не поражают воображение, однако не стоит забывать, что хостить на подобном устройстве «Facebook» вряд-ли кому-либо придёт в голову. А страница размером 30кБ с AJAX и парой небольших картинок загрузится менее чем за секунду (по локальной сети).
Дистрибутив MAL содержит ряд примеров, наиболее интересные из которых:

TCPIP Internet Bootloader App - пример, реализующий обновление прошивки контроллера по протоколу TFTP.
TCPIP Internet Radio App -играет mp3 поток с указанного сайта (используется внешняя микросхема-декодер mp3).
TCPIP WebVend App – эмулятор торгового автомата с Web-интерфейсом (демонстрируется работа запросов GET\POST, Ajax)

Собираем проект

Всё это интересно, но пора бы уже собрать собственное приложение. Пусть это будет пример «Demo App» (из каталога Microchip Solutions v2011-12-05\TCPIP\Demo App). Переходим в эту папку, и видим кучу «сишных» файлов, вперемешку с файлами проектов от MPLAB (*.mcp, *.mcw). Ищем файл проекта, подходящий для нашей отладочной платы. Скажем, если у плата у нас называется «Ethernet Starter Kit», открываем проект C32-PIC32_ETH_SK_ETH795. Если плата пользовательская, можно создать проект с нуля, или открыть наиболее похожий проект и модифицировать под себя. Например, если плата будет с PIC18F67J60 со встроенным PHY, берём проект C18-PICDN2_ETH97, и дорабатываем напильником. Доработка заключается в следующем: Лезем в Project->Build options->Project->С18, и меняем C18-PICDN2_ETH97 на «YOUR_BOARD»:

Создаем файл HWP YOUR_BOARD.h на основе наиболее похожего. В этом файле прописаны номера портов для модулей, использующих какую-либо периферию. Скажем, модуль SPI_EEPROM.c берёт оттуда имена портов SPI для обмена данными с внешним EEPROM:

#define EEPROM_CS_TRIS (TRISCbits.TRISC0)
#define EEPROM_CS_IO (LATCbits.LATC0)
#define EEPROM_SCK_TRIS (TRISCbits.TRISC3)
#define EEPROM_SDI_TRIS (TRISCbits.TRISC4)
#define EEPROM_SDO_TRIS (TRISCbits.TRISC5)

Если в нашей пользовательской плане порты отличаются, устраняем несоответствие.
Такая избыточная сложность демонстрационных проектов связана с желанием фирмы-производителя сделать так, чтоб пример можно было запустить на максимально-возможном числе разнообразного «железа». В дальнейшем, при написании своего проекта «с чистого листа» всё это можно будет вычистить и получить простую и понятную структуру.
Второй интересный файл, это TCPConfig.h, который, в зависимости от выбранного типа отладочной платы, вызывает файл с параметрами IP-протокола. Для пользовательской платы с PIC18F87J60 этот файл будет называться TCPIP ETH97.h
В нём включаются и отключаются различные модули стека.

/* 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 MPFS_USE_EEPROM
//#define MPFS_USE_SPI_FLASH

Устанавливается IP-адрес по умолчанию:
#define MY_DEFAULT_IP_ADDR_BYTE1

Настраивается размер буферов, и многое другое. Можно так-же не править этот файл вручную, а воспользоваться визардом, поставляющимся вместе со стеком:

Итак, будем считать, что порты и параметры TCP сконфигурированы, IP-адрес установлен, запускаем компиляцию. Если всё прошло успешно, получаем прошивку и шьём ее в МК, отладчиком или программатором. Запускаем, проверяем пинг на прописанный в файле TCPIP ETH97.h адрес. Если пинга нет, проверяем, горит ли светодиод Link, не получила ли плата другой ip-адрес по DHCP. Для проверки можно выключить режим автоматического получения ip-адреса, закомментировав строчки #define STACK_USE_DHCP_CLIENT и #define STACK_USE_IP_GLEANING . Получив наконец пинг, пробуем ввести адрес платы в браузере. Видим ошибку 404, page not found.
Естественно, ведь мы ещё не загрузили никаких файлов на наш WEB-сервер. Исправляем этот недочёт. Для этого нам понадобится утилита «Microchip MPFS generator».

Утилита преобразует указанную папку с файлами в файл-образ, пригодный для загрузки на встраиваемый сервер. В качестве Source Directory ей надо указать каталог с файлами для загрузки. Формат же зависит от того, где мы собираемся хранить эти файлы. Если в качестве места для хранения файлов мы указали внутреннюю ROM контроллера, указываем формат C18/C32 Image, и получаем на выходе файл MPFSImg2.c, внутри которого будет объявлен большой массив двоичных данных. Этот файл нужно добавить к проекту, и перекомпилировать его.
Если же для хранения файлов используется внешняя микросхема FLASH или EEPROM, выбираем формат BIN Image. Полученный на выходе файл MPFSImg2.bin загружаем либо через форму загрузки на сервере, либо включив соответствующую опцию в MPFS generator. Загружаем, обновляем страницу, наслаждаемся!

Пара слов о том, как это работает

Статический текст выводится непосредственно в файле HTML.
Чтобы отобразить на web-странице сервера динамическую переменную, достаточно заключить её тильдами, в виде ~variable~, а в коде файла CustomHTPPApp.c создать функцию, вида HTTPPrint_variable()

Переменные на Ajax создаются похожим образом, только динамическая переменная создается в отдельном XML файле, в виде:
~var1~, а в коде HTML-страницы вызывается функция их обновления: document.getElementById("var1").innerHTML = getXMLValue(xmlData, "var1");

Стек не использует какую либо ОС, и работает по принципу кооперативной многозадачности (впрочем, при желании можно прикрутить и ОС, см. AN1264). Выглядит это так:
В main() крутится бесконечный цикл, из которого вызываются функции, обслуживающие стек (StackTask и StackApplications) и пользовательские функции (в данном примере это user_task(), но может быть что угодно).

Do
{
StackTask();
StackApplications();
user_task();
CLRWDT(); //сторожевой таймер
}while(1);

При этом нужно стараться, чтоб пользовательская функция не выполнялась слишком долго. К примеру, если в этой функции сработает «тупая» задержка вида while(delay); то функции стека не смогут обработать входящие Ethernet пакеты, и на время этой задержки связь с устройством пропадёт. Для организации различных таймаутов, необходимых для нормальной работы IP протокола, стек использует аппаратный таймер МК (timer0 или timer1), работающий по прерыванию (по переполнению таймера вызывается функция TickUpdate).
Помимо реализации WEB-интерфейса и отправки SNMP trap-ов, довольно удобно использовать Telnet для вывода отладочной информации вместо традиционного в таких случаях порта RS-232.

Заключение

Тема Ethernet весьма обширна, и в одной статье рассказать обо всём невозможно. Для заинтересовавшихся предлагаю ознакомиться с сайтом

Ethernet является одним из наиболее распространенных сетевых интерфейсов . Компания Miсrochip выпускает широкий спектр Ethernet-микросхем на все случаи жизни: микроконтроллеры, PHY, коммутаторы, мосты USB-Ethernet, контроллеры Ethernet . Практически для каждой микросхемы предлагается отладочный набор и программные средства разработки .

Ethernet является незаменимым инструментом для создания высоконадежных промышленных сетей и высокоскоростных каналов передачи данных. В данном случае слова «надежный» и «высокоскоростной» являются ключевыми. Ни один из беспроводных или проводных интерфейсов не сможет соперничать с Ethernet по этим показателям.

Если оценивать Ethernet с точки зрения стоимости реализации, то он, конечно, уступит более простым сетям, например, RS-422/RS-485. Однако для многих промышленных приложений обеспечение высокой скорости передачи данных оказывается более важным требованием.

Дальнейшее развитие Ethernet связано не только с ростом пропускной способности, но и с получением высокой временной детерминированности при передаче информации. Речь идет в первую очередь о такой технологии как EtherCAT.

К сожалению, расплатой за преимущества, которые дает Ethernet, становятся не только увеличение стоимости, но и высокая сложность реализации. Эти недостатки препятствуют массовому внедрению Ethernet в простые бюджетные устройства, которые должны стать основой Интернета вещей (IoT). Тем не менее, на рынке появляется все больше микросхем и решений, позволяющих при минимальных затратах времени и денег реализовать Ethernet-интерфейс. Например, номенклатура компании Miсrochip имеет множество Ethernet-решений: микроконтроллеры с Ethernet, микросхемы PHY, Ethernet-контроллеры, коммутаторы, законченные преобразователи интерфейсов USB-Ethernet (рисунок 1).

Многообразие компонентов и решений производства компании Microchip позволяет разработчикам очень гибко организовать Ethernet-соединение, исходя из возможностей и требований конкретного приложения, что значительно упрощает процесс разработки.

Организация Ethernet-соединения с помощью микросхем Microchip

Как известно, Ethernet работает на двух нижних уровнях модели OSI: физическом и канальном. В общем случае для реализации Ethernet потребуется стандартный набор функциональных компонентов: микроконтроллер (процессор), Ethernet-контроллер с MAC-адресом (Ethernet Controller ), микросхема PHY, Ethernet-коммутатор (Ethernet Switch ), элементы защиты (варисторы, TVS-диоды, защитные диоды), трансформатор, сетевой разъем. С помощью компонентов производства Microchip структуру Ethernet-интерфейса можно реализовать различными способами (рисунок 2).

Когда Ethernet только зарождался, уровень интеграции был достаточно скромным. По этой причине для создания Ethernet-интерфейса использовался набор отдельных микросхем (рисунок 2а). В этом случае микроконтроллер работает на верхних уровнях модели OSI и взаимодействует с Ethernet-контроллером с помощью одного из традиционных интерфейсов, например, по SPI. Ethernet-контроллер реализует канальный уровень OSI. Одна из главных его функций заключается в назначении уникального MAC-адреса устройства для работы в сети. За организацию физического канала отвечает микросхема Ethernet PHY. Она выполняет непосредственное кодирование и формирование выходных сигналов. Связь между Ethernet-контроллером и Ethernet PHY осуществляется с помощью интерфейса MII (Media Independent Interface) или его производных (RGMII/GMII и других). Если требуется на одном устройстве разместить несколько сетевых узлов, то для этих целей используется Ethernet-коммутатор.

С развитием технологических норм степень интеграции увеличивалась. Это позволяло разместить в одном корпусе не только процессорное ядро и стандартную периферию, но и «тяжелый» Ethernet-контроллер (рисунок 2б). В итоге для создания Ethernet-интерфейса требовалось подключить к такому микроконтроллеру только Ethernet PHY.

Стремление к созданию максимально простых решений привело к появлению микроконтроллеров и систем-на-кристалле (SOC), которые могут похвастаться не только встроенным Ethernet-контроллером, но и чипом Ethernet PHY (рисунок 2в). Для них подключение к сети оказывается максимально простым – остается только добавить элементы защиты и трансформатор.

В последнее время на рынке появляются и другие интересные решения. Например, компания Microchip предлагает широкий выбор различных мостовых схем USB-Ethernet (рисунок 2г). Их достоинствами являются универсальность, простота и низкая стоимость.

Компания Microchip выпускает весь спектр Ethernet-микросхем. Это дает пользователям возможность применять наиболее удобную структуру Ethernet-интерфейса, что в свою очередь значительно упрощает процесс разработки.

Обзор микроконтроллеров Microchip со встроенным Ethernet

Компания Microchip выпускает почти 200 моделей микроконтроллеров для Ethernet-приложений. Чтобы рассказать о них, потребуется не одна статья. По этой причине ограничимся кратким обзором основных семейств контроллеров с Ethernet.

Семейство PIC18 с Ethernet включает микроконтроллеры, построенные на базе 8-битного ядра с объемом Flash-памяти до 128 кбайт. Главной их особенностью является наличие встроенного Ethernet-контроллера и 10Base-T PHY, а также выделенного 8 кбайт ОЗУ для нужд Ethernet.

Сейчас семейство PIC18 с Ethernet объединяет трех представителей – , и , которые доступны в корпусных исполнениях 64/80/100 TQFP.

Производительность этих процессоров невелика – до 10,5 DMIPS. Если требуется более мощный процессор, стоит взглянуть на представителей семейства PIC32.

Таблица 3. Обзор мостов HSIC/USB-Ethernet Microchip

Наименование / /
Тип моста HSIC в 10/100 USB 2.0 в 10/100 USB 2.0 в 10/100 USB 2.0 в 10/100/1000 USB 2.0/HSIC в 10/100/1000 USB 3.1 Gen1 в 10/100/1000
Число портов USB 02.03.2004
Интерфейс с внешним PHY MII RGMII
NetDetatch™ + + + + + +
Wake-On-LAN + + + + + + +
Поддержка PME + + + + + +
Встроенный регулятор напряжения, В 3,3 в 1,2 3,3 в 1,2 3,3 в 1,8 3,3 в 1,8
EEE 802.3az + +
-40…85 -40…105
(AEC-Q100)
Корпус 56 QFN 64 QFN 56 QFN 56 QFN 48 QFN 64 QFN

Среди отличительных особенностей мостов от Microchip стоит отметить наличие встроенных регуляторов напряжения, поддержку IEEE 802.3az и Wake-On-LAN.

Обзор микросхем коммутаторов Ethernet от Microchip

Microchip предлагает микросхемы коммутаторов трех групп: высокоскоростные коммутаторы Gigabit Ethernet (таблица 4), 3-портовые коммутаторы 10/100 Мбит Ethernet (таблица 5) и 4/5/7/9-портовые коммутаторы Ethernet (таблица 6). Для большинства коммутаторов все порты за исключением одного снабжены полным комплектом из MAC + PHY. Один из портов имеет только MAC, для его использования требуется внешняя микросхема PHY, которая подключается с помощью одного из стандартных интерфейсов SGMII/RGMII/GMII/RMII/MII.

Таблица 4. Обзор микросхем высокоскоростных коммутаторов Gigabit Ethernet производства Microchip

Наименование
Скорость обмена данными 10Base-T/100Base-TX/1000Base-T
Число портов Ethernet 3, 6, 7 3, 7 7
Интерфейс SGMII/RGMII/GMII/RMII/MII
LinkMD® Есть
IEEE 1588 v2/802.1AS + +
Audio/Video Bridging (AVB) + +
Time Aware Scheduler + +
Low Latency Cut Through + +
Quiet-WIRE® +
Network Fault Recovery (DLR/HSR) +
IEEE 802.1X + + +
EEE/Wake-On-LAN + + +
Диапазон рабочих температур, °C -40…85
Корпус 64 QFN 128n TQFP 128 TQFP

Как и в случае с остальными Ethernet-микросхемами, ключевыми достоинствами коммутаторов Microchip являются компактные размеры, малое потребление и невысокая стоимость. Некоторые коммутаторы квалифицированы в соответствии с AEC-Q100. Для ответственных промышленных приложений выпускаются микросхемы с расширенным диапазоном температур -40…105°C.

Таблица 5. Обзор 3-портовых коммутаторов Ethernet производства Microchip

Наименование KSZ8463
Скорость обмена данными 10Base-T/100Base-TX 10Base-T/100Base-TX/100Base-FX
Интерфейс MII/RMII MII/RMII/RGMI MII/RMII SPI/SQI/RMII/MII MII
EEE 802.3az + + + +
Uпит, В 1,8/2,5/3,3 3,3 1,6…3,3
Диагностика подключения + + + + + +
IEEE 1588 + + + +
Мощность, мВт 520 330 640 555
Диапазон рабочих температур, °C -40…85 -40…85 (AEC-Q100) -40…85
Корпус 48 LQFP 64 LQFP 64 QFN 56 QFN 56-/64-/72 QFN, 64-/80 TQFP 88 QFN, 80 TQFP

Стоит отметить, что часть коммутаторов Microchip поддерживает протокол IEEE 1588 v2 Precision Time Protocol (PTP), что является обязательным условием при реализации EtherCAT.

Таблица 6. Обзор 5/7/9-портовых коммутаторов Ethernet производства Microchip

Наименование KSZ8565
Скорость обмена данными 10/100Base-T/TX, 100Base-FX 10/100Base-T/TX, 100Base-FX с GigE Uplink 10/100Base-T/TX с GigE Uplink 10/100Base-T/TX, 100Base-FX
Число портов Ethernet 4 5 4 5 7 9
Интерфейс MII/RMII (×2) RGMII MII/RMI GMII/RGMII MII/RMII RGMII MII/RMII GMII/RGMII MII/RMII RGMII/MII/ RMII RGMII/MII/ RMII/SGMI MII, SN
Wake-OnLAN EEE 802.3az + + + + + +
IEEE 802.1X + +
Uпит, В 1,8/2,5/3,3 3,3
LinkMD® +
Мощность, мВт 253 435 430 560 460 560 Нет данных Нет данных 1472
Диапазон рабочих температур, °C -40…85 (AEC-Q100) -40…85 -40…105 (AEC-Q100) -40…85
Корпус 64 QFN 128 LQFP 64 QFN 80 LQFP 128 TQFP 208 PQFP

Обзор инструментов для разработки и отладки Ethernet-приложений

Создание устройств с Ethernet – сложная задача. Проблемы могут возникнуть как на этапе разработки принципиальной схемы и печатной платы, так и при написании программной части. Наиболее простым способом освоить Ethernet является использование готовых отладочных наборов и открытых программных библиотек и стеков протоколов.

Таблица 7. Отладочные платы микроконтроллеров Microchip со встроенным Ethernet

Наименование Описание
Стартовый набор PIC32 Ethernet Starter Kit II
Оценочный набор SAME70 Xplained Evaluation Kit
Оценочный набор SAM V71 Xplained Ultra Evaluation Kit
Оценочный набор SAM A5 D3 Xplained
KSZ9567-EVAL Оценочная плата KSZ9567 Gigabit Ethernet Evaluation Board
Стартовый набор PIC32MZ Embedded Connectivity Starter Kit

Компания Microchip предлагает огромное количество самых разнообразных отладочных наборов и оценочных плат (таблицы 7 и 8). В их число входят как оценочные платы для микроконтроллеров, например, PIC32 Ethernet Starter Kit II , так и законченные решения, например, преобразователь интерфейсов (рисунок 3).

Таблица 8. Отладочные платы для микросхем Ethernet от Microchip

Наименование Микросхема Описание
PHY Оценочная плата для PHY-микросхемы KSZ9031RNX Gigabit Ethernet
KSZ9897-EVAL Коммутатор Оценочная плата коммутатора на базе KSZ9897
KSZ9477-EVAL Коммутатор Оценочная плата коммутатора на базе KSZ9477
Контроллер Оценочная плата Ethernet-контроллера на базе KSZ8851SNL
EVB-LAN9250 Контроллер Оценочная плата Ethernet-контроллера на базе LAN9250

Кроме аппаратных средств Microchip предоставляет пользователям доступ к бесплатным драйверам и библиотекам. С точки зрения Ethernet-приложений разработчикам будет особенно интересен открытый и бесплатный стек TCP/IP от Microchip, который поддерживает следующие протоколы:

  • ARP, IP, ICMP, UDP, TCP, DHCP, SNMP, HTTP, FTP, TFTP;
  • TCP и UDP;
  • Secure Sockets Layer (SSL).

Данный стек протоколов является открытым. Он написан на языке С и имеет модульную структуру. По оценкам специалистов Microchip, использование стека займет всего 28…34 кбайт кода.

Если говорить о конкретных примерах использования микросхем Microchip, то в первую очередь стоит упомянуть готовые решения для EtherCAT и Интернета вещей (IoT).

Готовые решения: IoT и EtherCAT

EtherCAT представляет собой наиболее перспективную технологию прецизионного обмена данными, построенную на базе Ethernet. Для создания EtherCAT-приложений необходима поддержка протокола IEEE 1588 v2 Precision Time Protocol (PTP), который позволяет формировать временные метки, тем самым обеспечивая временную детерминированность при обмене данными, в то время как обычный Ethernet не гарантирует время доставки кадров.

Как говорилось выше, Microchip выпускает целый ряд микросхем с поддержкой IEEE 1588. Для быстрого освоения EtherCAT пользователям предлагаются специализированные отладочные наборы (таблица 9).

Таблица 9. Отладочные платы EtherCAT

Отладочный набор IoT Ethernet Kit , как следует из названия, представляет собой универсальную платформу для Интернета вещей (рисунок 4). Данное решение построено на базе производительного 32-битного контроллера с объемом Flash-памяти 2 Мбайт. Для создания Ethernet-канала используется . Готовые примеры для этой платформы находятся в открытом доступе на сайте github.com .

Заключение

Ethernet остается одним из наиболее распространенных проводных интерфейсов и является основой как для бытовых, так и для промышленных сетей. Он сочетает в себе высокую скорость передачи данных и умеренную стоимость реализации.

Компания Microchip выпускает широкий выбор микросхем для Ethernet-приложений: 8/16/32-битные микроконтроллеры, микросхемы PHY, Ethernet-контроллеры, коммутаторы, малобюджетные мосты USB-Ethernet.

Кроме самих микросхем Microchip предлагает множество разнообразных отладочных наборов и программных библиотек, в том числе – открытый стек TCP/IP. Также имеются специализированные решения для EtherCAT и IoT.

Печатная плата под модуль.

Схема подключения модуля к микроконтроллеру.

Печатная плата контроллера и шины ISA.

Изначально хотел сделать, чтобы можно было вставлять сетевую плату в ISA разъём, потом разъём выкусил и модуль просто впаял в эту плату. Можно конечно сделать и на разъёмах, даже лучше будет.

Внешний вид модуля.

Менеджер управления модулем Ethernet.

При работе с менеджером нажимаем START и в окне команд меняем цифру от 0 до 9. Наблюдаем реакцию модуля на команды.

Этот менеджер Генадия. Здесь вводим IP адрес, нажимаем кнопку Connect и кнопками On/Off можно поуправлять светодиодами на модуле.


Здесь выложен результат прослушки протокола при обмене менеджера с устройством.

Протокол ARP

Address Resolution Protocol

Запрос от мастера

0x0000 FF FF FF FF FF FF 00 0D-61 21 FF 96 08 06 00 01 ÿÿÿÿÿÿ..a!ÿ–....

0x0010 08 00 06 04 00 01 00 0D-61 21 FF 96 C0 A8 00 05 ........a!ÿ–À¨..

0x0020 00 00 00 00 00 00 C0 A8-00 19 ......ˬ..

Ethernet II

FF FF FF FF FF FF – Destination MAC - МАС адрес получателя.

08 06 – Ethertype 0x0806 - (2054) – ARP.

ARP

00 01 – Hardware 0x0001 (1) - Ethernet.

08 00 – Protocol 0x0800 (2048) – IP.

06 – Hardware address length 0x06 (6).

04 – Protocol address length 0x04 (4).

00 01 – Operation 0x0001 (1) – ARP Request.

00 0D-61 21 FF 96 – Sender MAC address - МАС адрес отправителя.

C0 A8 00 05 – Sender IP address – IP адрес отправителя.

00 00 00 00 00 00 – Target MAC address – МАС адрес получателя (все).

C0 A8-00 19 – Target IP address – IP адрес получателя.

Протокол IP / ICMP .

Internet Control Management Protocol

Запрос от мастера

0x0000 00 22 3A 6F 47 B9 00 0D-61 21 FF 96 08 00 45 00 .":oG¹..a!ÿ–..E.

0x0010 00 3C 19 E0 00 00 80 01 -9F 72 C0 A8 00 05 C0 A8 .<.à..€.ŸrÀ¨..À¨

0x0020 00 19 08 00 D2 5A 03 00 -78 01 61 62 63 64 65 66 ....ÒZ..x.abcdef

0x0030 ghijklmnopqrstuv

Ответ от слейва

0x0000 00 0D 61 21 FF 96 00 22-3A 6F 47 B9 08 00 45 00 ..a!ÿ–.":oG¹..E.

0x0010 00 3C 19 DD 00 00 80 01 -9F 75 C0 A8 00 19 C0 A8 .<.Ý..€.ŸuÀ¨..À¨

0x0020 00 05 00 00 DB 5A 03 00 -77 01 61 62 63 64 65 66 ....ÛZ..w.abcdef

0x0030 67 68 69 6A 6B 6C 6D 6E-6F 70 71 72 73 74 75 76 ghijklmnopqrstuv

0x0040 77 61 62 63 64 65 66 67-68 69 wabcdefghi

Ethernet II

00 0D-61 21 FF 96 – Source MAC - МАС адрес отправителя.

08 00 – Ethertype 0x0800 = IP.

IP

45 – IP version “4” and “5” – Header length =20 bytes.

00 – Type of service

00 3C – Total length 0x021 = 33

19 E0 – Id (номер пакета)

00 00 – Flagmant offset = 0.

80 – Time to Live (TTL) = 128.

01 – Protocol (ICMP)

9F 72 – Контрольная сумма.

C0 A8 00 05 – IP отправителя.

C0 A8 00 19 – IP получателя.

ICMP

08 – Type 0x08 (8) Echo. (0)- Echo reply.

00 – Code 0x00 (0).

D2 5A – Checksum 0xD25A (53850) correct.

03 00 – Identifier 0x0300 (768).

78 01 – Sequence Number 0x7801 (30721).

Протокол IP/UDP

User Datagram Protocol

0x0000 00 C9 3A 6F 47 B9 00 0D-61 21 FF 96 08 00 45 00 .É:oG¹..a!ÿ–..E.

0x0010 00 21 30 E0 00 00 80 11 -88 7D C0 A8 00 05 C0 A8 .!0à..€.ˆ}À¨..À¨

0x0020 00 19 17 D8 00 6F 00 0D -C3 75 2A 54 41 54 37 ...Ø.o..Ãu*TAT7

Ethernet II

00 C9 3A 6F 47 B9 – Destination MAC - МАС адрес получателя.

00 0D-61 21 FF 96 – Source MAC - МАС адрес отправителя.

Авторы: Вячеслав Гавриков (г. Смоленск)

Интерес к Интернету вещей (Internet of Things, IoT) постоянно растет. Однако главным фактором, сдерживающим распространение этой технологии, остается сложность ее реализации. Это касается как аппаратной, так и программной части. Тем не менее, существует возможность обойти эти проблемы за счет использования готовых решений, таких, например, как миниатюрные веб-серверы xPico от Lantronix. Совсем недавно компания выпустила новый модуль xPico 110, который отличается от предшественника более высоким уровнем защиты данных и предполагает прямой SMD-монтаж на материнскую плату.

Рис. 1. Новый веб-сервер xPico 110 от Lantronix

Концепция «Интернета вещей» или Internet of Things (IoT) предполагает включение в состав привычных информационных сетей широкого круга различных устройств - от бытовых приборов до промышленного оборудования. Умный телевизор, умный холодильник - вот лишь ряд примеров, которые уже стали нормой для потребителей.

В настоящий момент существует только две основные причины, которые сдерживают развитие IoT: экономическая и техническая. Экономическая заключается в том, что интеграция поддержки IoT значительно повышает стоимость конечного устройства. С технической точки зрения создание «умных» устройств представляет собой сложную задачу, для решения которой потребуется группа опытных разработчиков. Рассмотрим пример разработки IoT-устройства.

Во-первых, в самом простом случае для создания IoT-устройства потребуется поддержка проводного Ethernet. Как известно, Ethernet не так-то прост в реализации, и требует разработки сложных принципиальных схем, выполнения разводки высокоскоростных линий и т. д.

Во-вторых, после создания аппаратной части необходимо обеспечить поддержку программных протоколов (TCP/IP, UDP и т. д.), а для этого потребуется написать десятки и сотни килобайт программного кода для реализации требуемых уровней сетевой модели OSI: от драйверов интерфейсных микросхем до протоколов более высоких уровней (TCP/IP, UDP и т. д.).

В-третьих, любое устройство, кроме работы в сети Ethernet, должно выполнять и свои основные функции: холодильник - хранить продукты, промышленный станок - делать детали т. д.

Все перечисленные проблемы можно обойти за счет готовых решений. В частности компания Lantronix предлагает к услугам разработчиков законченные модули веб-серверов xPico (рис. 2). Несмотря на высокий функционал, они отличаются миниатюрными размерами, сравнимыми с габаритами небольшой монеты.

Рис. 2. Веб-серверы xPico и xPico 110 от Lantronix

Суть решения от Lantronix становится понятной при рассмотрении схемы включения модулей xPico (рис. 3). С их помощью даже самый простой микроконтроллер может быть подключен к сети Ethernet, так как xPico берет на себя всю самую сложную часть реализации сетевого интерфейса, как с аппаратной, так и с программной точки зрения. За решение перечисленных задач отвечает 16-битный контроллер DSTni-EX с архитектурой x86. Он способен работать с максимальной частотой до 120 МГц и отличается солидным объемом памяти 512 кбайт FLASH, 256 кбайт ОЗУ и 384 кбайт памяти для веб-страниц. Для подключения к Ethernet потребуется только трансформатор, а программные протоколы уже интегрированы в модуль сервера. Обмен данными с управляющим микроконтроллером осуществляется с помощью обыкновенного UART со скоростью до 921 кбайт/с. Впрочем, xPico может работать и самостоятельно.

Рис. 3. Схема подключения микроконтроллера к сети Ethernet с помощью веб-серверов Lantronix

Для самостоятельной работы у модулей xPico имеется в наличии 8 портов ввода-вывода 3,3 В. Кроме того, с помощью дополнительного приемопередатчика можно реализовать простейший мост между сетью Ethernet и RS-422/485 или RS-232.

Настройка модулей xPico производится либо по сети Ethernet с помощью специального веб-менеджера (рис. 4), либо с помощью дополнительной утилиты и COM-порта компьютера. xPico поддерживают все популярные протоколы TCP/IP, UDP/IP, DHCP, ARP, ICMP, DHCP, Auto-IP, DNS, SNMPv1, TFTP и др.

Рис. 4. Окно настройки веб-сервера xPico 110 от Lantronix

Новая линейка веб-серверов xPico 110 отличается от предшественника xPico по двум пунктам:

  • способом монтажа на материнскую плату;
  • повышенным уровнем безопасности и защиты данных.

Начнем с более очевидного первого пункта. Модули линейки xPico предполагают подключение к материнской плате с помощью 40-контактного разъема. Для этого на материнской плате необходимо поместить ответный разъем для соединения типа плата-плата. Производители рекомендуют для этих целей использовать DF40C(2.0)-40DS-0.4V(51) от компании Hirose. Стоит отметить, что для механического крепления модулей xPico требуются дополнительные стойки. Чтобы облегчить жизнь разработчиков, Lantronix предлагает использовать специальную клипсу быстрого монтажа (рис. 5).

Рис. 5. Монтаж клипсы на модуль xPico от Lantronix

После фиксации в клипсе пользователю останется только установить полученную конструкцию на плату (рис. 6).

Рис. 6. Монтаж модуля xPico на материнскую плату

Несложно заметить, что недостатком такой конструкции является значительное увеличение габаритов. Если требуется получить «тонкое» решение, то модули xPico 110 будут более предпочтительными, так как они даже без учета клипсы оказываются в два раза тоньше, чем xPico: 3 мм вместо 5,6 мм.

Второй отличительной чертой xPico 110 является повышенный уровень безопасности. С учетом роста уровня кибер-угроз это наверняка окажется важным преимуществом новых серверов. По сравнению с предшественниками серверы xPico 110 могут похвастаться следующими новыми механизмами безопасности:

  • Сертификация NISTAES (FIPS-197);
  • Криптография 256/192/128-бит AES;
  • Настраиваемый пароль (Telnet, Serial);
  • Программное управление включением/выключением сетевого порта.

Кроме стандартного модуля xPico 110 (код заказа XPC100200B-01) к услуга разработчиков предлагается и сервер с поддержкой Modbus (код заказа XPC100200K-02).

Стоит сказать пару слов о потреблении этих миниатюрных модулей. Серверы xPico 110 требуют источника напряжения 3,3 В, а питающий ток для них составляет 240 мА при максимальной производительности (100 BaseT, 120 МГц CPU).

Чтобы создать простейшее Ethernet устройство на базе xPico или xPico 110, можно обойтись не только без знаний программирования, но и без глубоких знаний схемотехники. Для этого следует воспользоваться отладочным набором xPico Development Kit Solutions:

  • XPC100100K-02 для xPico;
  • XPC100200K-02 для xPico 110 (рис. 7).

Набор XPC100200K-02 включает в себя внешний сетевой блок питания с вилками-адаптерами и непосредственно отладочную плату. Плата содержит модуль xPico 110, микросхемы приемопередатчиков, разъемы, пользовательские светодиоды, джамперы и кнопки.

Рис. 7. Внешний вид отладочной платы XPC100200K-02

Так как миниатюрные модульные веб-серверы xPico и xPico 110 позволяют подключить практически любой микроконтроллер к Ethernet, то сферы применения конечных устройств могут быть самыми разными:

  • удаленное управление промышленным оборудованием;
  • системы сигнализации и безопасности;
  • системы «Умный дом»;
  • системы управления дорожным движением;
  • спортивное оборудование;
  • медицинские системы и т. д.

Характеристики веб-сервера xPico 110 XPC100200B-01:

  • Встроенный процессор: 16-битный контроллер DSTni-EX (с архитектурой x86);
  • Встроенная память: 512 кбайт FLASH и 256 кбайт ОЗУ;
  • Память веб-страниц: 384 кбайт;
  • Интерфейс Ethernet: 10/110 Ethernet;
  • Поддерживаемые интерфейсы: TCP/IP, UDP/IP, DHCP, ARP, ICMP, DHCP, Auto-IP, DNS, SNMPv1, TFTP;
  • Интерфейс с управляющим контроллером: 2 x UART со скоростью до 921 кбайт/с;
  • Число портов ввода-вывода: 8;
  • Напряжение питания: 3,3 В;
  • Типовой ток потребления: 240 мкА;
  • Диапазон рабочих температур: -40…+85°C;
  • Корпус: 18,3 x 31,1 x 3,0 мм.