Ethernet-контроллер W5300. IPRAW режим

IPRAW — это передача данных с использованием уровня ниже, чем TCP и UDP. IPRAW поддерживает протоколы, такие как ICMP (0x01), IGMP (0x02), которые могут быть определены номером протокола (Sn_PROTOR). Как и в прошлый раз предупреждаю, здесь мы рассматриваем на примере произвольного пакета. Вы разумеется выбираете свой протокол.

Что нужно:

— WIZ830MJ;
— STM32F4-Discovery;
— Keil;
— Wireshark(+ WinPcap);
— Colasoft Packet Builder.

Таблица подключения WIZ830MJ к STM32F4-Discovery и часть адресов регистров были даны в статье Часть 3. Ethernet-контроллер W5300. Инициализация. Пинг
Дополнительные адреса регистров указаны в Часть 4. Ethernet-контроллер W5300. MACRAW режим

Инициализация STM32F4 и W5300

Процедуры инициализации STM32F4 (GPIO и TIM6) и инициализации W5300 (SHAR, GAR, SUBR, SIPR) были показаны в статье Часть 3. Ethernet-контроллер W5300. Инициализация. Пинг

Инициализация сокета

Начинаем, как обычно с открытия сокета. Я выбрал сокет 0, вы можете выбрать любой из 8 сокетов, который вам улыбнется.
Перед инициализацией сокета необходимо указать MAC-адрес и IP-адрес пункта назначения:

Далее прописываем регистр S0_PROTOR в соответсвии с тем, какой протокол выбрали (ICMP – 0x01, IGMP – 0x02, TCP – 0x06, UDP – 0x11). И еще, номер протокола должен быть установлен до открытия сокета.

Передача

Сначала, прочитав регистр S0_TX_FSR2, проверяем наличие свободной памяти в памяти передатчика W5300. Открываем цикл записи данных. В регистры S0_TX_WRSR и S0_TX_WRSR2 записываем размер отправляемых данных. Внимание!!! Его необходимо указать в байтах. В регистр команд записываем команду SEND.

Пакеты ловим на компе сниффером.

Прием

Принятый IP пакет согласно даташиту имеет вот такую структуру: 4 байта IP-адрес пунткта назначения и 2 байта- размер данных.

Для того чтобы принять пакет IPRAW мы следим за регистром S0_RX_RSR2, который сигнализирует нам о том, что данные приняты. Считываем 4 байта IP-адреса и размер данных в байтах, считаем сколько это будет в словах. Данные считываем в массив и отправляем команду RECV в регистр команд S0_CR.

Отправляем пакет вот такого вида с помощью Packet Builder. Для этого нажимаем на кнопочку Send.

В появившемся окошке выбираем LoopSending, количество – 20 раз.

В режиме отладки смотрим данные в Rcv_data. Сниффер показывает те же данные.

Список литературы:
1. High-Performance Internet Connectivity Solution W5300. Version 1.2.5. 2008
2. WIZ830MJ Datasheet (Ver. 1.3). 2008
3. Reference manual. STM32F405xx, STM32F407xx, STM32F415xx and STM32F417xx advanced ARM-based 32-bit MCUs. 2011
4. User Manual. STM32F4DISCOVERY. STM32F4 high-performance discovery board. 2012

Прикрепленные файлы:
Архив с папкой проекта и пакетом для генератора пакетов
Исходник — main.c

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *