На просторах сети нарыл пример исходников LPC17xx + KSZхххх + uIP. Там такая последовательность инициализации PHY в случае Auto-negotiation:
1) Поиск устройства PHY перебором адресов
2) Reset
3) Auto-negotiation setup
4) Запуск Auto-neg и ожидание линка. Если линка нет, выход с ошибкой.
5) Вычитываем из PHY параметры связи (speed, duplex), прописываем их в MAC
6) Прописываем подобранные параметры обратно в PHY жестко, отключив auto-neg.
Во-первых меня сильно смущает последний шаг: для чего нужно отключать AN? Ведь тогда без перезагрузки уже не получится, например, переключить устройство в другой порт Ethernet. Так как я раньше с Ethernet не работал, возникает вопрос: есть ли в данном действии скрытый смысл? Может быть действительно для стабильной работы нельзя держать autoneg постоянно включенным?
Во-вторых, по-моему неправильно в инициализации ожидать линка. Имхо надо либо настроить прерывание LinkUP от PHY, либо оставить все как есть и из-вне поллингом проверять состояние линка, правильно?
Вообще, подскажите, кто как организовывает взаимодействие EMAC <-> PHY, какие есть подводные камни с инициализацией, что еще полезно обрабатывать из типовых PHY-прерываний кроме Link up/down?
В приложении вышеупомянутый пример работы с PHY, однако я понимаю, что пример никогда нельзя рассматривать как готовое решение - на него можно лишь опираться иногда, поэтому просьба одна: рассказать как нужно делать, а не просто покритиковать пример