RadioRadar - Радиоэлектроника, даташиты, схемы

https://www.radioradar.net/radiofan/radiofan_technology/w5100.html

Реализация на базе микросхемы W5100 устройства для работы в сетях Ethernet

В настоящее время широкое развитие в быту и деловой жизни получают удаленный доступ к информации, сбор данных, удаленное управление и мониторинг в промышленности, охранные системы, услуги IP-телефонии и видеосвязи. Все это становится неотъемлемой частью современной жизни.
Обязательная составная часть таких систем - каналы связи, причем проводные линии остаются основой построения вычислительных сетей и телекоммуникаций. Основная технология, используемая в локальных сетях, - Ethernet.
Наиболее распространен в сетях Ethernet стек протоколов TCP/IP. Их структура оказалась удачной для передачи разнородной информации, она оптимальна для высокоскоростных локальных сетей с мультимедийным трафиком. Именно эти протоколы послужили основой сети Интернет. Их можно реализовать несколькими способами.
Первый способ - программный. Но на этом пути имеется много трудностей. Создание программного стека протоколов или даже портирование существующих, свободно распространяемых в исходном коде стеков (таких как IwlP, ulP), - довольно сложная и затратная по времени задача. Для работы стека необходима операционная система, адаптация которой к конкретному микроконтроллеру также может занять много времени. Кроме того, практически все операционные системы (за исключением нескольких клонов Linux) бесплатно не распространяются. Программная реализация протоколов интенсивно использует ресурсы операционной системы, процессора и памяти, что негативно сказывается на производительности системы в целом.
Избавить микроконтроллер от выполнения процедур передачи данных по каналу связи и значительно сократить время разработки позволяет второй способ - аппаратная реализация части протоколов с помощью специализированных БИС. В этой статье будет рассказано о практической реализации системы, предназначенной для работы в сетях Ethernet по стандартным протоколам, построенной на микроконтроллере и специализированной БИС фирмы WIZnet, аппаратно реализующей стек протоколов TCP/IP.
Использован микроконтроллер AT91SAM9261 с процессорным ядром ARM9. На его выбор повлияло наличие ряда необходимых периферийных функций. Однако возможно использование практически любого другого микроконтроллера, в том числе и гораздо менее производительного, хотя за это придется, возможно, расплачиваться снижением скорости обмена. Для аппаратной реализации протоколов TCP/IP применена микросхема W5100, обладающая следующими возможностями:
- аппаратная реализация протоколов TCP,  UDR  ICMR  IPv4 ARR  IGMR РРРоЕ, Ethernet;
-  встроенный 10BaseT/100BaseTX преобразователь физического уровня Ethernet;
- автоматическое      определение режимов работы полный дуплекс, полудуплекс, 10 или 100 Мбит/с;
- три способа подключения к микроконтроллеру. Direct, Indirect, SPI;
- поддержка ADSL соединений по протоколу РРРоЕ;
-  возможность  работы   одновременно с четырьмя соединениями, каждое из которых настраивается для работы в режиме клиента или сервера;
-  16 Кбайт внутренней памяти, отведенной под буферы приема и передачи.

Основой макета системы послужила имевшаяся в наличии отладочная плата AT91SAM9261-EK, описание которой можно найти в документе <http:// www. atmel. com dyn resources prod_ documents doc6198.pdf> На плате был установлен модуль WIZ810MJ, содержащий микросхему W5100 с необходимой "обвязкой" и сборку RJ113BZ - разъем RJ-45 с встроенными трансформаторами гальванической развязки и элементами согласования. Для соединения с управляющим устройством (микроконтроллером) модуль снабжен двумя штыревыми разъемами PBD2-28.
Вся документация, необходимая для работы с микросхемой W5100 и с модулем WIZ810MJ, имеется на официальном сайте компании WIZnet: <www.wiznet.co.kr> Там же находится исходный текст на языке С драйвера, в котором реализованы высокоуровневые функции для работы с сокетами W5100, а также руководство по порти-рованию драйвера. Хочу отметить, что вся документация написана в очень доступной для понимания форме, поэтому разобраться с подключением и программированием W5100 не составит труда. Документацию на микроконтроллер AT91SAM9261 можно найти на сайте <www.at91 .com>
Схема подключения модуля WIZ810MJ к микроконтроллеру AT91SAM9261 для работы в режиме прямого доступа (Direct mode) изображена на рисунке. В скобках указаны номера выводов микроконтроллера.


Линии DO-D7 образуют шину данных, линии АО-А14 - шину адреса. Сигнал NRD - чтение из памяти, сигнал NWE - запись в память. Сигнал RESET, устанавливающий микросхему W5100 в исходное состояние, можно подать с любой свободной линии порта микроконтроллера. Использована линия РВО.
В микроконтроллере AT91SAM9261 предусмотрена возможность подключать до восьми устройств, обмен данными с которыми ведется, как с внешней памятью. Для каждого из них выделяется область в пространстве памяти микроконтроллера и формируется собственный сигнал выбора устройства (CS). В данном случае задействован сигнал CS6 (альтернативная функция линии РСО).
Чтобы оперативно реагировать на изменение состояния микросхемы W5100, требуется подать на микроконтроллер сигнал INT и настроить линию порта, на которую он подан, на генерацию запросов прерываний по спадающему перепаду уровня. Программный обработчик прерывания должен анализировать содержимое регистра Sn_IR микросхемы W5100. В данном случае вход запросов прерывания от W5100 - линия РС2.
Далее описаны действия, которые необходимы для настройки микроконтроллера и микросхемы W5100 на работу в Ethernet. Фрагменты программ написаны на языке С и могут быть практически без изменений использованы для любых ARM-микроконтроллеров фирмы Atmel.
Драйвер, который следует "скачать" с сайта фирмы WIZnet, состоит из файлов w5100.c, socket.c, types.h, w5100.h, socket.h. Эти файлы необходимо включить в проект. В исходном варианте драйвер рассчитан на работу в микроконтроллере ATmega128, но его очень просто адаптировать практически к любому другому микроконтроллеру, заменив всего несколько программных строк.
Прежде всего нужно внести некоторые изменения в файл types.h. Заменой строки
#define _DEF_IINCHIP_MAP_BASE_ 0x8000
на
#def i ne _DEF_IINCHIP_MAP_BASE_ 0x70000000
установим адрес, с которого будет происходить обращение к регистрам и буферам микросхемы W5100 (с адреса 0x70000000 в пространстве памяти микроконтроллера начинается область, соответствующая сигналу CS6). После этого нужно закомментировать строку
#include <avr/pgmspace.h>
и сохранить модифицированный файл types.h.
Открываем файл W5100.C. Здесь следует закомментировать строку
#include <avr/interrupt.h>
и добавить после нее строку
#include <inarm.h>
Далее необходимо превратить 16-разрядные указатели на буферы приема и передачи в 32-разрядные.

Для этого в строках


static uintl6
SBUFBASEADDRESS[MAX_SOCK_NUM]; /**< Тх
buffer base address by each channel */
и
static uintl6
SBUFBASEADDRESS[MAX_SOCK_NUM];  /**< Tx buffer base address by each channel */
(переносы условные) заменим описатели типа переменной uint16 на uint32.

Далее по тексту программы заменяем все 16-разрядные адреса, передаваемые в качестве параметров функций, 32-разрядными. После того, как эти замены произведены, можно сохранить файл и использовать высокоуровневые функции драйвера в основной программе.


Осталось лишь инициализировать SMC (Static Memory Controller) микроконтроллера для формирования сигнала CS6 (табл. 1) и занести нужные значения в регистры микросхемы W5100 (табл. 2).

Теперь, когда все необходимые настройки сделаны, система готова к работе по любому из поддерживаемых микросхемой W5100 протоколов.

Например, в табл. 3 приведена возможная процедура приема сообщений в режиме "сервер", а в табл. 4 - процедура передачи в режиме "клиент".


Наиболее существенный недостаток микросхемы W5100 - отсутствие встроенной возможности фрагментировать посылки. Поэтому при пересылке больших объемов информации их разбивкой на пакеты придется заниматься программе микроконтроллера. Это же препятствует использованию микросхемы в качестве маршрутизатора. Тем не менее микросхему W5100, ввиду ее небольшой стоимости и наличия исходных текстов драйверов, можно рекомендовать для подключения микроконтроллерных систем к сети Ethernet при использовании стандартных протоколов TCP/IP.

Автор: К. Снегов, Р. Шишко, г. Воронеж