24412

Пример генерации трафика микроконтроллером по запросу от ПК

Дата последнего изменения: 10.03.2020 14:34:47

В данной статье рассматривается пример для МК 1986ВЕ1Т и 1986ВЕ3Т, в котором демонстрируется работа с контроллером Ethernet. Проект для Keil доступен для скачивания в разделе "Файлы для скачивания", для его сборки требуется "Software Pack for Keil" версии не ниже 1.5.3.

В примере МК ожидает получения Ethernet-II пакета, данные которого являются параметрами для генерации ответного трафика. Оба параметра являются 16-ти разрядными словами:

  • первое слово - длина ответного пакета;
  • второе слово - количество ответных пакетов.

В ответ на получение такого пакета МК вышлет запрошенное количество пакетов заданного размера. Данные параметры могут быть любыми.

Выбор МК осуществляется в настройках проекта "Options for Target", пункт "Device", как показано на рисунке 1.

Рисунок 1 - Выбор МК в настройках проекта

Описание кода проекта

В примере настраивается тактирование МК от HSE генератора, работающего с использованием внешнего кварцевого резонатора 8 МГц. Далее производится инициализация конфигурационной структуры Ethernet, которая затем используется для настройки контроллера Ethernet. В функции Ethernet_ProcessLoop() выполняется ожидание пакета от ПК и генерация ответного трафика.

Режим работы буферов

Режим работы буферов устанавливается в функции Ethernet_Init(), необходимо лишь выбрать нужный параметр в конфигурационной структуре ETH_InitStruct.ETH_Buffer_Mode, фрагмент кода 1. В текущем варианте программы выбран режим с использованием FIFO, поскольку именно этот режим использует DMA и вызывает наибольшие затруднения.

Фрагмент кода 1 - Выбор режима работы буферов контроллера Ethernet

// Режим работы буферов
ETH_InitStruct.ETH_Buffer_Mode = ETH_BUFFER_MODE_FIFO;
//ETH_InitStruct.ETH_Buffer_Mode = ETH_BUFFER_MODE_LINEAR;
//ETH_InitStruct.ETH_Buffer_Mode = ETH_BUFFER_MODE_AUTOMATIC_CHANGE_POINTERS;

Режим FIFO и scatter файл

При работе в режиме FIFO используется контроллер DMA. Однако, DMA имеет доступ не ко всей области ОЗУ, а только к AHB-Lite SRAM 16KB, начинающейся с адреса 0x2010_0000. Поэтому массивы, используемые для работы с буферами Ethernet должны находиться в области AHB-Lite SRAM 16KB. Для этого массивы для хранения принимаемых и передаваемых пакетов объявлены с атрибутами, как указано в фрагменте кода 2.

Фрагмент кода 2 - Объявление массивов с атрибутом размещения "EXECUTABLE_MEMORY_SECTION"

uint8_t FrameTx[MAX_ETH_TX_DATA_SIZE] __attribute__((section("EXECUTABLE_MEMORY_SECTION"))) __attribute__ ((aligned (4)));
uint32_t FrameRx[MAX_ETH_RX_DATA_SIZE] __attribute__((section("EXECUTABLE_MEMORY_SECTION"))) __attribute__ ((aligned (4)));

Расположение этих массивов в памяти задается в конфигурационном файле компоновщика - scatter файле. Итоговый scatter файл Ethernet_TrafficTX.sct для примера расположен в корневой папке проекта.

Подробное описание о том, как создать scatter файл для работы с DMA в МК 1986ВЕ1Т и 1986ВЕ3Т описание в статье "Начальные сведения о DMA", пункт "Работа с DMA в 1986ВЕ1Т/1986Е3Т".

Проверка работоспособности примера

Для проверки работоспособности примера необходимо загрузить программу в МК, после чего подключить МК к ПК с помощью кабеля Ethernet.

ПК в свою очередь должен отправить специальный пакет с параметрами генерации трафика и отследить, что заданное количество пакеты приходят в ответ. Для посылки пакета с требуемыми параметрами воспользуемся программой Ostinato, а для отслеживания ответного трафика воспользуемся программой WireShark.

Настройка WireShark 2.2.6

Программу необходимо запускать от имени администратора, при этом откроется стартовое окно программы, как показано на рисунке 2.

Рисунок 2 - Стартовое окно программы WireShark

В открывшемся окне необходимо выбрать подключение по локальной сети. Далее откроется окно, в котором будут видны все пакеты по линии Ethernet. Так как пакетов много и все они от разных источников, для удобства можно применить фильтр, чтобы отображались только пакеты, связанные с подключённым МК. Для этого указываем в поле ввода фильтр, согласно которому будут отображаться только пакеты с участием МАС-адреса МК, как показано на рисунке 3. После этого поле с пакетами будет пустое, все лишние пакеты не отображаются.

Рисунок 3 - Установка фильтрации отображаемых пакетов

Теперь программа готова для отображения только интересующие пакетов.

Настройка Ostinato 0.4

Описание подробной настройки программы для отправки пакетов перенесено в статью - Настройка программы Ostinato для посылки пакетов. Это сделано для того, чтобы не перегружать информацией описание данного примера. Здесь будут рассмотрены только основные моменты настройки программы.

Программу Ostinato необходимо также запускать от имени администратора. После запуске программы откроется стартовое окно, в котором содержится порт с сетевым адаптером ПК (рисунок 4).

Рисунок 4 - Стартовое окно программы WireShark

В открывшемся окне необходимо выбрать порт, после чего в меню "File" следует выбрать "Open Streams". В новом окне необходимо выбрать прилагающийся к проекту файл "Ostinato/Sent_10_By100.txt". При этом будет создана конфигурация с пакетом, настроенным для данного примера. Все настройки уже выполнены, требуется только изменить МАС адрес ПК, на котором происходит запуск примера. 

Для этого необходимо правой кнопкой мыши нажать на конфигурацию потока, после чего выбрать "Edit Stream", как показано на рисунке 5.

Рисунок 5 - Настройка конфигурации потока

В открывшемся окне необходимо выбрать вкладку "Protocol Data" и изменить значение Source (2) на текущий МАС адрес ПК (рисунок 6). МAC адрес микроконтроллера (1) прописан в коде проекта и соответствует указанному в данной форме, поэтому его менять не нужно.

Рисунок 6 - Изменение MAC адреса источника в пакете

Чтобы узнать MAC адрес ПК можно вызвать команду "ipconfig -all" в командном строке Windows (Win+R -> cmd). В поле "Физический адрес" будет указан MAC адрес ПК.

При выборе пункта "Hex Dump (3)", откроется поле, где настраиваются данные пакета (рисунок 7), а именно:

  • 0064 - длина ответного пакета - 100 байт (0x64);
  • 000A - количество ответных пакетов - 10 (0xA).
Рисунок 7 - Настройка данных пакета

Нажимаем ОК и выходим из настроек конфигурации потока. Для того чтобы применить настройки, следует нажать кнопку "Apply" (2), убедившись, что активна требуемая конфигурация (1), как показано на рисунке 8. Для посылки пакета требуется выбрать порт в окне ниже, кликнув на него (3). Для посылки пакета необходимо нажать кнопку "Start" (4).

Рисунок 8 - Отправка пакета заданной конфигурации

Проверка обмена между ПК и МК

В программе Ostinato отправляем пакет, нажав кнопку "Start". В окно Wireshark должен появиться отправленный пакет и 10 принятых от МК пакетов, согласно заданным параметрам генерации трафика (рисунок 9).

Рисунок 9 - Мониторинг обмена между ПК и МК в программе WireShark 

На рисунке 9 видно, что ПК отправил один пакет в МК. В ответ МК выслал 10 пакетов размером по 100 байт. Первым 16-битным словом возвращается индекс пакета. На картинке выбран 4-й ответный фрейм и виден его индекс, равный 3. Остальные данные в Payload заполнены индексными значениями, начиная с 2.


Сохранить статью в PDF

Файлы для скачивания

Программное обеспечение

Standard Peripherals Library + software pack для Keil MDK 5
Standard Peripherals Library + software pack для Keil MDK 5
ОФИЦИАЛЬНАЯ СБОРКА
Standard Peripherals Library – библиотека для микроконтроллеров.

Теги

Была ли статья полезной?