Сначала небольшая ремарка касательно подключения пинов выставления адреса. Там всё нормально, я просто невнимательно смотрел схему. Они все сидят на питании, поэтому проблем никаких не должно быть (светодиоды также подтянуты к питанию).
А вот какие результаты моих вчерашних опытов.
Понизил скорость MDC с 1,5МГц до 750кГц.
Код
/* Enable management port */
AT91C_BASE_EMAC->EMAC_NCR |= AT91C_EMAC_MPE;
//AT91C_BASE_EMAC->EMAC_NCFGR |= ( 2 ) << 10;
AT91C_BASE_EMAC->EMAC_NCFGR |= ( 3 ) << 10;
Проверял работу запросами на получение ID номеров чипа для всего диапазона номеров
Код
for (;;)
{
for (temp=1; temp<=31; temp++)
{
vTaskDelay(100);
vReadPHY( temp, MII_PHYSID1, &ulPHYId1 );
vReadPHY( temp, MII_PHYSID2, &ulPHYId2 );
vUSBSendByte((ulPHYId1&0xFF));
vUSBSendByte(((ulPHYId1&0xFF00)>>8));
vUSBSendByte((ulPHYId2&0xFF));
vUSBSendByte(((ulPHYId2&0xFF00)>>8));
}
vUSBSendByte(0xAA);
vReadPHY( 31, 0, &ulPHYId1 );
vUSBSendByte((ulPHYId1&0xFF));
vUSBSendByte(((ulPHYId1&0xFF00)>>8));
}
Результат, по сути, тот же, правда теперь вместо FF во многих местах начало возвращать 00.
Попробовал записать перед циклом чтения ID нужную конфигурацию в регистры чипа
Код
ulPHYId1=(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
vTaskDelay(12);
ulPHYId1=(1<<15)|(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
vTaskDelay(12);
ulPHYId1=(1<<15)|(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
vTaskDelay(12);
ulPHYId1=(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
vTaskDelay(12);
ulPHYId1=(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
vTaskDelay(12);
ulPHYId1=(1<<13)|(1<<12);
vWritePHY( AT91C_PHY_ADDR, 0, &ulPHYId1 );
Ничего не изменилось.
Ещё вспомнил одну вещь, когда я несколько дней назад смотрел сигналы на чипе осцилографом, то видел что на одной из ножек чипа, которая выходит на разъём сети при отключении кабеля постоянный уровень начинает периодически скакать в единицу, при подключении кабеля на этой ножке появляется генерация. Кроме того, если когда чип начал управлять светодиодами при подключенном кабеле дотронуться до кварца чипа светодиоды гаснут и через секунду наново загораются. Так выходит, что генератор запускается и внешняя часть работает.
Проблема в работе шины управления MDIO. Насколько я понимаю она работает и без работы 25МГц генератора, так как у неё клок идёт от MDC.
Кроме того, похоже что схемотехническое подключение правильное, так как такое же сделано в других рабочих системах.
Соответсвенно пока могу сделать только такие выводы. Либо я неправильно работаю на програмном уровне, но пока ошибки не нашёл. Либо что-то неправильно в разводке платы (то-ли наводки какие-то, то ли по питанию проблемы).
Сегодня после обеда будем дальше думать что делать, сравнивать с другими рабочими платами где используется такой чип. Когда найдём причины отпишу.