|
Информационный портал технической поддержки Центра проектирования интегральных микросхем |
В данной статье рассматривается пример для микроконтроллеров серии К1986ВЕ1x, в котором демонстрируется работа с контроллером Ethernet. Проект для Keil доступен для скачивания в разделе "Файлы для скачивания".
В примере микроконтроллер ожидает получения Ethernet-II пакета, данные которого являются параметрами для генерации ответного трафика. Оба параметра являются 16-ти разрядными словами:
В ответ на получение такого пакета микроконтроллер вышлет запрошенное количество пакетов заданного размера. Данные параметры могут быть любыми.
В примере настраивается тактирование МК от HSE генератора, работающего с использованием внешнего кварцевого резонатора 8 МГц. Далее производится инициализация конфигурационной структуры Ethernet, которая затем используется для настройки контроллера Ethernet. В функции Ethernet_ProcessLoop() выполняется ожидание пакета от ПК и генерация ответного трафика.
Фрагмент кода 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 используется контроллер 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 в ОЗУ, описание в статье "[i] Расположение функций в ОЗУ в IDE Keil".

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

Рисунок 2 - Установка фильтрации отображаемых пакетов
Теперь программа готова для отображения только интересующие пакетов.
Программу Ostinato необходимо также запускать от имени администратора. После запуске программы откроется стартовое окно, в котором содержится порт с сетевым адаптером ПК (рисунок 3).

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

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

Рисунок 5 - Изменение MAC адреса источника в пакете
Чтобы узнать MAC адрес ПК можно вызвать команду "ipconfig -all" в командном строке Windows (Win+R -> cmd). В поле "Физический адрес" будет указан MAC адрес ПК.
При выборе пункта "Hex Dump (3)", откроется поле, где настраиваются данные пакета (рисунок 6), а именно:

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

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

На рисунке 8 видно, что ПК отправил один пакет в МК. В ответ МК выслал 10 пакетов размером по 100 байт. Первым 16-битным словом возвращается индекс пакета. На картинке выбран 4-й ответный фрейм и виден его индекс, равный 3. Остальные данные в Payload заполнены индексными значениями, начиная с 2.
| Сайт: | https://support.milandr.ru |
| E-mail: | support@milandr.ru |
| Телефон: | +7 495 221-13-55 |