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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Помогите советом. I2C, Мож кто сталкивался.
SasaVitebsk
сообщение Jun 17 2007, 13:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



У меня есть в устр-ве шина I2C. На ней сидит мастер - atmega640(I2C софтовый) пару микрух памяти 24с512 и atmega48(I2C аппаратный слэйв). Всё это подпёрто резисторами 3.9кОм. Общая протяжённость шины составляет ~30см.

Изначально работал побайтно с 24с512 и блоком с mega48. Всё работало суперустойчиво. Сутками. Ни единого сбоя. С какого-то момента я попытался значительно повысить скорость на чтение (а заодно на запись) с 24с512. Для этого я ввёл буфер на 32 байта и начал писать/читать блоками по 32 байта. В принципе всё работает, но периодически возникают сбои. Я выяснил. Сбои возникают как при чтении, так и при записи. Их характер - случайный и хаотический. Создаётся ощущение, что сбои - результат помех. Увеличение задержек - не дало результата.

Может кто сталкивался с чем-нибудь подобным и может подсказать? Пока не знаю куда рыть.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 13:37
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(SasaVitebsk @ Jun 17 2007, 17:20) *
...удалено....

А какая частота шины i2c ? 3,9K может быть многовато при большом количестве
устройств(емкость шины). Попробуйте уменьшить до 2,7 или даже до 1,5.

У меня при pullup 4,7 отказывалось работать при 400KHz с FRAM, а при 1,5K
завелось на 1,4MHz (не с Atmega).

Сообщение отредактировал zltigo - Jun 17 2007, 13:47
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2007, 14:04
Сообщение #3


Гуру
******

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



То:singlskv - насточтельная просьба избегать совершенно не нужных цитирований.

24xxx совершенно беспроблемно работают в блочных режимах с аппаратными мастерами I2C.
К подтягивающему резистору скорее всего не очень критичны мне попалась в свое время отладочная борда от Olimex, где болгарские друзья вообще не развели один из подтягивающих резисторов (кажется SDA) к Микрочиповской EEPROM. Каким чудом на утечках хоть на пониженной частоте со сташными сбоями, но работало непонятно! У меня обычно стоят 2.2K.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 14:18
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jun 17 2007, 18:04) *
То:singlskv - насточтельная просьба избегать совершенно не нужных цитирований.

Эээ... привычка, когда отвечаешь в длинной ветке нужно обозначить кому отвечаешь.
В данном случае это конечно было не нужно smile.gif
Цитата
мне попалась в свое время отладочная борда от Olimex, где болгарские друзья вообще не развели один из подтягивающих резисторов (кажется SDA) к Микрочиповской EEPROM. Каким чудом на утечках хоть на пониженной частоте со сташными сбоями, но работало непонятно!

Ну все-таки наверное работало на внутреннем пулапе ?
Вроде как i2c по стандарту умеет тянуть только вниз, и если вобще нет пулапа
то там должен быть всегда 0.
Хотя конечно реализации на разных контроллерах могут достаточно
сильно отличатся от стандарта biggrin.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 17 2007, 16:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Экспериментировал от 1МГц до 100кГц. На высоких скоростях колличество сбоев увеличивается, но до определённого порядка. Начиная примерно с 360кГц количество сбоев от тактовой частоты не зависит.

Понятно что в пакетном режиме должно работать. У самого всё работало в других проектах. Только запись пакетную делал один раз. Но задержки ставил большие. А сейчас впритык. Сам уже не знаю где рыть. Пока ни одной ошибки не нашёл. Создаётся ощущение что проблема с вызывом прерываний в определённых местах. Так как ошибки проявляются только при значительных объёмах (практически непрерывной работе) передаваемой от I2C инфы. Возможно из-за софтового I2C.

Всем спасибо. Буду искать.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 16:33
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(SasaVitebsk @ Jun 17 2007, 20:15) *
Экспериментировал от 1МГц до 100кГц. На высоких скоростях колличество сбоев увеличивается, но до определённого порядка. Начиная примерно с 360кГц количество сбоев от тактовой частоты не зависит.

пулап все-таки попробуйте поменьше, хотя бы просто для эксперимента
Цитата
Только запись пакетную делал один раз. Но задержки ставил большие. А сейчас впритык. Сам уже не знаю где рыть. Пока ни одной ошибки не нашёл. Создаётся ощущение что проблема с вызывом прерываний в определённых местах. Так как ошибки проявляются только при значительных объёмах (практически непрерывной работе) передаваемой от I2C инфы. Возможно из-за софтового I2C.

Задержки между каждым пакетом или между обращениями к разным устройствам ?
Ошибки только с 24с512 или с mega48 тоже ?
На mega48 обработка через прерывания ?
Ошибки с 24xx случайно происходят не после общения с мегой без паузы ?
Какая частота ошибок (примерно) ?

Ну и код общения через i2c(на мегах) лучше конечно покажите...
Для редко возникающих ошибок знаю одну багу/фичу...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2007, 16:40
Сообщение #7


Гуру
******

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



Цитата(singlskv @ Jun 17 2007, 17:18) *
Ну все-таки наверное работало на внутреннем пулапе ?

У LPC2000 на выводах, которые могут работать для I2C pullup нет. Совсем нет sad.gif, даже если они используется не для I2C.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 16:46
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jun 17 2007, 20:40) *
У LPC2000 на выводах, которые могут работать для I2C pullup нет. Совсем нет sad.gif, даже если они используется не для I2C.

Ну тогда это точно какой-то фокус учитывая что LPC это Philips 07.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2007, 17:00
Сообщение #9


Гуру
******

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



Цитата(singlskv @ Jun 17 2007, 19:46) *
Ну тогда это точно какой-то фокус учитывая что LPC это Philips 07.gif

Никаких фокусов - сигнал при рассмотрении осциллографом был жутчайший, но как-то иногда понимался взаимодействующими сторонами. Ну а иметь хорошие I2C контроллеры Филипса положение обязывает smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jun 17 2007, 17:04
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



А софтовый I2C следит за SCL при растяжке ACK слейвом?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 17:24
Сообщение #11


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jun 17 2007, 21:00) *
Никаких фокусов - сигнал при рассмотрении осциллографом был жутчайший, но как-то иногда понимался взаимодействующими сторонами. Ну а иметь хорошие I2C контроллеры Филипса положение обязывает smile.gif.

Положение то обязывает,
но вот попробуйте объяснить мне, откуда там в сигнале могли единички
появлятся при полном отсутствии пулапов.
То что на i2c сигналы тянутся только к 0, принципиально, т.к. иначе
сложно реализовать мультимастер.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2007, 18:13
Сообщение #12


Гуру
******

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



Цитата(singlskv @ Jun 17 2007, 20:24) *
но вот попробуйте объяснить мне, откуда там в сигнале могли единички
появлятся при полном отсутствии пулапов.

Нормального сигнала не было, но наводки с соседнего клока были по этим фронтам оно все как-то жило.
Цитата
То что на i2c сигналы тянутся только к 0....

Я не запрашивал курс ликбеза и объяснений почему не могло работать, то, что хоть хреново, но работало на моих глазах.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 17 2007, 18:44
Сообщение #13


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jun 17 2007, 22:13) *
Нормального сигнала не было, но наводки с соседнего клока были по этим фронтам оно все как-то жило.
Я не запрашивал курс ликбеза и объяснений почему не могло работать, то, что хоть хреново, но работало на моих глазах.

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

P.S. Раскажите откуда все-таки 1ки появились...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 17 2007, 18:53
Сообщение #14


Гуру
******

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



Цитата(singlskv @ Jun 17 2007, 21:44) *
... только вот для меня осталось странным,
что получив подобный результат Вы не разобрались в чем была фишка...

А чего странного? Мне эта 'фишка' без надобности - угробил несколько часов (начинал дома копаться и боролся с нежеланием искать сетевой шнур от осциллографа), потом увидел кашу, выяснил, что и резистор и место для него отсутствуют, как класс, грязно выругался по-болгарски smile.gif, запаял прямо на корпус AT24 первый попавшийся выводной резистор и все.
Цитата
P.S. Раскажите откуда все-таки 1ки появились...

Читайте предыдущий пост.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 17 2007, 18:54
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(bodja74 @ Jun 17 2007, 20:04) *
А софтовый I2C следит за SCL при растяжке ACK слейвом?


У меня один мастер. Я не сталкивался с таким. Уточните откуда может быть растяжка.

И 24c512 и mega48 - аппаратно формируют сигналы.

Насчёт ошибок у м48 информации нет. Я пока это проконтролировать не могу. Необходимо на ней писать специальную отладочную программу чтобы это увидеть. Так, на вскидку, на ней ошибок нет.

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

Средний примерный объём ошибокЖ 1-2 на 3к инфы
Go to the top of the page
 
+Quote Post

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

 


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


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