64375

[i] Тест Ethernet в режиме КЗ для К1986ВЕ8Т и микросхем семейства К1986ВЕ1x

Дата последнего изменения: 20.03.2026 09:16:40

В блоке Ethernet MAC микросхем К1986ВЕ8Т и микросхем семейства К1986ВЕ1x (К1986ВЕ1Т, К1986ВЕ1QI, К1986ВЕ1FI, К1986ВЕ1GI) в блоке MAC реализован режим КЗ (loopback). С его помощью можно проверить работу с Ethernet без использования блока Ethernet PHY (блоки MAC и PHY обмениваются данными по интерфейсу MII, который в данном случае не задействован) и без внешнего подключения: блок Ethernet MAC получает те данные, которые сам же и отправляет.

Для микросхем К1986ВЕ8Т пример работы режима Loopback (на уровне Ethernet PHY) есть в составе SPL/Software Pack для Keil uVision. Адаптированный на основе данного примера проект для режима КЗ на уровне Ethernet MAC приведен в конце статьи (проект полностью аналогичен примеру Ethernet PHY loopback, за исключением включения loopback на уровне Ethernet MAC и настройки Ethernet PHY в состояние по умолчанию).

Для микросхем семейства К1986ВЕ1x тест режима Loopback MAC приведен в рамках данной статьи. 

1. Описание теста Ethernet MAC Loopback для микросхем семейства К1986ВЕ1x
2. Особенности работы для микросхем семейства К1986ВЕ1x
3. Особенности работы для микросхем К1986ВЕ1QI
    3.1. Ограничения при работе буферов в автоматическом режиме и режиме FIFO
    3.2. Запись в регистры указателей в линейном режиме работы

1. Описание теста Ethernet MAC Loopback для микросхем семейства К1986ВЕ1x

В реализованном тесте (проект приведен в конце статьи) передаются пакеты указанного размера - размер задается макроопределением при сборке. Также макроопределениями задаются режим работы буферов Ethernet MAC (линейный, автоматический или FIFO) и параметры выводов (для возможности перенастройки при необходимости) светодиодной индикации статуса тестирования: LED_OK - индикация успешной работы, LED_ERROR - индикация при обнаружении расхождения между переданными и полученными данными.

Используются выводы PD10 для LED_OK и PD11 для LED_ERROR, которые на отладочной плате для микросхем К1986ВЕ1Т подключены к светодиодам VD9 и VD10 соответственно.

Передатчик формирует и отправляет кадр, приемник получает его и сравнивает полученные данные с переданными.

Передатчик в первые 4 байта Payload (см. статью "[i] Начальные сведения о Ethernet") записывает индекс кадра. В последние 4 байта записывается "индикатор" конца данных (0x7777_7777). При анализе данных в памяти (в линейном и автоматическом режиме работы буферов) это позволяет видеть, где заканчиваются данные и начинается статус передачи (в памяти передатчика) или слово CRC (в памяти приемника).

Приемник получает пакет и сравнивает массивы переданных и полученных данных. Если данные совпадают - моргает светодиод LED_OK, если не совпадают - светодиод LED_ERROR. Тест осуществляется циклически. Поэтому, если после неправильно полученного пакета и индикации LED_ERROR следующий пакет отправлен и получен корректно, будет индикация на LED_OK (без индикации на LED_ERROR). При правильном выполнении теста должен постоянно мигать LED_OK, показывая, что кадры посылаются и принимаются.

На рисунке 1 показано, как выглядят данные в буферах при передаче и приеме кадра для микросхем семейства К1986ВЕ1x в линейном режиме работы (для автоматического режима выглядит аналогично).

Рисунок 1 - Память буфера передатчика и приемника в линейном режиме

2. Особенности работы для микросхем семейства К1986ВЕ1x

При просмотре памяти в режиме отладки необходимо учитывать ошибку errata 0014 "Возникновение Hard Fault в режиме run time при отображении содержимого периферии". В качестве обхода в среде Keil uVision можно после перехода в режим отладки снять опцию Periodic Window Update в меню View. 

При работе в линейном режиме также следует учитывать, что для регистров R_Head и X_Tail нет аппаратной защиты от записи неправильных значений (исключение - микросхемы К1986ВЕ1QI, см. ниже). Например, если записать X_Tail = 0, то регистр действительно станет равен 0 вне зависимости от значения Delimiter. Поэтому при реализации своего алгоритма необходимо обеспечить в коде запись корректных значений. В рамках SPL это уже реализовано.

3. Особенности работы для микросхем К1986ВЕ1QI

3.1. Ограничения при работе буферов в автоматическом режиме и режиме FIFO

Для микросхем К1986ВЕ1QI с датой изготовления до 1645 нужно учитывать наличие ошибки errata 0021 "Ограничения при работе буферов контроллера Ethernet в автоматическом режиме и режиме FIFO". Пояснения причин данного поведения приведены ниже.

Передатчик начинает выдачу данных сразу, как только обнаруживает различие указателей X_Head и X_Tail. При работе буферов в линейном режиме сначала записываются данные в буфер передатчика, и после этого должна осуществляться запись в регистр X_Tail. При записи в регистр X_Tail передатчик обнаруживает разницу в указателях X_Head и X_Tail и начинает передачу кадра. Таким образом, на момент начала передачи все данные уже находятся в памяти. По окончании передачи передатчик записывает в регистр X_Head адрес первой свободной ячейки, то есть указатели становятся равны (X_Head == X_Tail). Если регистры оказываются не равны, значит, что-то прошло нештатно.

В автоматическом режиме и режиме FIFO указатель X_Tail инкрементируется автоматически при записи каждого слова в буфер. Соответственно, при первой же записи слова в буфер Ethernet регистр X_Tail "обгоняет" X_Head - передатчик обнаруживает запрос на передачу и начинает выдавать данные. Здесь соревнуются два потока - исполняемая функция записывает данные в буфер, а передатчик считывает данные и передает (именно в этом проявляется данная ошибка). И для микросхем К1986ВЕ1QI с датой изготовления до 1645 при частоте ядра меньше 144 МГц передатчик считывает данные быстрее, чем микроконтроллер успевает их записывать.

Передатчик, считав в первом слове количество данных на отправку, начинает передавать данные в линию, пока не достигнет X_Tail. Но перед достижением X_Tail ему еще необходимо записать в буфер статус отправки. В итоге передаваемый пакет уходит поврежденным. Если при этом X_Tail продолжает инкрементироваться (то есть ядро все еще дописывает пакет), то возникнет еще одна передача.

Регистры X_Head и R_Tail доступны только для чтения и сбрасываются автоматически при записи в регистр ETH_Delimiter в функции ETH_DeInit(). Регистры X_Tail и R_Head доступны на запись и чтение в линейном режиме.

При тактировании кварцевым резонатором на 8 МГц (как это сделано, например, на отладочной плате микросхем К1986ВЕ1Т) максимальная частота, которую можно получить после умножения с помощью PLL, составляет 128 МГц, и на такой частоте в режимах работы буферов, отличных от линейного, тест на микросхемах К1986ВЕ1QI с датой изготовления до 1645 не выполнится.

3.2. Запись в регистры указателей в линейном режиме работы

Как указано выше, в линейном режиме работы буферов для регистров R_Head и X_Tail нет аппаратной защиты от записи неправильных значений. Это применимо для микросхем К1986ВЕ1QI с датой изготовления от 1645. Для микросхем К1986ВЕ1QI с датой изготовления до 1645 защита этих регистров присутствует: например, при записи X_Tail = 0, значение X_Tail станет равно ETH_Delimiter.


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

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

Документация

Теги

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