Научная статья на тему 'Начинаем работать с Ethernet-контроллерами W7100A компании WIZnet'

Начинаем работать с Ethernet-контроллерами W7100A компании WIZnet Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
64
11
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Долгушин Сергей

Статья посвящена Ethernet-контроллерам W7100A и W7100A-64QFN компании WIZnet. Эти контроллеры, на наш взгляд, незаслуженно обойдены вниманием российских разработчиков, хотя существует множество приложений, где они с успехом могут быть востребованы.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Начинаем работать с Ethernet-контроллерами W7100A компании WIZnet»

начинаем работать

с Ethernet-контроллерами W7100A компании WIZnet

Сергей Долгушин

dsa@efo.ru

Статья посвящена Ethernet-контроллерам W7100A и W7100A-64QFN компании WIZnet. Эти контроллеры, на наш взгляд, незаслуженно обойдены вниманием российских разработчиков, хотя существует множество приложений, где они с успехом могут быть востребованы.

Основная продукция южнокорейской компании WIZnet, куда входят интегральные микросхемы сетевых контроллеров или аппаратных Ethernet-мостов W5300, W5200, W5100 и W3150A+, хорошо знакома отечественным разработчикам. Ethernet-мосты представляют собой функционально законченные решения для встраиваемых приложений, где требуется наличие канала Ethernet. Эти микросхемы аппаратно реализуют протоколы транспортного, сетевого и канального уровней системы OSI (Open System Interconnection): TCP, UDP, IPv4, ICMP, ARP, IGMP и MAC, а также обеспечивают аппаратную поддержку протокола PPPoE (Point-to-point over Ethernet) с PAP/CHAP протоколами аутентификации. Микросхемы W5300, W5200 и W5100 имеют встроенный в кристалл узел, который реализует физический уровень Ethernet [1].

Все перечисленные микросхемы работают под управлением внешнего микроконтроллера по параллельному или последовательному (SPI) интерфейсам. А что если в разрабатываемом устройстве есть только ин-

терфейс UART или ресурсов управляющего микроконтроллера (ограниченные производительность, память и т. п.) недостаточно для работы с аппаратным мостом? В этом случае поможет Ethernet-контроллер W7100A.

Микросхема W7100A объединяет на одном кристалле аппаратный блок Ethernet-моста со встроенными уровнями MAC и PHY, а также MSC-51 совместимое процессорное ядро (рис. 1). Ethernet-блок этого контроллера аналогичен по характеристикам микросхеме W5300. Он поддерживает те же протоколы и обеспечивает до восьми соединений на аппаратном уровне.

Ethernet-контроллеры W7100A производятся в двух корпусах — LQFP-100 и QFN-64. Микросхемы, выполненные в 64-выводном корпусе, имеют несколько отличий:

• Режим работы (auto-negotiation) физического уровня задается только программным путем (для 100-выводного корпуса — программным и аппаратным).

• Доступно 19 линий ввода/вывода общего назначения (для 100-выводного доступно 32 линии).

Рис. 1. Блок-схема Ethernet-контроллера W7100A

• Отсутствует возможность подключения внешней памяти.

• Отсутствуют сигналы управления таймерами.

• Доступны только два сигнала, индицирующие состояние линии Ethernet: связь установлена (Link) и скорость (низкий уровень — 10 Мбайт, высокий — 100 Мбайт).

• Доступна одна линия внешнего прерывания (для 100-выводного — четыре линии). Для программирования и отладки

в Ethernet-контроллерах W7100A предусмотрен специализированный отладочный узел (Debug). Программирование и отладка контроллера в данном случае осуществляется с помощью внутрисхемного отладчика iMCU7100 Debugger (рис. 2) по трехпро-водному интерфейсу. Также предусмотрена возможность программирования микросхем W7100A по интерфейсу UART. Этот режим активируется переводом вывода W7100A BOOTEN в высокое состояние.

Для тестирования, разработки и отладки приложений на базе контроллеров W7100A компания WIZnet предлагает набор iMCU7100 EVB (рис. 3). В состав этого набора входят сама отладочная плата на базе контроллера W7100A, кабели Ethernet и COM, адаптер питания и символьный дисплей (16 символов х 2 строки).

Также на базе этой микросхемы выпускаются готовые модули Wiz220I0 и Wiz107SR. Они могут быть использованы как готовые или отладочные устройства.

Модуль Wiz220I0 (рис. 4) и отладочный набор на его базе Wiz220I0-EVB демонстрируют возможности микросхемы W7100A по реализации веб-сервера. При использовании фирменного ПО (firmware), которое изначально «прошито» в Ethernet-контроллер W7100A, могут быть реализованы следующие функции: управление устройствами по восьми дискретным цифровым выходам и восьми входам; работа с двумя источниками аналогового сигнала (например, датчика-

Рис. 2. Внутрисхемный отладчик iMCU7100 Debugger

Рис. 3. Отладочный набор iMCU7100 EVB

ми давления) в диапазоне от 0 до 5 В; цифро-аналоговое преобразование по двум линиям в диапазоне от 0 до 4 В; прием и передача данных по интерфейсу UART.

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

DlgilmJ Out|iul - L Alt! & l'ÜRJ

!u»jrJB: urt'iti-itf нл^Ту^ц ]

|ТО„| [10^1 UU„J DBUS [M l OOJ ящщяляяя

ЭЭНОППОО

I PgoJ DhipiJ Cp^ I

Рис. 5. Пример веб-страницы

Управление модулем осуществляется через веб-интерфейс, что избавляет разработчика от необходимости написания ПО верхнего уровня и обеспечивает совместимость с различными ОС. На рис. 5 приведена одна из веб-страниц, с помощью которой осуществляется управление выходными линиями модуля и передача текстового сообщения по интерфейсу UART. Элементы управления реализованы стандартными средствами языка HTML. Модуль Wiz22010 представляет собой готовое решение, на базе которого можно реализовать удаленную систему управления и контроля. Дизайн веб-интерфейса модуля можно изменять и загружать в Ethernet-контроллер W7100A, не затрагивая при этом его основной программы. Подробнее про работу с модулем Wiz22010 в режиме веб-сервера и реализации HTTP-протокола мы расскажем в следующей статье.

Модуль Wiz107SR реализует готовый конвертер интерфейсов Ethernet-RS-232 (рис. 6). С базовым ПО модуль обеспечивает передачу данных по каналу RS-232 со скоростью до 230 кбод. Управление приемом/передачей — аппаратное (RTS/CTS) или программное. По цене и своим функциональным характеристикам этот модуль идеально подходит для встраиваемых приложений. Небольшие габариты модуля (48x30x18 мм) и удобные крепежные отверстия позволяют установить его в любом удобном месте внутри корпуса прибора. В принципе этот модуль допускает возможность использования на его базе ПО собственной разработки, если фирменное ПО не решает требуемую задачу полностью.

Модуль Wiz108SR представляет собой конвертер интерфейсов Ethernet-RS-422/485. По основным характеристикам он соответствует Wiz107SR, за исключением того, что на плате установлены микросхемы драйверов физического уровня RS-422/485.

Программная поддержка микросхемы W7100A включает в себя драйвер Ethernet в исходных кодах, примеры приложений, демон-

Рис. 6. Модуль Wiz107SR

Рис. 7. Проект SToE, открытый в Keil uVision 4

стрирующие различные режимы работы, и специализированные утилиты для отладки (W7100 Debugger) и программирования (WizISP) Ethernet-моста. Все это доступно на официальном сайте WIZnet [4].

Рассмотрим работу с Ethernet-контрол-лером W7100A на примере реализации преобразователя Ethernet — UART. Такие преобразователи широко востребованы, а рассматриваемый Ethernet-контроллер хорошо подходит по своим возможностям и цене. В качестве отладочного набора будем использовать комплект Wiz220IO-EVB, в который входит модуль Wiz220I0 и базовая плата Wiz220 Base Board. На базовой плате реализована схема питания модуля Wiz220IO и интерфейс RS-232 (выведен на стандартный разъем DB9-Male). Остальные элементы базовой платы для данного примера несущественны, о них можно получить информацию, обратившись к руководству пользователя Wiz220I0-EVB.

За основу приложения возьмем пример SToE Server, который можно скачать, пройдя по следующей ссылке [6]. Для работы с приложением понадобится компилятор Keil uVision версии 3 или 4 (рис. 7). Данный проект включает в себя следующие файлы:

• socket.c;

• socket.h;

• TCPIIPCore.C;

• TCPIIPCore.h;

• types.h;

• iinchip_conf.h;

• W7100.h.

Эти файлы составляют драйвер для работы с микроконтроллером и Ethernet-блоком. Файлы serial.c и serial.h — выбор и настройка режима работы UART; putchar.c и putchar.h — вывод байта в UART; main.c — собственно реализует само приложение.

Описание примера начнем с интерфейса UART. Блок последовательного интерфейса контроллера W7100A работает в полнодуплексном режиме со скоростью передачи данных от 2400 до 230 400 бит/с. UART контроллера может работать в четырех режимах, для стандартных приложений наиболее подходящим является режим 1 (Mode 1). В этом режиме передается 1 старт-бит, 8 бит данных и 1 стоп-бит. Тактирование блока UART, то есть установка его скорости передачи, осуществляется с помощью таймера 1 или 2. Эти параметры задаются в примере в файле seriate

void InitSerial(void)

{

ET1 = 0; // Отключение прерывания таймера

TMOD = 0x20; // Выбор режима работы, для тактирования

// UART таймер переводится в режим 2 (Mode 2). // В этом режиме таймер играет роль // 8-разрядного счетчика с автозагрузкой. // Скорость передачи задается установкой // регистров PCON и TH1, см. следующие // строки листинга PCON 1= 0x80; // Соответствие скоростей передачи и значения // бита SMOD см. в таблице 6.5 [3]

TH1 = 0xFE; // Соответствие скоростей передачи и значения // регистра TH1 см. в таблице 6.5 [3], в данном // случае скорость равна 230 кбит/с TR1 = 1; // Запускаем таймер 1 установкой бита TR1

// конфигурационного регистра таймеров 0 и 1 // TCON (см. раздел 5 [3]) SCON = 0x50; // Задаем режим работы Mode 1 блока UART // (биты SM0=0, SM1 = 1, SM2=2), разрешаем // работу (REN=1) RI = 0; // Сброс флага прерывания, индицирующего

// окончание приема данных TI = 0; // Сброс флага прерывания, индицирующего

// окончание передачи данных ES = 1; // Разрешаем прерывания блока UART

}

Прием данных осуществляется в процедуре обработки прерывания UART — void Int() interrupt 4, описанной в файле main.c. Процедура читает входящие данные из буфера UART и помещает их во внутреннюю память. При достижении заданного порога MAX_ SBUF_SIZE данные передаются в блок Ethernet.

Передача данных осуществляется функцией charputchar (char c), описанной в одноименном файле:

// Записываем данные в буфер UART SBUF = c;

// Ждем завершения передачи while(!TI); TI = 0; return c;

В результате описанных действий интерфейс UART подготовлен к дальнейшей работе.

Переходим к интерфейсу Ethernet и протоколу TCP/IP. Подготовка к работе начинается с инициализации блока Ethernet, которая заключается в присвоении сетевых параметров (MAC-адрес, IP-адрес, адрес шлюза и маска подсети) и задании размеров приемных и выходных буферов для каждого из сокетов. Под приемный и передающий буферы зарезервировано 16 кбайт для каждого. Эти 16 кбайт могут быть распределены между 8 сокетами в зависимости от задач. При использовании одного сокета все 16 кбайт приемного и 16 кбайт передающего буфера могут быть назначены этому сокету. Инициализация выполняется функцией void Init_Network(void) в файле main. c. Процедура проста и не имеет существенных отличий от описанной в [2] для моста W5100. Как и для моста W5100, после инициализации Ethernet-контроллер W7100A должен отвечать на команду ping.

Процессы установления соединения, ожидание входящего подключения, приема/передачи данных и отключения реализованы в функции void StoE(SOCKET s, uint16port, uint8 xdata * e_buf, uint16mode) в файле main.c:

switch (getSn_SR(s)) // Проверка текущего статуса сокета s

{

case SOCK_ESTABLISHED: // Соединение с клиентом // установлено

if((e_len = getSn_RX_RSR(s)) > 0) // Проверка наличия // данных в приемном // буфере Ethernet

{

if(e_len > MAX_EBUF_SIZE) e_len = MAX_EBUF_SIZE; s_len = recv(s, e_buf, e_len); // Читаем принятые данные

for(i=0; i < s_len; i++) {

putchar(*(e_buf + i)); // Передаем их в UART

}

}

SerialToEthernet(s); // Если есть принятые данные со // стороны UART, передаем их // сетевому клиенту

break;

case SOCK_CLOSE_WAIT: // Получен запрос от клиента // на завершение сессии printf("CLOSE_WAIT : %d\r\n",(int) s); disconnect(s); // Осуществляем отключение

break;

case SOCK_CLOSED: // Сокет закрыт printf("CLOSED. CH : %d\r\n", (int)s); close(s);

socket(s,Sn_MR_TCP,port,mode); // Открываем сокет s // в режиме TCP

break;

case SOCK_INIT: // Сокет открыт listen(s); // Ожидаем запрос на подключение

// от удаленного клиента // printf("StoE Started. CH : %d \r\n", (int)s);

break;

}

Рис. 8. Утилита WizISP для программирования контроллера W7100A

новленным на плату Wiz22010 Base Board. На этой плате имеются все необходимые элементы для питания модуля Wiz22010 (входное напряжение питания платы Base Board — 5 В) и драйвер интерфейса RS-232. Для подключения отладочного набора к ПК используем преобразователь US232R-100. Дополнительно понадобится переходник с разъемами DB9-Female, так как на преобразователе US232R-100 и базовой плате Wiz22010 установлены разъемы DB9-Male.

Для программирования модуля Wiz22010 будет удобно установить джампер на контактные площадки, помеченные как J3 [Boot]. Контактных площадок две: одна связана с выводом BOOTEN контроллера W7100A, а вторая — с шиной питания 3,3 В. Устанавливаем этот джампер и включаем питание: модуль перейдет в режим ожидания загрузки. На ПК запускаем утилиту WizISP. Начнем процедуру программирования с конвертации hex-файла, полученного в результате компиляции проекта в Ьгп-формат. Эта процедура запускается из панели инструментов кнопкой HexToBin. Затем установим соединение между утилитой и модулем WizISP. За это ответственны настройки COM Port Configuration. Выбираем номер порта, который присвоен ОС кабелю US232R-100, скорость обмена оставляем по умолчанию равной 115 кбит/с и нажимаем кнопку Open. Если все действия были выполнены правильно, в информационном окне Log Message утилиты WizISP появится сообщение вида:

Функция начинает работу с проверки статусного регистра Sn_SR сокета, указанного при вызове этой функции. В зависимости от его текущего состояния (сокет открыт, соединение установлено, ожидание закрытия соединения или сокет закрыт; подробнее о данном регистре в [3, стр. 92]) будут выполнены действия, описанные в листинге выше. Все функции по работе с сокетами, а также чтение и передача информации реализованы производителем. Использование протоколов TCP или UDP позволяет быстро реализовать сетевой канал обмена, как это показано в данном примере реализации преобразователя UART — Ethernet.

Остается убедиться в работоспособности приложения. Загрузка программы в контроллер W7100A осуществляется по интерфейсу UART с помощью утилиты WizISP (рис. 8). Этот режим активируется подачей «лог. 1» на выход BOOTEN перед запуском Ethernet-контроллера. В качестве переходных кабелей для программирования можно использовать преобразователи USB-Serial компании FTDI. Если используется интерфейс RS-232, подойдут кабели US232R-100 или UC232R-10; если используется прямой выход UART контроллера W7100A — TTL232R-3V3.

На примере программирования модуля Wiz22010 процесс будет выглядеть следующим образом. Модуль будет программироваться и тестироваться в составе набора Wiz22010 — EVB, то есть уста-

COM9 is opened @115200.

The flash ROM of W7100 is in CODE mode.

Режим загрузки Flash Operation Mode устанавливаем в положение Code, то есть загрузка будет осуществляться в область памяти программ. Далее производим следующие операции по порядку выполнения: стирание (Erase), проверка выполнения стирания (Blank check), запись (Program), чтение памяти (Read) и проверка записи (Verify). Эти команды доступны из основного меню Device и панели инструментов. Статус проверок стирания и записи отобразится в информационном окне в следующем виде:

Blank check successfully.

Flash ROM was verified successfully.

Теперь наша микросхема запрограммирована, и нам остается протестировать работу приложения. Самый простой и доступный способ для тестирования — использование стандартной утилиты Windows HyperTerminal. Внешний вид и настройки приведены на рис. 9.

Модуль подключается к ПК по сети и по USB с использованием виртуального COM-порта. Настроив оба канала, активируем соединение и подаем питание на модуль Wiz22010. В окне COM-порта должно появиться информационное сообщение, аналогичное изображенному

ПН

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ала щ

Р Sd îi liEJ Etf

I hi i±jm |llû!lf*.z:f*c

Г. ,rir-

L-mu [lb fc- ■-.-•г

Г~*П

и

Рис. 9. Приложение HyperTerminal: a) настройки Ethernet-соединения; б) настройки COM-соединения

Рис. 10. Тестирование работы приложения

на рис. 10. После этого проверяем передачу с обеих сторон, например, передавая сообщение Application started (рис. 10). Наличие этого сообщения в окнах говорит об успешной передаче с одной и другой сторон.

Итак, в статье были рассмотрены Ethernet-контроллер W7100 компании WIZnet и основные отладочные утилиты и модули для него. Стоит отметить, что контроллер очень прост в освоении. Наличие готовых примеров позволяет быстро проверить его возможности для решения конкретных задач. А наличие таких модулей на его базе, как рассмотренный Wiz22010, позволяет полностью решить конкретную задачу. Для мелкосерийных изделий такой путь гораздо эффективнее, чем полный

цикл разработки и производства аппаратной

и программной частей изделия. ■

Литература

1. Кривченко И. В. Новая продукция WIZnet для приложений Embedded Internet // Компоненты и технологии. 2007. № 4.

2. Долгушин С. А. Работаем с Vinculum II и W5100. USB от FTDI + Ethernet от WIZnet // Компоненты и технологии. 2011. № 12.

3. Internet Embedded MCU W7100A. Datasheet.

4. www.WIZnet.co.kr

5. www.efo.ru

6. http://www1.mymcu.ru:8080/content/articles/ WIZnet/SToE.rar

i Надоели баннеры? Вы всегда можете отключить рекламу.