Новый модуль Wiznet W5100S-EVB-Pico – Raspberry Pi Pico с аппаратной поддержкой Ethernet
17 Ноябрь, 2021
- Wiznet
- Перспективные Ethernet-мосты Wiznet и модули на их базе
- Ethernet-модули Wiznet для платформы Raspberry Pi RP2040
В начале 2021 года компания Raspberry PI анонсировала новый микроконтроллер RP2040 и модуль Raspberry Pi Pico. Данный микроконтроллер интересен своими характеристиками, в частности - наличием двух ядер Arm Cortex-M0+ с тактовой частотой 133 МГц. На волне быстро растущего интереса во всем мире к новой продукции Raspberry, компания Wiznet представила два новых модуля: WIZnet Ethernet HAT и W5100S-EVB-Pico. Первый из них является платой расширения на основе Ethernet-моста W5100S для базового модуля Raspberry Pi Pico. Второй модуль представляет собой полнофункциональный аналог Raspberry Pi Pico с установленными на плате Ethernet-мостом W5100S и сетевым разъемом RJ-45. В данной статье мы предлагаем познакомиться с Ethernet-мостом Wiznet W5100S и модулем W5100S-EVB-Pico.
Компания Wiznet давно и успешно специализируется на разработке и производстве микросхем для Ethernet-приложений, а также коммуникационных модулей на их базе. Основной отличительной особенностью микросхем Wiznet является аппаратная реализация стека TCP/IP. В популярных конкурентных решениях, например, в распространенной микросхеме Microchip ENC28J60, аппаратно реализуется только MAC- и PHY уровни, а стек TCP/IP реализуется программно.
В общих чертах, все Ethernet-мосты Wiznet, выпускаемые в настоящее время, имеют общую внутреннюю структуру (см. рис.1). Основой моста является аппаратный блок Ethernet, в который входят MAC-уровень и аппаратный стек TCP/IP. Последний включает в себя поддержку протоколов TCP, UDP, IPv4/IPv6 (только W6100), ICMP, IGMP и PPPoE (может отсутствовать). Встроенный физический уровень PHY есть у всех современных мостов Wiznet, и он обеспечивает возможность работы с сетями Ethernet 10BaseT/100BaseTX. Из общего списка выделяется только микросхема W5300, которая, кроме встроенного PHY, имеет дополнительный внешний интерфейс MII (media independent interface) для подключения внешней микросхемы физического уровня. Это может быть полезно, если есть необходимость подключения к сети, например, по оптической линии.
Рисунок 1. Блок-схема Ethernet-моста Wiznet
Наиболее популярными Ethernet-мостами, которые сейчас применяются в серийных изделиях, производимых в Росcии, являются: W5500, W5100, W5300. Про мосты W5500 и W5300 мы ранее уже рассказывали в статье "Перспективные Ethernet-мосты компании Wiznet". Микросхема W5100S, о которой пойдет речь ниже, и W6100, которая совместима по базовому функционалу и корпусам с W5100S, но поддерживает протокол IPv6 – это новые мосты Wiznet.
Подробнее об этих мостах, отладочных модулях для них и наличии на складе можно посмотреть на нашем сайте в разделе "Перспективные Ethernet-мосты Wiznet и модули на их базе"
Ethernet-мост W5100S представляет собой обновленную и удешевленную версию микросхемы W5100. Принципиальным отличием W5100 и W5100S является не совместимость по выводам. W5100S выпускается в меньших по габаритам корпусах 48 LQFP и 48 QFN. Маленький корпус – это один из существенных факторов, позволивших снизить стоимость микросхемы (W5100 производится в корпусе 80 LQFP). Принципиальным отличием для разработчика также может являться отсутствие в новой микросхеме W5100S режима PPPoE, в остальном производитель обещает полную совместимость программного кода для W5100 и W5100S. У W5100S сохранена возможность выбора типа внешнего интерфейса между последовательным SPI и 8-разрядным параллельным интерфейсом. При использовании последнего можно ожидать максимальной скорости передачи данных в 25 Мбит/с.
Из новых функциональных возможностей моста W5100S можно отметить наиболее интересные в прикладном плане Socket-less функции, предназначенные для отправки ARP- и PING-запросов. Про эти функции мы поговорим подробнее, когда будем рассматривать пример программы для модуля W5100S-EVB-Pico в конце статьи. Также добавлены регистры, обеспечивающие доступ к PHY-уровню. Например, теперь доступен статус физического соединения Caboff (cable off), за который отвечает старший бит регистра PHYSR0. Вместе со статусом наличия сетевого соединения Link (PHYSR[0]) он может быть использован для тестирования канала связи в случае неполадок. Стоит отметить, что производитель не предусмотрел возможности использования данных регистров для принудительного закрытия сокета в случае пропадания соединения. Так что существенной пользы для типовых режимов работы данные нововведения не дают.
В новых модулях Ethernet HAT и W5100S-EVB-Pico в качестве Ethernet-моста производитель использует именно новую микросхему W5100S. Таким образом, предполагается популяризировать новый мост W5100S, используя большой интерес к новым микроконтроллерам Raspberry Pi RP2040 и модулям на их базе.
W5100S-EVB-Pico (рис.2) представляет собой плату, которая включает узел на базе контроллера RP2040 (он является аналогом фирменного модуля Raspberry Pi PICO) и узел, отвечающий за интерфейс Ethernet на базе моста W5100S и сетевого разъема RJ-45. Модуль W5100S-EVB-Pico полностью совместим по выводам с оригинальным модулем Raspberry Pi PICO. Исключением являются только линии GPIO с 16 по 21, которые служат для подключения моста W5100S к RP2040. При использовании интерфейса Ethernet эти линии не доступны разработчику для других целей. Также имеется различие в функции линии GPIO 23: в оригинальном модуле Raspberry Pi PICO она управляет выбором режима работы регулятора напряжения (ШИМ или ЧИМ), тогда как в модуле W5100S-EVB-Pico реализован линейный регулятор, поэтому GPIO 23 не используется.
Рис. 2 Внешний вид и назначение выводов модуля W5100S-EVB-Pico
WIZnet Ethernet HAT (Hardware Attached on Top) представляет собой мезонинный модуль на базе Ethernet-моста W5100S. Модуль совместим по выводам с Raspberry Pi PICO, интерфейсом для подключения моста W5100S к RP2040 служит SPI. WIZnet Ethernet HAT является простой платой расширения, которая добавляет интерфейс Ethernet к базовому модулю Raspberry Pi PICO. Аппаратно он полностью повторяет мезонинные модули WIS810SMJ и WIZ810SIO, и отличается только форм-фактором. Данный модуль может получать питание 5 В по линии VBUS (вывод 40) или 3 В по линии 3V3 (вывод 36). Одновременно подавать напряжение на оба эти вывода нельзя. В целом, данный модуль может быть интересен тем, кто уже имеет в своем арсенале плату Raspberry Pi PICO и хотел бы добавить к ней поддержку интерфейса Ethernet.
Рис.3 Внешний вид и назначение выводов модуля WIZnet Ethernet HAT
Рис 4 Мезонинный модуль Wiz810SIO на базе моста W5100S
Для поддержки разработчиков компания Wiznet портировала стандартную библиотеку для работы со своими мостами на платформу RP2040. Библиотека WIZnet и ряд готовых примеров для W5100S на языках С/С++ и CursuitPyton доступны по следующим ссылкам [2,3]. На текущий момент компания Wiznet предлагает готовые примеры, демонстрирующие передачу по TCP/IP, использование DHCP/DNS, основные принципы реализации HTTP-сервера, передачу по протоколу IoT MQTT (издатель/подписчик), работу с SNTP и использование протокола шифрования SSL при передаче по TCP.
Базовые принципы работы с данной библиотекой на примере организации передачи данных по протоколу TCP/IP мы подробно описывали в статье "Перспективные Ethernet-мосты компании Wiznet" на примере моста W5500. В данной статье также было показано, как и что необходимо изменить на уровне HAL, чтобы обеспечить взаимодействие микроконтроллера SAM D21 и моста W5500. В версии библиотеки для RP2040 производитель дает готовый для работы HAL-уровень, что существенно упрощает первое знакомство с модулем W5100S-EVB-PICO или связкой из модулей Raspberry-Pi-Pico и WIZnet Ethernet HAT. Порядок добавления библиотеки и примеров Wiznet для RP2040 аналогичен описанному порядку установки фирменных примеров Raspberry Pi в разделе 9.2. “Building on MS Windows”. Открытая папка с библиотекой и примерами в Visual Studio Code будет выглядеть следующим образом (рис 5).
Рис. 5 Окно MS Code с открытыми примерами и библиотекой Wiznet
Сборку всех примеров можно запустить, нажав иконку “Build” (рис 6) на нижней панели VS Code. После этого для всех примеров будут сгенерированы загрузочные файлы для RP2040.
Рис.6 – Процесс сборки проектов в MS Code
Теперь создадим свой собственный небольшой пример работы с модулем W5100S-EVB-PICO, который будет отправлять ARP-запросы с помощью микросхемы W5100S. Отправка ARP-запроса выбрана для первого примера не случайно. Функции отправки ARP- и PING-запросов на аппаратном уровне и без открытия сокетов впервые была добавлена производителем именно в микросхеме W5100S. На сегодня эту возможность аппаратно поддерживает только мост W6100. Для остальных мостов такая функция была доступна только в режиме MACRAW, и она требовала самостоятельного формирования пакета. PING-запросы могут быть полезны для тестирования целостности и быстродействия нашей сети, а ARP-запросы можно использовать, если назначение IP адресов в сети производится вручную. Для нашего проекта воспользуемся готовым примером от Wiznet (это ссылка на архив проекта), в котором уже реализованы нужные нам функции.
Для начала работы нам необходимо скопировать файлы ARP.c и ARP.h из данного примера в рабочую директорию. Затем на базе любого из приводимых Wiznet примеров для RP2040 создадим свой основной рабочий файл w5x00_arp.c (рис 7). Базовая структура всех примеров одинакова и состоит из инициализации блоков RP2040, необходимых для работы с мостом W5100S, и инициализации самого моста W5100S. Все действия, требуемые для инициализации Ethernet-моста W5500, были подробно описаны в статье "Перспективные мосты", ссылку на которую мы уже давали ранее. Для микросхемы W5100S они выполняются аналогично.
Рис. 7 Созданные файлы примера
В рабочем цикле в w5x00_arp.c реализуем отправку пакетов по ряду IP-адресов и выведем результат на терминал.
while (dest_ip[3]<15)
{
printf("Send ARP to : %d.%d.%d.%d\n", dest_ip[0], dest_ip[1], dest_ip[2], dest_ip[3]);
int8_t ret=arp_auto(dest_ip); // функция отправки ARP-запроса по указанному IP-адресу. Возвращает 1, если получен ответ. Возвращает 2, если за установленный период времени ответ не получен. Возвращает 0 во всех остальных случаях.
if(ret==1)
{
printf("ARP : successful\r\n");
get_arp_MacAddress(addr0);
printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\r\n",addr0[0],addr0[1],addr0[2],addr0[3],addr0[4],addr0[5],addr0[6] );
}
else printf("ARP : failure\r\n", ret);
dest_ip[3] = dest_ip[3] +1;
}
В функции arp_auto(addr) последовательно вызываются следующие функции:
configure_arp_request(void)
setSLIR(SLIR_TIMEOUT | SLIR_ARP);
setSLRCR(ArpRCR);
setSLRTR(ArpRTR);
В данной функции осуществляется сброс регистра прерываний для Socket-less команд SLIR, задаются значения периода повторений для повторных передач в регистре SLRTR и их количество в регистре SLRCR. В соответствии с этими параметрами W5100S будет продолжать отправлять ARP-запросы по заданному адресу до тех пор, пока количество передач не превысит указанное значение в регистре SLRCR, после чего в регистре SLIR будет установлен бит прерывания Timeout.
Следующая функция отвечает за отправку ARP-запроса:
send_arp_request(addr)
setSLPIPR(addr);
setSLCR(SLCMD_ARP);
Т.к. формирование пакета осуществляется микросхемой W5100S автоматически, то от нас требуется только передать целевой IP-адрес и установить бит ARP регистра SLCR в 1. В результате этого мост сформирует и отправит запрос по заданному нами адресу.
И остается только проконтролировать результат отправки запроса, что выполняется в функции:
recv_arp_reply()
if(getSLIR()&SLIR_ARP)
{
setSLIR(SLIR_ARP);
return 1;
}
else if(getSLIR()&SLIR_TIMEOUT)
{
setSLIR(SLIR_TIMEOUT);
return 2;
}
else return 0;
В данной функции опрашивается регистр прерываний SLIR. Бит ARP этого регистра, установленный в 1, говорит о том, что ответ получен. Бит Timeout этого регистра, установленный в 1, говорит о том, что ответ не получен и исчерпано количество заданных повторов передачи запроса.
И, если ответ получен, то выводим MAC-адрес устройства, имеющего указанный нами IP:
void get_arp_MacAddress(uint8_t* addr)
getSLPHAR(addr);
МАС-адрес из принятого пакета автоматически помещается в регистр SLPHAR.
Таким образом, достаточно просто формируется ARP-запрос с помощью нового функционала в Ethernet-мосте W5100S. Наша тестовая программа отправит запросы по нескольким IP-адресам в своем сегменте сети и выведет на экран результаты.
Загрузка скомпилированной программы в память модуля W5100S-EVB-PICO осуществляется по интерфейсу USB. Для перехода в режим загрузки необходимо выключить модуль, нажать на кнопку “bootsel” на модуле и подать питание. Модуль определится в ОС ПК как внешний накопитель. Файл “прошивки” копируем или переносим мышкой на этот носитель. После записи файла произойдет автоматическая перезагрузка микроконтроллера RP2040, и он начнет выполнение нашей программы. Результаты опроса будут выведены на экран терминала в следующем виде (рис 8).
Рис. 8. Результат выполнения примера отправки ARP-запросов
На этом мы завершим первое знакомство с новыми модулями Wiznet W5100S-EVB-PICO и WIZnet Ethernet HAT, а также с мостом W5100S. Еще раз напомним, что данный Ethernet-мост является переработанной версией популярной микросхемы W5100, и на текущий момент он является самым дешевым из всей линейки аппаратных Ethernet-мостов Wiznet. Новый модуль W5100S-EVB-PICO может послужить удобной и самодостаточной отладочной платой для знакомства с этим мостом, а также в качестве готовой платформы для решения широкого круга задач, где требуется Ethernet, благодаря большим функциональным возможностям двухъядерного микроконтроллера Raspberry Pi RP2040.
Стоимость (со склада ЭФО):
WIZnet Ethernet HAT 4,95$ + НДС
W5100S-EVB-Pico 9,95$ + НДС
Микросхемы и модули Wiznet на складе
Материалы к статье:
1. Долгушин С. “Перспективные Ethernet-мосты компании Wiznet ”
2. Примеры и библиотека Wiznet на С/С++ https://github.com/Wiznet/RP2040-HAT-C
3. Примеры и библиотека Wiznet на CircuitPyton https://github.com/Wiznet/RP2040-HAT-CircuitPython
4. “ Getting started with Raspberry Pi Pico”, https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf
5. “SOCKET-less Command Application Note”, https://docs.wiznet.io/img/products/w5100s/application/w5100s_an_slc_v100e.pdf
пример: https://docs.wiznet.io/img/products/w5100s/application/w5100s_evb_an_coide_slc_v100.zip
По техническим вопросам просьба обращаться к Сергею Долгушину, email: dsa@efo.ru