Установлен Linux 4.1.4 из Buildroot без каких-либо изменений в коде, конфигурация задана через device tree. На плате Rev.2C всё работало. После заливки той же прошивки на Rev.3B перестал работать Ethernet - при загрузке ядра выдавало "PHY not found".
Изменил в device-tree интерфейс на RMII, добавил аппаратный сброс PHY в macb.c перед инициализацией. После этого он уже определялся как Generic PHY, а после добавления в ядро соответствующего драйвера - как LAN8720.
При запуске Linux выводить link up, но светодиоды RJ45 не загораются, нет какой-либо другой реакции на подключение/отключение кабеля, ping не проходит.
С помощью ethtool и devmem посмотрел настройки и регистры MAC, всё в порядке, установлен режим RMII, Auto-negogation, настройки MDIO. Но при чтении регистров PHY ответ при адресах шины 0 и 1, значение 0xFFFF (читал регистры 0, 1 и другие).
Подозреваю, что проблема в каких-то особенностях подключения и инициализации LAN8720 (где-то необходим pull-up/pull-down, состояние при сбросе), но не нашёл на сайте схемы для Rev.3B.
Пожалуйста, дайте актуальную схему платы и подскажите что можно еще сделать.
В первом сообщении ошибся с ревизией старой платы - вероятно все-таки Rev.2А. Все платы уже вмонтированные в изделия, посмотреть нет возможности.
Действительно, проблема скорее всего в тактировании 25 MHz - между Rev.2А и Rev.3В были изменения в цепях тактирования PHY, добавлена цепь 25 MHz от вывода PA31. Завтра буду разбираться в исходниках, как она генерируется.
P.S. Обновите схему платы в магазине и добавьте там заметку об отличиях ревизий, а то об этом узнаешь уже после обнаружения проблем, читая форум. Когда куплен не один десяток плат, это неприемлемо.
Кажется я нашел решение, но почему это происходит я объяснить не могу.
Долгое время я сталкивался с неожиданным отказом Ethernet. Плата может нормально работать в офисе, приезжаешь на объект - не работает. Потом снова начинает работать. Грешил на тактирование, но и с кварцем такое тоже случалось. При подаче питания оранжевый светодиод вспыхивает в пол накала на долю секунды и гаснет. После этого сеть не работает. Кстати, если осциллографом встать на этот пин, то сеть тоже не стартует. Решил проверить на нагрев и выяснилось, что при температуре платы выше 35 сеть стабильно не поднималась. В итоге вышел на разъем Ethernet HR911105A, а именно на этот самый оранжевый светодиод - если в разъем подуть феном или погреть ножку светодиода паяльником - сети нет, пока не остынет.
Решение оказалось элементарным - отключить этот светодиод, выпаяв резистор. Оставшегося зеленого вполне достаточно для контроля.
Интересный подвох ...
Такое только на одном экземпляре?
Один светодиод (скорее всего который описываете) выступает в роли подтяжки на землю, т.е. на конкретном светодиоде при повышении температуры увеличивается падение напряжения (что само по себе нонсенс - у полупроводников с ростом температуры падение напряжения падает) что меняет конфигурацию PHY.
Как минимум на двух. Один не работал даже при комнатной температуре, второй переставал работать при нагреве. Обеих сия процедура вылечила.
Светодиод в данном случае подтягивает вход к питанию. Поэтому это еще более непонятно. Если на светодиоде падение напряжения уменьшится, то он еще лучше будет подтягивать вверх, а если увеличится, то внутри чипа есть своя подтяжка. Странно ....
Этот светодиод отвечает за конфигурацию выхода прерывания (INT) чипа, но если в этих платах прерывание не используется, то это еще более странно. Хотя у меня модули SK-9G45-OEM, может там по другому?
Он кофигурирует пин - выход прерывания или опора 50МГц (которая используется для RMII процессора).
Лучше эту линию не в воздухе оставить, а подтянуть к 3,3В.
В даташите пишут, что слабая подтяжка есть внутри чипа, так что будет работать и так, Но для надежности внешняя подтяжка не помешает.
Только что проверил на еще одном экземпляре - эффект воспроизводится устойчиво. Причем разъем то нагреваю несильно - на ощупь чуть теплый. Интересно, это на всех этих разъемах проявляется, или мне такая партия попалась?