Процессор LPC1788, схема подключения такая .
В качестве драйвера PHY использую стандартный кейловский (тот, что везде валяется). Столкнулся с такой проблемой: иногда при старте программы (чаще всего если быстро передернуть питание, при обычно долгом передергивании или нормальном ресете все проходит нормально) микросхема не проходит инициализацию, не отвечает на чтение регистра U16 read_PHY (U32 PhyReg). А там, в кейловсом драйвере долгое ожидание ответа от микросхемы (точнее они ждут готовности ресета, но в моем случае зависает из-за того, что микросхема не отвечает):
Код
/* Wait for hardware reset to end. */
for (tout = 0; tout < 0x100000; tout++) {
regv = read_PHY (PHY_REG_BCR);
if (!(regv & 0x8000)) {
/* Reset complete */
break;
}
}
for (tout = 0; tout < 0x100000; tout++) {
regv = read_PHY (PHY_REG_BCR);
if (!(regv & 0x8000)) {
/* Reset complete */
break;
}
}
Долго пытался выяснить в чем дело, удалось узнать лишь то, что в момент старта микросхема ИНОГДА неверно определяет адрес PHYAD (задается ногами PHYAD0-PHYAD4). Выяснить это удалось добавив в драйвер цикл, в котором он в случае неответа перебирает эти адреса.
В чем дело?!
Спасибо!