микроконтроллеры от ведущих мировых производителей

Проводные сети Ethernet остаются популярными и востребованными, несмотря на бурное развитие беспроводных технологий, предлагаемых им на замену. Развитая инфраструктура позволяет просто и дешево обеспечить подключение любых устройств (счетчиков расхода ресурсов, контрольно-кассового оборудования) к локальным сетям и сети Интернет. Кроме того, в случае проводного подключения можно не беспокоиться об устойчивости канала обмена и возможных сбоях в передаче из-за воздействия внешних условий, что не всегда может  быть обеспечено при использовании беспроводных соединений.

Микросхемы компании Wiznet являются одним из самых простых в освоении и применении решений для проводного Ethernet. Этот производитель уже более 10 лет выпускает аппаратные мосты Ethernet,  аппаратный стек TCP/IP которых включает в себя поддержку протоколов TCP, UDP, IPv4, ICMP, IGMP и PPPoE. Этого вполне достаточно для реализации типовых задач по удаленному сбору данных, мониторингу и управлению. В данной статье мы расскажем о перспективных микросхемах Wiznet и их основных возможностях, а также  покажем базовые принципы работы с мостом W5500 на примере его подключения к микроконтроллеру Microchip (Atmel) SAM D21 (ARM Cortex M0).      

 

 Удаленный сбор данных, мониторинг, управление и другие аналогичные задачи становятся все более популярными. В частности, этому способствует активная реклама “интернета вещей” (IoT). Очевидно, что в устройствах IoT наибольшее применение должны получить беспроводные решения, тем не менее, проводные сети не утратят своих позиций в ближайшем будущем. Если пять лет назад встроенная в микроконтроллеры поддержка Ethernet была редкостью, сегодня многие производители предусматривают такую возможность в своих микросхемах.

Компания Wiznet специализируется на разработке и производстве микросхем для Ethernet-приложений, а также коммуникационных модулей на их базе. Основной отличительной особенностью микросхем Wiznet является аппаратная реализация стека TCP/IP. На первый взгляд, интегрированное решение выглядит предпочтительнее, чем использование внешних микросхем Wiznet. Но нет, здесь и сказывается наличие аппаратной поддержки TCP/IP. В большинстве существующих решений аппаратно реализуется только MAC-уровень, стек TCP/IP реализуется программными средствами. В частности, это объясняет причины, почему поддержка интерфейса Ethernet добавляется в микроконтроллеры с ядром не младше Cortex M4. Это оставляет решениям от Wiznet достаточно большую нишу для применения. Например, это модернизируемые устройства, где не требуется увеличение производительности микроконтроллера (МК), и только необходимо добавить сетевой интерфейс.

Итак, теперь расскажем о том, какие аппаратные мосты от Wiznet можно рассматривать в качестве перспективы для новых проектов. На текущий момент, с точки зрения новых проектов, имеет смысл выбирать между мостами W5500 и W5300, о них и расскажем далее.

 Рис.1 Структурная блок-схема моста W5500

Рис.2 Структурная блок-схема моста W5300

В общих чертах, все Ethernet-мосты Wiznet, выпускаемые  в настоящее время, имеют общую внутреннюю структуру (см. рис 1 и рис.2). Основой моста является аппаратный блок Ethernet, в который входят MAC-уровень и аппаратный стек TCP/IP которых включает в себя поддержку протоколов TCP, UDP, IPv4, ICMP, IGMP и PPPoE. Встроенный физический уровень PHY W5500 и W5300 обеспечивает возможность работы с сетями Ethernet 10BaseT/100BaseTX. Отличительной чертой встроенного PHY W5300 является поддержка функции auto-MDIX (определение типа кабеля – прямой или перекрестный), физический уровень W5500 эту функцию не поддерживает. Из внешних компонентов с этой стороны требуются только трансформатор и разъем. Микросхема W5300, кроме встроенного PHY, имеет дополнительный внешний интерфейс MII (media independent interface) для подключения внешней микросхемы физического уровня. Это может быть полезно, если есть необходимость подключения к сети, например, по оптической линии. 

Управление мостами, а также прием и передача данных осуществляются по интерфейсу SPI в случае W5500 или параллельному 8/16-разрядному интерфейсу у W5300. Максимальная рабочая частота SPI W5500 может быть установлена равной 80 МГц. В реальной ситуации можно ориентироваться на следующие показатели пропускной способности в зависимости от частоты SPI: при 24 МГц она может достигать 8 Мбит/с, при 40 МГц – 16 Мбит/c при работе с одним сокетом на прием и передачу (данные показатели приводятся в качестве оценки возможности по информации от пользователей). В случае W5300, при использовании 16-разрядной шины данных, пропускная способность будет ограничена пропускной способностью самой сети 100 BaseTx. Режимы работы микросхем, установка их в то или иное состояние осуществляется через регистры управления.

Для приема и передачи данных выделена специальная область памяти, объем которой у W5500 равен 32 кбайтам, у W5300 – 128 кбайтам. Общий объем памяти распределяется поровну, на прием и передачу. Обе микросхемы поддерживают одновременную работу с 8-ю сокетами. В зависимости от задачи и количества активных сокетов, последним можно назначить различный рабочий объем памяти на прием и передачу. Для W5500 сокету можно зарезервировать объем в 1, 2, 4, 8 или 16 кбайт. По умолчанию, каждому сокету присвоено по 2 кбайта памяти на прием и передачу. Для W5300 каждому сокету можно выделить область памяти в диапазоне от 0 до 64 кбайт, на прием и передачу. Основным, при распределении памяти между сокетами, является условие кратности общей выделенной памяти восьми. По умолчанию, каждому сокету присвоено по 8 кбайт памяти на прием и передачу.               

Рабочие характеристики микросхем следующие. Номинальное напряжение питания W5300 и W5500 составляет 3,3 В. Обе микросхемы могут работать с внешними устройствами с выходами 3.3 В и 5 В. Их рабочий температурный диапазон лежит в пределах от -40 0С до +85 0С.

Рис.3 Модуль WIZ830MJ

Типовое энергопотребление W5300 составляет 175 мА при ручном выборе типа сети и 180 мА при включении функции автоматического определения сети блоком PHY, или 65 мА при использовании внешней микросхемы PHY. Специальных режимов по снижению энергопотребления в W5300 нет.

W5500 имеет максимальное потребление в режиме передачи по сети 100 BaseTx, и оно может достигать 132 мА. Имеется режим Power Down, при котором выключается блок PHY, типовое потребление в этом случае равно 13 мА. Перевод микросхемы в режим Power Down и выход из него осуществляется программным путем.      

Рис.3 Модуль WIZ850io    

На базе этих микросхем Wiznet предлагает несколько мезонинных модулей, которые могут быть использованы на этапе макетирования и/или в мелкосерийных проектах. Ниже кратко расскажем о самых популярных из них.

Мезонинный модуль WIZ830MJ (рис. 3) реализован на базе моста W5300. Модуль включает в себя все необходимые компоненты для работы моста и Ethernet-разъем со встроенным трансформатором. Все управляющие работой W5300 линии, 16 разрядов шины данных, а также питание выведены на два двухрядных штыревых разъема, шаг выводов разъемов составляет 2.54 мм.                   

Рис.4 Модуль WIZ550io

Миниатюрный мезонинный модуль WIZ850io (рис.3) на базе W5500 является самым недорогим готовым решением для реализации Ethernet-соединения. Линии SPI, сброс и питание выведены на два однорядных штыревых разъема (рис.5), шаг выводов – 2.54 мм. Модуль полностью совместим по выводам с модулем WIZ820io, реализованном на предшественнице W5500 - микросхеме W5200, не рекомендованной к использованию в новых разработках.

WIZ550io – это еще один популярный модуль на микросхеме W5500 (рис. 4). Основным отличием его от WIZ850io является дополнительный микроконтроллер, который обеспечивает запуск моста W5500 в рабочий режим после подачи питания на модуль. В памяти микроконтроллера “предпрошиты” сетевые настройки, включая уникальный MAC-адрес, после загрузки которых в W5500 последний становится доступен по сети.    

Базовые принципы работы с микросхемой W5500 покажем на примере реализации организации обмена между МК и ПК. В качестве МК будет использоваться ARM Cortex-M0 SAM D21 Microchip (Atmel), а Ethernet-мост W5500 будет служить для организации сетевого соединения. Для примера возьмем отладочную плату Microchip (Atmel) XPlained Pro ATSAMD21-XPRO и модуль Wiznet Wiz850io. В таблице 1 показан порядок подключения выводов модуля и отладочной платы.  В качестве среды разработки для микроконтроллера (МК) SAM D21 воспользуемся Atmel Studio 7 и Atmel Software Framework (ASF).

Рис. 5 Назначение выводов модуля Wiz850io

 

Таблица 1. Подключение платы XPlained Pro ATSAMD21-XPRO к модулю Wiz850io:

 

Vcc

Gnd

SCLK

MISO

MOSI

CS

RST

Wiz850io

3V3

GND

SCLK

MISO

MOSI

SCNn

RSTn

ATSAMD21-XPRO

PWR2

PWR4

Ext1 18

Ext1 17

Ext1 16

Ext1 15

Ext1 7

 

Создание шаблона проекта в ASF полностью аналогично тому, как было описано в статье “Графический контроллер EVE FT800 FTDI и микроконтроллер SAMD21 Atmel. Работаем с графическими изображениями” [1]. Для работы с W5500 нам понадобятся те же самые периферийные модули и библиотеки, что были использованы в примере выше (рис.6). Создав шаблон проекта, добавляем в него файлы библиотеки Wiznet ioLibrary для работы с мостами [2]. Для адаптации библиотеки Wiznet для работы с SAM D21 необходимо изменить функции чтения/записи (файл W5500.c), функцию установки линий SPI в активное/неактивное состояние CS (wizchip_conf.c) и управление сбросом RST (реализовано в main.c). Подробно на этом останавливаться не будем, итоговую реализацию можно посмотреть в проекте, который доступен в исходном виде по ссылке [3].

Рис. 6 Драйверы и функции, добавленные в проект через ASF

 

Работу с Ethernet-мостом начинаем с подачи сигнала сброса на линию RST:

       ioport_set_pin_level(RST_Pin, 0);

       delay_us(500);

ioport_set_pin_level(RST_Pin, 1);

delay_ms(1);

Длительность импульса сброса должна быть 500 мкс. Затем, в течение 1 мс происходит установка ФАПЧ в рабочий режим. После завершения этого этапа W5500 готов для инициализации.

В начальную конфигурацию входят установка значения приемных и передающих буферов и назначение сетевых параметров:

// размеры всех буферов равны 2 кбайтам

uint8_t txsize[8] = {2,2,2,2,2,2,2,2};

uint8_t rxsize[8] = {2,2,2,2,2,2,2,2};

wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x00, 0xab, 0xcd}, // MAC-адрес

.ip = {192, 168, 22, 3}, // IP

.sn = {255,255,255,0},   // Маска подсети

.gw = {192, 168, 22, 1}, // Основной шлюз

.dns = {0,0,0,0},        // в примере не используется

.dhcp = NETINFO_STATIC }; // в примере не используется

wizchip_init(txsize,rxsize); // устанавливаем размеры буферов

network_init(); // загружаем сетевые настройки в регистры GAR, SIPR, SUBR и SHAR

После назначения сетевых параметров W5500 будет доступен по сети, что можно проверить командой ping 192.168.22.3.

Основной рабочий цикл, в самом простом виде, будет выглядеть следующим образом:

       switch(getSn_SR(sn)) // sn – номер сокета

       {

            case SOCK_CLOSED:

             if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret; // открываем сокет SN в режиме TCP, с номером порта port и флагом для W5500: SF_BROAD_BLOCK, SF_MULTI_BLOCK, SF_IPv6_BLOCK, и/или SF_UNI_BLOCK

             break;

             default:

             break;

case SOCK_INIT :

             if( (ret = listen(sn)) != SOCK_OK) return ret;

             break;

case SOCK_ESTABLISHED :

            

             if((size = getSn_RX_RSR(sn)) > 0)      

{

                    if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;

                    ret = recv(sn, buf, size);

                    if(ret <= 0) return ret;

                    sentsize = 0;

                    while(size != sentsize)

                    {

                           ret = send(sn, buf, size);

                           if(ret < 0)

                           {

                                  close(sn);

                                  return ret;

                           }

                           sentsize += ret;

                    }

             }

             break;

            case SOCK_CLOSE_WAIT :

                    if((ret = disconnect(sn)) != SOCK_OK) return ret;

             break;               

       }

       return 1;

}

В цикле постоянно проверяем регистр состояния сокетов Sn_Sr. Изменения его статуса происходят при изменении в командном регистре Sn_Cr W5500 или при приеме специальных пакетов SYN или FIN.

В первоначальном состоянии сокеты закрыты и имеют статус SOCK_CLOSED. Получив этот статус, можно открыть нужный нам сокет функцией socket() в режиме TCP.

Успешные инициализация и открытие сокета будут подтверждены сменой состояния регистра Sn_Sr, который будет иметь состояние SOCK_INIT. Функцией listen() переводим W5500 в режим ожидания запроса на установление соединения от удаленного клиента.

При получении такого запроса W5500 перейдет в состояние SOCK_ESTABLISHED, что говорит об установлении соединения с клиентом. Пока мост находится в этом состоянии, он может принимать и передавать данные по сети. В данном примере мы принимаем данные от клиента и передаем их обратно. Наличие и количество данных проверяем чтением регистра Sn_Rx_RSR, принимаем их функцией recv() и отправляем обратно функцией send().

При получении запроса FIN от клиента на закрытие сокета W5500 переходит в состояние SOCK_WAIT_CLOSE. В этом состоянии можно принимать и передавать данные. Функцией disconnect() передаем в командный регистр команду DISCON. При использовании данной команды W5500 подтверждает закрытие сокета отправкой пакета FIN клиенту. При этом регистр состяния меняет статус на SOCK_CLOSED. Закрыть сокет также можно командой CLOSE, при этом W5500 не передает никаких подтверждающих пакетов клиенту.        

Этот простой пример демонстрирует базовые возможности приема и передачи данных по сети в режиме TCP сервер. С его помощь можно быстро протестировать возможности Etehrnet-моста и понять насколько он удовлетворяет поставленным задачам. Полный проект для SAM D21 приведен по ссылке [3].

Несмотря на то, что сегодня многие производители предлагают Ethernet в составе своих контроллеров, аппаратные решения от Wiznet не теряют своей привлекательности. В первую очередь это касается небольших проектов и/или когда необходимо получить готовое и работоспособное решение в очень короткий срок. Приведенный пример для МК SAM D21 показывает, как просто и быстро можно реализовать сетевое соединение с помощью Ethernet-моста W5500. Кроме того, в интегрированных решениях мы привязаны к тому набору периферии, который дает производитель. В случае связки МК+Ethernet-мост подобрать МК с теми интерфейсами, которые нам нужны гораздо проще. Например, в задачах автоматизации и управления может требоваться большое количество последовательных каналов передачи, например RS-232/422/485, связка нового МК Atmel (Microchip) SAM G55 и W5500 позволит легко реализовать сетевой конвертер Ethernet на 7 последовательных каналов.   

Литература

1. Долгушин С. Графический контроллер EVE FT800 FTDI и микроконтроллер SAMD21 Atmel. Работаем с графическими изображениями // Компоненты и технологии. 2014. № 8.

2. https://github.com/Wiznet/ioLibrary_Driver

3. http://mymcu.ru/articles/realizatsiya-ethernet-c-pomoshchyu-mosta-wiznet-w5500-i-mikrokontrollera-microchip-atmel-sam-d21.html

4. http://mymcu.ru/articles/kontroller-w7500p-arm-cortex-m0-apparatniy-ethernet-s-chego-nachat.html