Добрый день. Столкнулся опять с подобной проблемой.
Имеем: отладочную плату olimex на чипе at91sam9260 с ethernet чипом micrel 8721.
Беру тестовую задачу Basic EMAC Project 1.5
Дописываю в драйвере поддержку micrel:
В board.h прописываю:
После запуска такой результат:
Пробовал менять BOARD_EMAC_PHY_ADDR на 31, как было в оригинале - та же проблема.
В чем может быть загвоздка на этот раз?
а есть ли уверенность, что железо исправно? какая-нить диагностика или тесты от олимекса?
если желео заведомо исправно, то ищите место в исходниках, где идет обращение к PHY по вашему адресу - там можно вставить отладочный цикл со сканированием всего поддиапазона адресов для PHY. найдет - вот вам и адрес, не найдет - ошибка в софте или в железке..
Да, исправно. На нем идет linux 2.6, при загрузке выдает следующий лог относительно ethernet:
Без проблем конфигурируется и пингуется. Лог ifconfig-а:
Есть тестовый пример от olimex, но там только для АЦП.
На их сайте тоже голяк по этой теме.
По поводу сканирования поддиапазона адресов, пробовал сканировать с 0 по 0хFFF. Кстати какой он по величине вообще?
похоже у вас ядро 2.6.3х..
тогда можно посмотреть, как производится сканирование
сначала в macb.c в функции probe вызов phy_find_first
которая прописана в phy_device.c и где и производится поиск физики
на все 100 не уверен, но ваша физика вроде по адресу 0x01
и если откликнется, то попробовать rmii=1
а исходники ядра есть? тогда можно там подсмотреть параметры..
В emac.c есть функция EMAC_ReadPhy, которая считывает значение регистра PHY по указанному адресу. Попробовал с помощью нее считать весь возможный диапазон PHY адресов - в результате не по одному адресу MII_OUI_MSB не найден, везде 0xFFFF. Такое ощущение, что чип Ethernet не проинициализирован и находится в не рабочем состоянии. Может ему нужно какой-то дополнительный reset делать в программе или какой регистр заполнить?
Исходники ядра вроде есть (linux-2.6.31-rc3-olimex.tar.bz2), только я в линуксе не особо силен. Где там смотреть?
если рабочие исходники есть, то задача сильно упрощается..
идете в arch/arm/mach-at91 и ищите файл *.c либо именем *olimex.c или *board60*.c. если рядом такой же файл с расширением *.o, то это оно..
может есть электросхема? в ней или в файле борды надо проверить - делается ли управление пином "Reset" для PHY и как организована для нее же тактовая..
так, с файлом понятно - явно он..
отмотаем чуть назад - вы пробуете свою софтину (т.н. стандалоне) с некими исходниками и платой от Олимекса, да?
если допустить, что архитектурные различия отсутствуют и в файле нет дополнительных действий по настройке тактовой и к.л. пинов, то остается вопрос
- а пины mdc/mdio и mii проинициализированны как надо?
берете осцилл и смотрите mdc/mdio в момент запуска линукса от Олимекса и после запуска вашей софтины - после этого можно уже делать дальнейшие выводы
зы я вспомнил (летом возился), что физика ищется сканированием, т.е. адрес в ядре не задается..
Я пробую тестовый пример от atmel (для платы at91sam9260-ek) на железе от olimex (SAM9-L9260).
У меня тоже создалось такое впечатление, что дело в пинах.
Нашел datasheet на чип micrel, там сказано, что: "The default PHY address is 00001".
Буду разбираться с пинами.