STM32H7 LAN8742 LwIP работает нормально только после включения питания, а не после сброса - PullRequest
0 голосов
/ 20 марта 2019

У меня есть странная проблема, я никогда не видел ее раньше.Тем не менее, я все еще пытаюсь определить проблему.У меня есть STM32H753VIT и Ethernet-контроллер LAN8742, подключенный к нему.Я запускаю LwIP в режиме NO-SYS.Он работает нормально только после холодного включения, но не после аппаратного сброса (кнопка или датчик ST-LINK).Он запускает простой TCP эхо-сервер.Если он запускается, я могу пропинговать его, и он отвечает на TCP-клиент.

Но после сброса оборудования я больше не могу пропинговать его, и он не отвечает как эхо-сервер.Я заметил, что зеленый (ссылка) светодиод на интерфейсе останется выключенным после сброса.

Я мог видеть, что функция LAN8742_Init успешно выполняется после аппаратного сброса, но больше не видит данных RX, доступных в функции low_level_input.

На Nucleo-H743ZI я запускаю тот же код, и это также работает после аппаратного сброса.Обратите внимание, что код немного отличается, так как расположение контактов немного отличается.Код для хорошо работающего Nucleo-H743ZI: https://github.com/bkht/Nucleo-H743ZI_LAN8742_LwIP_NO-SYS Код для странного поведения STM32H753VIT: https://github.com/bkht/STM32H753VIT_LAN8742_LwIP_NO-SYS

nRST MCU подключен к nRST LAN8742A, а конденсатор 100 нФ используется дляGND.У меня есть переключатель сброса, и я попытался подтянуть резистор, гайка не повезло.Я добавил кнопку сброса, и это обнаружило, что более длительный аппаратный сброс также не работает.

Я думаю о направлении времени или содержимого памяти.Кто-нибудь когда-либо видел такое поведение при запуске?

1 Ответ

2 голосов
/ 25 марта 2019

Решено, после кода, который выполняет программный сброс LAN8942A, я добавил одну строку, чтобы установить бит автосогласования (бит 12) в регистре BCR (0x00).

pObj->IO.WriteReg(pObj->DevAddr, LAN8742_BCR, LAN8742_BCR_AUTONEGO_EN);

Iобновит код в github, для тех, кому интересно.

...