|
|
  |
Помогите советом. I2C, Мож кто сталкивался. |
|
|
|
Jun 17 2007, 19:31
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Jun 17 2007, 22:53)  А чего странного? Мне эта 'фишка' без надобности - угробил несколько часов (начинал дома копаться и боролся с нежеланием искать сетевой шнур от осциллографа), потом увидел кашу, выяснил, что и резистор и место для него отсутствуют, как класс, грязно выругался по-болгарски  , запаял прямо на корпус AT24 первый попавшийся выводной резистор и все. Читайте предыдущий пост. Дык а фишка заключается в том, что Вы неразобравшись в Вашем конкретном случае начинаете советовать остальным (неразобравшись в чем у Вас была проблемма) как нужно организовывать обмен по i2c другим... вот это и странно... Цитата Радиоканал? С каких частот у нас радио начинается знаете? Ну а даже заваленые 10ns фронты LPX2000 великолетно наводятся на идущую параллельно висящую дорожку. Знаю, но к приему сигнала по i2c без пулапов это не имеет никакого значения. Ладно, если Вы не против довайте попробуем отвлечся  и ответить на вопрос автора. Цитата(SasaVitebsk @ Jun 17 2007, 22:54)  И 24c512 и mega48 - аппаратно формируют сигналы. Вы понимаете что аппаратно формируемые сигналы от 24xx и от ATmegaxx имеют по крайней мере разную форму ? Все зависит от софта на Атмега...
|
|
|
|
|
Jun 17 2007, 19:36
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(singlskv @ Jun 17 2007, 22:24)  ...что Вы неразобравшись ... начинаете советовать остальным (неразобравшись в чем у Вас была проблемма) как нужно организовывать обмен по i2c другим... Я разобрался в том, что: 1. AT24 очень НЕ КРИТИЧНА к качеству сигналов и шаманство с уменьшению pullup-ов маловероятно приведет к результату. 2. AT24 не имеет проблем с блочным режимом, по крайней мере при работе с железным I2C контроллером. Кроме того, я разобрался в чем была конкретная проблема с конкретной платой. О чем и написал - перечитайте пост №3. Если Вам привиделись какие-то "советы" - это Ваши проблемы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 17 2007, 20:23
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Я, к примеру, совершенно не удивился сообщению zltigo. И совершенно не понимаю что вас в нём удивляет? I2C - статическая шина. Следовательно поступающие сигналы не должны быть привязаны ко времени. Если подтяжки нет, то наводки на этих ножках рано или поздно но уложатся в нужный сигнал, как ни крути. Один раз я столкнулся со случаем работы контроллера дисковода (ВГ93) при обрезанном сигнале управления (то ли RD то ли WR уже не помню, но помню что совершенно необходимый). Тот милый человек, который смотрел эту плату до меня зачем-то перерезал его с помощью лезвия. Наверное потом хотел соплю кинуть, да подзабыл. Когда я нашёл настоящую неисправность и запустил злополучный синклер, то выяснил что дисковод работает, но только длинные файлы не читает. Причина выяснилась достаточно быстро. Анализирую ноги ВГ93 было обнаружено, что одна просто болтается в воздухе. Как я писал выше дисковод полностью работал и короткие файлы читал исправно. zltigo спасибо за информацию Ваш пост я понял. 2 singlskv. Также спасибо. Я правда не совсем понял фразу Цитата Вы понимаете что аппаратно формируемые сигналы от 24xx и от ATmegaxx имеют по крайней мере разную форму ? Все зависит от софта на Атмега... Софт на м48 писал, естественно я сам. Наверное Вы имели ввиду не "разную форму", а "работают по разному". Это, безусловно, я понимаю. Ещё раз повторяю. Если работа с at24 идёт побайтно, то никаких проблем не возникает. Два изделия работают круглосуточно больше месяца. 2 zltigo. При блочной записи. Записываю 32 байта. Границы верны. То есть принципиально всё пишется правильно. Вопрос достаточно ли одной задержки 10мс после записи страницы? Точнее части страницы. Помню в какой-то мне приходилось задержку на запись делать = Twr * число записываемых байт. Правда это в какой-то младшенькой памяти было.
|
|
|
|
|
Jun 17 2007, 20:38
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SasaVitebsk @ Jun 17 2007, 21:54)  Средний примерный объём ошибокЖ 1-2 на 3к инфы А попробовать исключить возможное влияние прерываний? - Может, что-то банально портится во время прерывания. У Вас, насколько я помню, система прерываний достаточно требовательная. Может там что накосячили  Во всяком случае у меня при софтовом мастере и работе с EEPROM сбоев не бывает. И еще - есть такая особенность, что время записи некоторых микросхем существенно возрастает. Если бит готовности не обрабатывается, а используется банальная задержка "с запасом", может оказаться так, что по мере старения микросхемы этого запаса может не хватать. Спокойной ночи
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 17 2007, 23:51
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(SasaVitebsk @ Jun 18 2007, 02:18)  Скажи а страницу я обязан полностью записывать (там 128 байт). Насколько я помню там просто копируется вся страница в озу потом модифицируется и записывается. То есть по моим понятиям я могу сколько угодно записать. Работать должна. Или я не прав? Почему может 24с всегда отвечать? После записи страницы надо ждать 5ms для чипов с маркировкой "A", и 10ms без "A".. Код U8 AT24_AttemptWrite( U16 Address, U8 *pData, U8 count) { U8 retval = NACK; U8 repcount = 12; // (A package - write op timeout - 5ms, not (A) package - 10ms)
while (repcount-- && (retval != ACK)) { i2c_MemTransfer(AT24_DevAddress + SLA_W, Address, count, pData); retval = i2c_WaitCompleteOperation(); if (retval) // operation NACK'ed Kernel_WaitMS( 1 ); } return retval; } Цитата Сбои возникают как при чтении, так и при записи. Их характер - случайный и хаотический. Возможно сбои связаны с тем, что у вас не обрабатывается либо неправильно обрабатывается какое-то из состояний шины. Например, при блочном чтении, очень важно устанавливать NACK перед приемом последнего байта данных. Цитата Для этого я ввёл буфер на 32 байта и начал писать/читать блоками по 32 байта. На меге640 лучше не скупиться на буфер и сделать его размером байт в 200 (про запас) чтобы можно было размещать страницы целиком.
|
|
|
|
|
Jun 18 2007, 07:24
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SasaVitebsk @ Jun 18 2007, 02:18)  ...Пока меня устроит запись побайтная. Время некритично, но неприятно... А драматическое уменьшение ресурса не смущает? Про бит готовности - это у меня терминология выпала под вечер  ACK, конечно же. Еще раз предупреждаю про задержку - дело в том, что для микросхем какого-то производителя очень критично, если повторная запись страницы начинается раньше, чем закончилась предыдущая. Во всяком случае это было лет 6 назад и у меня были серьезные проблемы. Микросхема выходила из строя в течение дня.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jun 18 2007, 07:37
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(SasaVitebsk @ Jun 18 2007, 02:18)  Скажи а страницу я обязан полностью записывать (там 128 байт). Нет, любым кусочком. Я почти всегда пишу не страницами а по 32 байта, дабы не разбираться, какой чип стоит или в некоторых случаях кусками равными размеру записи а не страницы. Цитата(defunct @ Jun 18 2007, 02:51)  После записи страницы надо ждать 5ms для чипов с маркировкой "A", и 10ms без "A".. Уже писал - я не разбираюсь с буковками на чипе и не жду. Банально повторяется посылка START до получения ACK. Какой-либо задержки не используется в принципе. Прокладок-задержек между циклами опроса, как в Вашем примере, тоже, поскольку работаю по прерываниям и там автомат самостоятельно непрерывно молотит. Чипы производители оборудования точно ставят разные и разных производителей.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|