Перейти к содержанию
    

88E1111 MAC Loopback, GMII

Всем привет!

 

Есть плата с PHY Marvell 88E1111 и FPGA Cyclone IVE, в последней реализуется уровень МАС, связь между ПЛИС и трансивером осуществляется посредством GMII. Для проверки целостности аппаратных интерфейсов используется включение петель. Auto-Negotiation проходит, вроде, успешно, Loopback в сторону линии (хоста) работает.

 

Столкнулся с проблемой при включении loopback со стороны MAC уровня. Этот режим включается битом 0.14, читаю регистр 0, там значение 0x1140, что означает:

 

Auto-Negotiation: Enable

Copper Duplex Mode: Full-duplex

Speed Selection: 10 = 1000 Mbps

 

Вроде, всё чинно, скорость правильная (и флаг в статусном регистре тоже соответствует ей), остаётся только включить loopback. Если включить 14-й бит, то значение регистра должно быть: 0x5140. Прописываю это значение, сразу заметно изменение - трансивер, как и положено, теряет линк и энергопотребление заметно снижается. Теперь передаю тестовый паттерн, ожидая его возврата. И вот тут-то возникает затык: от трансивера ничего не приходит. Далее долгий и безрезультатный поиск нюансов (вдруг что-то забыл включить или какой-то важный момент упущен), но нет, вроде, просто всё - включаешь один бит и всё должно работать, если скорость установлена правильно (а она, вроде, правильно - при включенном режиме Auto-Negotiation биты 20.6:4 в 110).

 

Уже перепробовав всё что можно, почти случайно прописал в регистр 0 значение 0x6140, и, о чудо, loopback заработал. Эксперименты показали, что работает именно 6 в старшей тетраде, остальные биты на работоспособность данного режима не влияют. И вот всё это повергает в недоумение.

 

По факту получается, что эта 6 означает:

 

Loopback: Enable

Speed Selection (LSB): 1

Auto-Negotiation: Disable

 

Пробовал варианты 0x4 и 0x7 в старшую тетраду, оба не работают. В общем, не ясны два момента:

 

1. Как и почему влияют "левые" биты на работоспособность loopback?

2. Прописывание значений в указанные биты, согласно документации, не приводит к активации связанной с ними функциональности - для того, чтобы они повлияли нужно либо произвести Software Reset, либо войти и выйти в Power Down, ничего этого не делается, так почему же это влияет?

 

В общем, кто в курсе вопроса, просветите, пожалуйста?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0x6140 - биты 6,13 = 11 - зарезервированное значение, может быть что угодно, например режим 10 или 100. Может у вас тест на 1000 не проходит т.к. не все линии целы. Какая частота клоков?

Попробуйте тест на скорости 100 и 10.

Сам МАК настроен на 1000?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

биты 20.6:4 в 110).

Забвано, но в release note есть раздел про то, как надо включать loopback, и там написано

- configure mac to 1000

- 20.6:4 = '011' :)

- reg0 = 0x8140 (force to 1000)

- reg0 = 0x4140 (enable loopback)

- loopback

- reg0 = 0x8140 (diable loopback)

 

Попробуйте, авось, получится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0x6140 - биты 6,13 = 11 - зарезервированное значение, может быть что угодно, например режим 10 или 100. Может у вас тест на 1000 не проходит т.к. не все линии целы. Какая частота клоков?

Попробуйте тест на скорости 100 и 10.

Сам МАК настроен на 1000?

Клоки 125 Мгц, на другой скорости оно вообще работать, как понимаю, не будет.

 

Забвано, но в release note есть раздел про то, как надо включать loopback, и там написано

А где такой документ можно посмотреть? У меня datasheet достаточно свежий, November 20, 2012.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Клоки 125 Мгц, на другой скорости оно вообще работать, как понимаю, не будет.

 

Почему же, если задать биты 6,13 = 01, то при включени кольца будет соответственно режим 100 Мбит при RX_CLK и TX_CLK 25 МГц.

Наверное стоило сразу пояснить какие клоки я имею ввиду, не путать с 125CLK

Изменено пользователем sorok-odin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему же, если задать биты 6,13 = 01, то при включени кольца будет соответственно режим 100 Мбит при RX_CLK и TX_CLK 25 МГц.

Наверное стоило сразу пояснить какие клоки я имею ввиду, не путать с 125CLK

TX_CLK у меня не используется, только GTX_CLK и RX_CLK, на обоих конролировал осциллографом, 125 МГц. И в сигналтапе я смотрю, так и проверяю, работает или нет. Оно либо вообще не работает - RX_DV мёртвый, либо работает правильно, а ведь исходящий клок у меня железно 125 МГц - его ПЛИС генерит, и он никак не может зависеть от режимов работы трансивера, и если этот исходящий поток приходит обратно без потерь (когда петля работает при этих странных настройках), то и RX_CLK тоже должен быть 125 МГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделайте хотя-бы "fast output register" на выводах, и про вывод тактового сигнала через ALTDDIO подумайте

 

и вообще про source-synchronous interface почитайте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделайте хотя-бы "fast output register" на выводах, и про вывод тактового сигнала через ALTDDIO подумайте

 

и вообще про source-synchronous interface почитайте

Докладываю. Все сигналы наружу, кроме GTX_CLK, размещены в выходных триггерах I/O элементов, GTX_CLK выведен через упомянутую вами ATLDDIO_OUTPUT со сдвигом в полпериода (4 нс). Входной клок RX_CLK заведён на dedicated CLK pin ПЛИС, с него на отдельную PLL, включенную в souce-synchronous compensation mode, с которой берётся клок для тактирования приёмной части. Все входные сигналы (кроме входного клока, разумеется) защёлкиваются во входных триггерах I/O элеменов по вышеупомянутому клоку. Все сигналы обконстрейнены в TimeQuest'е,

 

Всё это тщательно контролировалось разными способами, начиная от анализа предупреждений синтезатора и просмотром размещения через ChipPlanner, и заканчивая наблюдением выходных сигналов, в частности, TX_EN относительно GTX_CLK, хорошим осциллографом на плате, там всё хорошо.

 

Что-то вы уж совсем меня за безграмотного лоха держите. Либо невнимательно читали стартовый пост - там описана проблема совсем иного рода, нежели та, которая могла бы возникнуть из-за неграмотного проектирования приёмо-передающей логики внутри ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где такой документ можно посмотреть?

В экстранете.

 

Еще есть упоминание, что нельзя включать MAC loopback при включенном режиме Auto-media select. У Вас, кстати, медиа какая? И еще надо выключить sleep mode (energy detect) при работе с MAC loopback.

При выходе из loopback надо этой же записью делать софт-ресет. Auto-MDI-X тоже надо выключить.

 

Вы все это делаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В экстранете.

Не попалось. :(

 

Еще есть упоминание, что нельзя включать MAC loopback при включенном режиме Auto-media select. У Вас, кстати, медиа какая? И еще надо выключить sleep mode (energy detect) при работе с MAC loopback.

Это в том же документе упомянуто? Медиа у меня медная.

 

При выходе из loopback надо этой же записью делать софт-ресет. Auto-MDI-X тоже надо выключить.

 

Вы все это делаете?

Да, вроде всё получилось, делал по рекомендации из этого поста, они почти те же, что и ваши.

 

Auto-Media Detect и МDI/MDI-X Crossover у меня выключено аппаратной конфигурацией. Программно сделал:

 

1. Включил DIS_SLEEP (16.9:8 = 00).

2. Выключил Auto-Negotiation (0.12 = 0).

3. Software Reset (0.15 = 1).

4. Включил Loopback (0.14 = 1).

 

В итоге заработало. Т.е. у меня исходно не были сделаны две вещи: не была выключена Energy Detect и не была выключена Auto-Negotiation. Но ведь в даташите ни слова об этом не сказано! Я не понимаю, по замыслу производителя потребитель должен откуда об этом узнать?

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не попалось. :(

Смотрите внимательнее. Док. № MV-S300723.

 

Это в том же документе упомянуто? Медиа у меня медная.

 

Да, вроде всё получилось, делал по рекомендации из этого поста, они почти те же, что и ваши.

Это они же и есть. :)

 

Я не понимаю, по замыслу производителя потребитель должен откуда об этом узнать?

Из документа MV-S400049-00, в котором сказано, что окромя даташита надо читать еще release notes для конкретной ревизии чипа.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите внимательнее. Док. № MV-S300723.

Да, по названию документа удалось найти, правда, только online версию. Узнал ещё кое-что интересное, в частности, что для ревизии В2 задающий резистор RSET должен иметь номинал не 5.0 кОм, а 4.87 кОм.

 

Из документа MV-S400049-00, в котором сказано, что окромя даташита надо читать еще release notes для конкретной ревизии чипа.

А вот этот документ найти не удалось. На фтп про 88Е1111 прилично информации, включая даташит уже за 2012 год (в котором, тем не менее, нет информации, которая есть в MV-S300723 от 2005 года), но этих важных доков, к сожалению, нет.

 

Благодарность вам за чёткие ответы по делу. :a14:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот этот документ найти не удалось.

Экстранет - это для официальных юзеров. Там много чего еще есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...