Юрий_СВ (12.01.2013 02:21, просмотров: 124) ответил Mikla на алгоритм диагностики у меня выглядит как то так:
Заработало :) Не додумался вытащить кабель ! (через него отлаживаюсь) Откуда же там взяться отражениям :) И не отключал автоназначение пар. этот кусок лишний :
-----
if(0x0020 & ETH_ReadPHYRegister_start(DP83848_PHY_ADDRESS, PHYcONTROL1_REG))
{
goto 1;
}
----
я сделал так:
//-----------------------------------------------------------------------
u16_t Cable_Pair_Diagnostic(u8_t PHY_ADDRESS)
{
u16_t result;
ETH_WritePHYRegister(PHY_ADDRESS, 0x1d, 0x8000); // запуск диагностики пары
do result=ETH_ReadPHYRegister(PHY_ADDRESS, 0x1d); while(result & 0x8000); // ждём окончания
return result;
}
//-----------------------------------------------------------------------
void Cable_Diagnostic(u8_t PHY_ADDRESS, u16_t * result_1, u16_t * result_2)
{
ETH_WritePHYRegister(PHY_ADDRESS, 0x1f, 0x2100); // авто назначение пар выключено, выбрана пара 1-2
*result_1=Cable_Pair_Diagnostic(PHY_ADDRESS); // диагностика пары
ETH_WritePHYRegister(PHY_ADDRESS, 0x1f, 0x6100); // авто назначение пар выключено, выбрана пара 3-6
*result_2=Cable_Pair_Diagnostic(PHY_ADDRESS); // диагностика пары
ETH_WritePHYRegister(PHY_ADDRESS, 0x1f, 0x8100); // авто назначение пар включено
}