Здравствуйте, форумчане.
Нужна помощь в диагностике отправки данных от 5600ВГ1У на комп. Все более-менее работает, но некоторые пинги бьются или не доходят и ARP-ответы от моего устройства приходят с битой FCS Ethernet-пакета.
Топология связей: 1986ВЕ92У <--SPI--> 5600ВГ1У <-- Ethernet 10BASET --> ПК (Debian 9 (ядро 4.9.0), сетевуха какая-то Intel gigabit с драйвером e1000e)
Конфигурация 5600ВГ1У: GCTRL = 0x4382; MAC_CTRL = 0x0200; MinFrame = 0x0040; CollConfig = 0; IPGTx =0x000A; PHY_CTRL = 0x31D0;
Для диагностики приема и отправки провёл такой эксперимент: MAC_CTRL установил равным 0, на ПК в ARP-таблице статически привязал IP к MAC-у моего устройства и запустил пинг на заданное кол-во пакетов (что-то около 200 шт.). По окончании пинга проверил счетчики принятых и отправленных пакетов - как внутренних в прошивке моего устройства, так и регистров STAT_RX_ALL, STAT_RX_OK, STAT_RX_OVF, STAT_RX_LOST, STAT_TX_ALL, STAT_TX_OK в 5600ВГ1У. В результате "кол-во отправленных пакетов с ПК"=STAT_RX_ALL=STAT_RX_OK="счетчик принятых пакетов в прошивке"="счетчик отправленных пакетов в прошивке"=STAT_TX_ALL=STAT_TX_OK; STAT_RX_OVF=STAT_RX_LOST=0. Но на ПК по данным ping вернулось на несколько пакетов меньше (именно вообще не дошли, т.е. битые, но все-таки дошедшие, считаются дошедшими). Из этого я сделал вывод, что прием пакетов на моем устройстве работает исправно.
Далее решил посмотреть, что же все-таки приходит на ПК - мусор вместо потерянных пакетов или вообще ничего. Вернул MAC_CTRL назад, снес статическую привязку IP к MAC-у. Провел несколько экспериментов с захватом пакетов tcpdump-ом при различных настройках rx-fcs и rx-all сетевухи на ПК и последующим анализом в Wireshark. Между экспериментами мое устройство сбрасывалось путем полного отключения питания. Результаты работы в файлах в приложении.
Собственно, из этих экспериметов получились следующие выводы:
1. Ошибки одни и те же и ситуация повторяется все четыре раза. Т.е. аналоговая часть и SPI на уровне сигналов скорее всего работают корректно.
2. Поскольку FCS вычисляется в 5600ВГ1У, и в некоторых пакетах она не совпадает с переданным содержимым (см. дампы с rx-fcs=off), то скорее всего проблемы внутри неё.
3. Настройка rx-fcs=on на ПК заставляет сетевуху добавлять в конец Ethernet-фрэйма вычисленную ей самой FCS по принятым данным (т.е. FCS всегда будет совпадать с содержимым пакета), хотя я ожидал более честного поведения, т.е. увидеть не вычисленный, а принятый FCS. При этом при установке rx-fcs=off FCS можно увидеть только у ARP-ответов моего устройства. Для пингов она обрезается.
4. Просто наблюдение: несмотря на то, что 5600ВГ1У настроена на Full duplex, на ПК сетевуха работает в Half duplex. Попытка переключить её с помощью ethtool принудительно в Full duplex приводит к исчезновению линка на уровне PHY. Переключение назад в Half duplex восстанавливает линк. Такая же ситуация и с другой сетевухой на базе rtl8169.
Собственно, вопрос: куда копать дальше? У меня пока только два варианта:
1. Провести при инициализации 5600ВГ1У проверку её памяти.
2. Попробовать заменить 5600ВГ1У на другой экземпляр.
В общем оба варианта сводятся к тому, что проблема в самой микросхеме, но это как-то не вяжется с тем, что эти микросхемы имеют военную приемку, т.е. с качеством там на мой взгляд все должно быть в норме. Или это всего лишь мои иллюзии по поводу качества ВП и там тоже могут быть битые м/с?
Вложения: |
Комментарий к файлу: Дампы пакетов и логи ping при различных rx-fcs и rx-all
eth_test.7z [35.16 КБ]
177 скачиваний
|
|