|
|
  |
чтение/запись регистров 88E1111 через I2C, проблемы с random read и sequential read |
|
|
|
Feb 5 2010, 09:42
|
Участник

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

|
Есть трансиверы Marvell Alaska 88E1111 связанные с I2C контроллером. Последовательности чтения/записи расписанные в datasheet'е работают с непонятными глюками, которые никак не могу забороть. Не мог бы кто нибудь выложить последовательности состояний и команд для чтения/записи 16-битных регистров которые работают на практике? Заранее признателен.
|
|
|
|
|
Feb 5 2010, 11:04
|
Участник

Группа: Участник
Сообщений: 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", но когда именно и как это сделать понять не смог.
|
|
|
|
|
Feb 5 2010, 11:44
|

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
|
|
|
|
|
Feb 5 2010, 11:50
|
Участник

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

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

Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 5 2010, 19:34
|

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
|
|
|
|
|
Feb 8 2010, 10:52
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|