Цитата(GreyM @ Oct 13 2011, 20:10)

В программе поочередно ставил точки останова где только можно - ни одна ни разу не сработала. Поэтому и есть подозрение на нерабочий PHY.
Разные PHY отличаются расширенным набором регистров. Тот пример, который я запустил, был написан под DP83848, она стоит на платах STM3210C-EVAL, на платах MCB2300 (LPC) от KEIL, StarterKit использует KS8721BL, я использовал ST802RT1. Если посмотреть на наборы регистров различных PHY, видно, что совпадают только первые 9 регистров. Дальше каждый производитель придумывает по-своему.
Инициализация PHY в примере находится в Stm32eth.c, функция
Код
uint32_t ETH_Init(ETH_InitTypeDef* ETH_InitStruct, uint16_t PHYAddress)
Обращение к регистрам делается из нее вызовами функций
Код
uint16_t ETH_ReadPHYRegister(uint16_t PHYAddress, uint16_t PHYReg)
uint32_t ETH_WritePHYRegister(uint16_t PHYAddress, uint16_t PHYReg, uint16_t PHYValue)
Если посмотреть, к каким регистрам PHY идет обращение, мы увидим PHY_BCR, PHY_BSR и PHY_SR
их номера определены в Stm32_eth.h, в комментариях написано, что определения для DP83848.
BCR и BSR для всех PHY равны 0 и 1 соответственно, а вот SR (из которого мы читаем фактические параметры соединения скорость/дуплекс после автодетекта) для DP83848 равен 0x10, для ST802RT1 уже 0x11, а если посмотреть даташит на KS8721, окажется, что нужная нам информация находится в регистре 0x1F. Естественно, что у каждого PHY используются свои комбинации битов для индикации состояния. Вот эти моменты и нужно в первую очередь исправить в процедуре инициализации под конкретную модель PHY.
Также если в ките предусмотрены джамперы для переключения MII/RMII и выбора адреса PHY, нужно проверить, правильно ли они выставлены. В примере используется адрес PHY 0x01.
Замечено, что в широко известных примерах применения Ethernet-контроллера для STM и LPC работе с PHY уделяется мало внимания. Например процедура автоопределения проводится только в момент инициализации, при этом, если кабель не подключен, мы выйдем из инита по ошибке, которую далее никто не ловит и программа продолжает работать, как будто все прошло нормально. Если после этого воткнуть кабель, не факт, что связь будет установлена, хотя индикатор Link загорится. Постоянно отслеживать Link Status в регистре PHY не есть красиво (но в примерах не делается даже это). Разработчики китов часто игнорируют сигналы прерывания от PHY, а ведь ими можно воспользоваться для отслеживания ситуации с кабелем. Можно настроить PHY на выработку прерываний при подключении/отключении кабеля и при наступлении данного события проводить процедуру автоопределения заново, ведь не только в PHY производится выбор скорости и дуплекса, но и в регистрах MAC тоже должны быть установлены соответствующие биты.
В общем, если Вы разрабатываете реальное устройство для реальных сетей, не бойтесь изучать даташиты. В них можно найти практически все ответы на вопросы.
--------
Что и где можно посмотреть осциллографом. (считаем, что у нас режим RMII, скорость 100Мбит/с).
Обозначения выводов даны по STM32 Reference Manual (далее REF)
MCO -> ETH_RMII_REF_CLK - частота 50 MHz
ETH_MDC - при обращениях к регистру PHY пачка импульсов ~64шт. с частотой 2,5 МГц
ETH_MDIO - на втором канале осциллографа смотрим обмен данными с PHY после первых 32 импульсов на ETH_MDC. Здесь можно увидеть, отвечает ли нам PHY по каналу управления (SMI).
Описание формата данных REF стр 918, figure 327-328.
ETH_RMII_CRS_DV - Импульс лог.1 длительностью от 6 мкс. В это время вторым каналом наблюдаем принимаемые от PHY пакеты данных на ETH_RMII_RXD0, ETH_RMII_RXD1 (частота 25МГц). Если этого импульса нет - PHY не ловит входные пакеты (естественно хост должен что-то передавать, например Ping). Если импульсы есть - проверяем соответствие настроек MAC и PHY (скорость/дуплекс).
ETH_RMII_TX_EN - Импульс лог.1 длительностью от 6 мкс. В это время вторым каналом наблюдаем передаваемые от МК пакеты данных на ETH_RMII_TXD0, ETH_RMII_TXD1 (Частота 25МГц) (МК должен быть настроен на передачу пакетов или отвечать на принимаемые).
---------
PS А проблемы, описанной в данной теме в Вашем ките случайно нет?
http://electronix.ru/forum/index.php?showt...amp;hl=ethernet