gladov 0 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба На просторах сети нарыл пример исходников LPC17xx + KSZхххх + uIP. Там такая последовательность инициализации PHY в случае Auto-negotiation: 1) Поиск устройства PHY перебором адресов 2) Reset 3) Auto-negotiation setup 4) Запуск Auto-neg и ожидание линка. Если линка нет, выход с ошибкой. 5) Вычитываем из PHY параметры связи (speed, duplex), прописываем их в MAC 6) Прописываем подобранные параметры обратно в PHY жестко, отключив auto-neg. Во-первых меня сильно смущает последний шаг: для чего нужно отключать AN? Ведь тогда без перезагрузки уже не получится, например, переключить устройство в другой порт Ethernet. Так как я раньше с Ethernet не работал, возникает вопрос: есть ли в данном действии скрытый смысл? Может быть действительно для стабильной работы нельзя держать autoneg постоянно включенным? Во-вторых, по-моему неправильно в инициализации ожидать линка. Имхо надо либо настроить прерывание LinkUP от PHY, либо оставить все как есть и из-вне поллингом проверять состояние линка, правильно? Вообще, подскажите, кто как организовывает взаимодействие EMAC <-> PHY, какие есть подводные камни с инициализацией, что еще полезно обрабатывать из типовых PHY-прерываний кроме Link up/down? В приложении вышеупомянутый пример работы с PHY, однако я понимаю, что пример никогда нельзя рассматривать как готовое решение - на него можно лишь опираться иногда, поэтому просьба одна: рассказать как нужно делать, а не просто покритиковать пример :) lpc_eth.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба 1) Поиск устройства PHY перебором адресов 2) Reset 3) Auto-negotiation setup 4) Запуск Auto-neg и ожидание линка. Если линка нет, выход с ошибкой. 5) Вычитываем из PHY параметры связи (speed, duplex), прописываем их в MAC 6) Прописываем подобранные параметры обратно в PHY жестко, отключив auto-neg. Ужас какой. У меня система MCF52258+KSZ8041. Я думаю, МК по большому счёту может быть любой, в этом Fast Ethernet Controller связывается с PHY через MII. Для инициализации PHY в программе не делаю ничего (то есть вообще ничего). Работает сам. Кое-какие резисторы-подтяжки для конфигурации PHY на плате есть. Так что вычёркивайте ваши пункты 1-6. Если бы не нужно было детектировать состояние линка, то опрос регистров PHY вообще не делал бы. А так периодически читаю один регистр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба Либо Вам нужно сделать зашивку режимов аппаратно, тогда точно с PHY ничего делать не надо. Либо на зашивку режимов плюнуть и по инициализации их прописать. Запрещать автонегоциацию имеет смысл только при работе на оптику. При работе на медь лучше ее оставить. Если Ваше устройство свои данные передает в сеть, то ждать или не ждать линк - это все равно. Без линка ничего и никуда передать не получится... для микросхем Микрела, начиная от 8001 есть еще режим, когда можно не только считать линк, но и проверить импеданс кабеля. Кстати, проверьте длительность сброса, там это критично для зашитых параметров.... А перебирать все адреса по MII имеет смысл только тогда, когда не знаешь схемы. Если есть только один трансивер, то известен и его адрес.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gladov 0 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба Ужас какой. У меня система MCF52258+KSZ8041. Я думаю, МК по большому счёту может быть любой, в этом Fast Ethernet Controller связывается с PHY через MII. Для инициализации PHY в программе не делаю ничего (то есть вообще ничего). Работает сам. Кое-какие резисторы-подтяжки для конфигурации PHY на плате есть. Так что вычёркивайте ваши пункты 1-6. Если бы не нужно было детектировать состояние линка, то опрос регистров PHY вообще не делал бы. А так периодически читаю один регистр. Ясно, что ужас. Пример кривой. А минимальную настройку я бы все таки сделал, хотя бы чтобы была возможность переопределить значения по-умолчанию. Я правильно понимаю, что у вас из PHY ничего кроме состояния линка не вычитывается? А когда линк поднялся надо перенастраивать EMAC в LPC на возможно новые параметры связи (скорость, дуплекс)? Или EMAC сам умеет по RMII договариваться с PHY? Или ему (EMACу) вообще пофиг какой линк воткнут в PHY? Запрещать автонегоциацию имеет смысл только при работе на оптику. При работе на медь лучше ее оставить. Если Ваше устройство свои данные передает в сеть, то ждать или не ждать линк - это все равно. Без линка ничего и никуда передать не получится... В примере после поднятия линка перенастраивается EMAC в LPC на оперделенную во время auteneg конфигурацию. Это необходимо или это кривость примера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба А минимальную настройку я бы все таки сделал, хотя бы чтобы была возможность переопределить значения по-умолчанию. Если значения по умолчанию не устраивают - то конечно. Просто у меня значения по умолчанию заданы резисторами-подтяжками, и менять их нет смысла. Я правильно понимаю, что у вас из PHY ничего кроме состояния линка не вычитывается? Да. Кроме того, легко могу представить себе применение, в котором и это не нужно будет. А когда линк поднялся надо перенастраивать EMAC в LPC на возможно новые параметры связи (скорость, дуплекс)? Я ничего не настраивал. Всё работало. Скорость в режиме MII задаётся микросхемой PHY (собственно, она выдаёт TXCLK и RXCLK 2.5 MHz или 25 MHz), так что это не нужно настраивать в EMAC. Посмотрел про дуплекс: да, он в МК настраивается, как оказалось. Возможно, нужно, чтобы режим дуплекса у PHY и EMAC совпадал. А возможно, что это не так уж и важно - не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gladov 0 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба Скорость в режиме MII задаётся микросхемой PHY (собственно, она выдаёт TXCLK и RXCLK 2.5 MHz или 25 MHz), так что это не нужно настраивать в EMAC. Логически - так оно и должно быть, но непонятно для чего в регистре SUPP у LPC EMAC есть единственный бит - SPEED: This bit configures the Reduced MII logic for the current operating speed. When set, 0 100 Mbps mode is selected. When cleared, 10 Mbps mode is selected. Если бы не это, плюнул бы не детектирование линка да и все. У меня как раз такое приложение которому совсем не обязательно знать, есть ли сейчас связь с внешним миром. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба EMAC в LPC после линка надо настраивать. AutoNeg убирать не надо - пускай остается. Как именно ждать линка - ваше дело. Можно, например, в отдельном потоке при многопоточности. В блокирующем режиме, если устройство ничего не делает кроме Ethernet. Асинхронным вызовом в остальных случаях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба Логически - так оно и должно быть, но непонятно для чего в регистре SUPP у LPC EMAC есть единственный бит - SPEED: А-а, у Вас Reduced MII. А у меня просто MII. Тогда да, нужно ему скорость конфигурировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gladov 0 20 мая, 2011 Опубликовано 20 мая, 2011 · Жалоба EMAC в LPC после линка надо настраивать. AutoNeg убирать не надо - пускай остается. Как именно ждать линка - ваше дело. Можно, например, в отдельном потоке при многопоточности. В блокирующем режиме, если устройство ничего не делает кроме Ethernet. Асинхронным вызовом в остальных случаях. А-а, у Вас Reduced MII. А у меня просто MII. Тогда да, нужно ему скорость конфигурировать. Вопросов больше нет, всем огромное спасибо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться