реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> чтение/запись регистров 88E1111 через I2C, проблемы с random read и sequential read
salvian
сообщение Feb 5 2010, 09:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 4-08-09
Пользователь №: 51 740



Есть трансиверы Marvell Alaska 88E1111 связанные с I2C контроллером. Последовательности чтения/записи расписанные в datasheet'е работают с непонятными глюками, которые никак не могу забороть. Не мог бы кто нибудь выложить последовательности состояний и команд для чтения/записи 16-битных регистров которые работают на практике? Заранее признателен.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Feb 5 2010, 10:22
Сообщение #2


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(salvian @ Feb 5 2010, 12:42) *
Есть трансиверы Marvell Alaska 88E1111 связанные с I2C контроллером. Последовательности чтения/записи расписанные в datasheet'е работают с непонятными глюками, которые никак не могу забороть. Не мог бы кто нибудь выложить последовательности состояний и команд для чтения/записи 16-битных регистров которые работают на практике? Заранее признателен.


Используется именно TWSI? CONFIG6 bit в "1"?
На пине данных есть 1.5 kOhm pull-up?


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
salvian
сообщение Feb 5 2010, 11:04
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 4-08-09
Пользователь №: 51 740



Цитата(Victor® @ Feb 5 2010, 13:22) *
Используется именно TWSI? CONFIG6 bit в "1"?
На пине данных есть 1.5 kOhm pull-up?

Проблемы на более высоком уровне. То есть считать значение регистра я кое как могу, но проблемы следующие:
1. при операции "random read", судя по datasheet'у, необходимо дважды выполнить одну и ту же операцию, чтобы получить сначала старший, а потом младший байт регистра, я же читаю постоянно только старший. После такого я решил попробовать "sequential read"
2. при операции "sequential read" два байта регистра читаются, но каждая вторая операция завершается NACK'ом

я явно что то не допосылаю или наоборот шлю лишнего.

по поводу "random read" там сказано ещё про ""dummy" byte write", но когда именно и как это сделать понять не смог.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Feb 5 2010, 11:44
Сообщение #4


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(salvian @ Feb 5 2010, 15:04) *
Проблемы на более высоком уровне. То есть считать значение регистра я кое как могу, но проблемы следующие:
1. при операции "random read", судя по datasheet'у, необходимо дважды выполнить одну и ту же операцию, чтобы получить сначала старший, а потом младший байт регистра, я же читаю постоянно только старший. После такого я решил попробовать "sequential read"
2. при операции "sequential read" два байта регистра читаются, но каждая вторая операция завершается NACK'ом

я явно что то не допосылаю или наоборот шлю лишнего.

по поводу "random read" там сказано ещё про ""dummy" byte write", но когда именно и как это сделать понять не смог.


Для чипов ревизии B1 есть проблема при чтении регистров, если чип в слипе или повердауне.
Почитайте errata.
А вообще - гляньте осциллом что там твориться на самом деле.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
salvian
сообщение Feb 5 2010, 11:50
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 4-08-09
Пользователь №: 51 740



Цитата(Victor® @ Feb 5 2010, 14:44) *
Для чипов ревизии B1 есть проблема при чтении регистров, если чип в слипе или повердауне.
Почитайте errata.
А вообще - гляньте осциллом что там твориться на самом деле.

Спасибо. Почитаю errata, посмотрю шину, отпишусь.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Feb 5 2010, 12:04
Сообщение #6


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(salvian @ Feb 5 2010, 15:50) *
Спасибо. Почитаю errata, посмотрю шину, отпишусь.


Не знаю какая ревизия у Вас
Поэтому смотрите еще в "Release Notes - 88E1111 Rev B2" пункт 3.4


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
salvian
сообщение Feb 5 2010, 12:52
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 4-08-09
Пользователь №: 51 740



Цитата(Victor® @ Feb 5 2010, 15:04) *
Не знаю какая ревизия у Вас
Поэтому смотрите еще в "Release Notes - 88E1111 Rev B2" пункт 3.4

Судя по тому, что содержимое регистров 2 и 3 соответственно 0х141 и 0хС20D, ревизия видимо 'D'. Но вот с OUI Marvell'а что то не то...

UPD: Если в первую очередь читать регистр 3 то читается 0x0CC2 как и должно. То есть в какой то момент происходит лишний сдвиг адреса на один байт.

Сообщение отредактировал salvian - Feb 5 2010, 13:21
Go to the top of the page
 
+Quote Post
Victor®
сообщение Feb 5 2010, 19:34
Сообщение #8


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(salvian @ Feb 5 2010, 16:52) *
Судя по тому, что содержимое регистров 2 и 3 соответственно 0х141 и 0хС20D, ревизия видимо 'D'. Но вот с OUI Marvell'а что то не то...

UPD: Если в первую очередь читать регистр 3 то читается 0x0CC2 как и должно. То есть в какой то момент происходит лишний сдвиг адреса на один байт.


1111 есть ревизий A0, B0, B1, B2
Смотрите на 1 страницу в errata на B2.

Если лень - смотрите по маркировке на чипах.

Кстати, в последнем даташите - die revision начали обзывать custom code.
Перечитайте errata именно на ту ревизию, что используете.
Что показывает осцил?

-- успехов


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
AndreiUS
сообщение Feb 6 2010, 20:58
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 23-12-08
Из: Тверь
Пользователь №: 42 694



А почему нельзя использовать интерфейс MDIO? Запись, чтение реализовать на нем элементарно просто
и никаких глюков. Или все упирается именно в контроллер I2C?
Go to the top of the page
 
+Quote Post
salvian
сообщение Feb 8 2010, 10:52
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 4-08-09
Пользователь №: 51 740



Цитата(Victor® @ Feb 5 2010, 22:34) *
1111 есть ревизий A0, B0, B1, B2
Смотрите на 1 страницу в errata на B2.

Если лень - смотрите по маркировке на чипах.

Кстати, в последнем даташите - die revision начали обзывать custom code.
Перечитайте errata именно на ту ревизию, что используете.
Что показывает осцил?

-- успехов

Спасибо за разъяснения. Жду доступа к документации, старые userID и password почему то больше не валидны, как только получу буду подробно изучать.
Пока что чтение регистров работает если читать один лишний байт, бред конечно, но пока единственный способ. Запись пока не работает вообще. Смотрел алгоритмы записи с использованием других контроллеров, всё один в один, но при этом работает. Начинаю задумываться о несовместимости этих i2c контроллеров в принципе.
Смотрели асцилом, клок и данные абсолютно нормальны, ошибок не нашли. После прочтения errata'ы будем смотреть тщательнее.

Цитата(AndreiUS @ Feb 6 2010, 23:58) *
А почему нельзя использовать интерфейс MDIO? Запись, чтение реализовать на нем элементарно просто
и никаких глюков. Или все упирается именно в контроллер I2C?

В текущей ревизии платы i2c marvell'а повесили на i2c контроллер чипа NXP LPC2388, что, в принципе, весьма удобно, по крайней мере удобнее чем использовать самописный контроллер на ПЛИСе или вообще делать всё руками, если бы конечно не такие затыки.

В последующих ревизиях скорее всего откажемся от i2c, не первый раз в ней проблемы на марвелах. Но пока что необходимо оживить железо в кратчайшие сроки, а тут такие проблемы практически на пустом месте.

UPD: Запись заработала! Был мой косяк в обработчике прерывания. Запись, по итогу работает как и расписано в даташите, а вот с чтением что то не так, но эта проблема терпит.

Коллеги, спасибо за помощь!!

Сообщение отредактировал salvian - Feb 8 2010, 11:47
Go to the top of the page
 
+Quote Post
man with no name
сообщение Dec 19 2010, 23:38
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 6-08-07
Из: Moscow
Пользователь №: 29 586



Необходимо шарить один 88e1111 между плисом и внешним (не в плисе) процессором. Можно ли в рантайме переключать мак-интерфейсы между sgmii и rgmii/gmii/mii? Вопрос предварительный, полные даташиты и ерраты ещё не вкуривал. Вдруг кто уже делал.

ЗЫ: большущее данке шон согражданам, поделившимся документацией.
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Dec 21 2010, 15:19
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(man with no name @ Dec 20 2010, 06:38) *
...
ЗЫ: большущее данке шон согражданам, поделившимся документацией.

Да, "большущее данке шон" Enthusiast a14.gif a14.gif a14.gif cheers.gif
Go to the top of the page
 
+Quote Post
vitan
сообщение Dec 21 2010, 17:50
Сообщение #13


не указал(а) ничего о себе.
******

Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887



Цитата(man with no name @ Dec 20 2010, 05:38) *
Необходимо шарить один 88e1111 между плисом и внешним (не в плисе) процессором. Можно ли в рантайме переключать мак-интерфейсы между sgmii и rgmii/gmii/mii? Вопрос предварительный, полные даташиты и ерраты ещё не вкуривал. Вдруг кто уже делал.

Скорее всего - нет, точнее, надо будет дергать сбросом.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016