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

 
 
 
Reply to this topicStart new topic
> I2C: start condition сразу после stop condition, Всегда приводит к ошибке?
sonycman
сообщение Dec 13 2008, 00:49
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Сейчас вот переношу один старый асмовый проект для меги8 на си.
И вспомнил, что была у меня проблема с шиной I2C - если в процессе обмена данными возникала ошибка, то я сразу после посылки STOP начинал отправлять START для повторной передачи. То есть совсем без паузы.
Что приводило к невыполнению посылки START`а, так как, видимо, в это время всё ещё выполнялся STOP...

Тогда я просто поставил паузу в несколько миллисекунд после каждого стопа (или перед каждым стартом).
Есть ли другой способ, "более красивый"?
И почему атмеловцы не стали устанавливать флаг TWINT после завершения STOP?
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 13 2008, 01:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Согласно спецификации I2C bus после стоп-условия и перед формированием нового старт-условия должна быть пауза не менее 4,7мкс для стандартного режима (100кГц) и не менее 1,3мкс для быстрого режима (400кГц).
Или ваш вопрос все же в контексте использования модуля TWI был задан?
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 13 2008, 05:39
Сообщение #3


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(sonycman @ Dec 13 2008, 03:49) *
сразу после посылки STOP начинал отправлять START для повторной передачи. То есть совсем без паузы.
Что приводило к невыполнению посылки START`а, так как, видимо, в это время всё ещё выполнялся STOP...

Тогда я просто поставил паузу в несколько миллисекунд после каждого стопа (или перед каждым стартом).
Есть ли другой способ, "более красивый"?

Можно тестировать флаг TWSTO в TWCR, который, согласно дш, должен сбрасываться после заветшения STOPа.
Я тоже сталкивался с подобной бякой, когда даешь START во время STOPа. Только у меня (на меге32) при этом вместо STOP+START получался Repeated START, после которого TWI откровенно глючит. Тестирование TWSTO спасает, но не полностью - в 6% случаев все равно RepS. Полностью спасает пауза после подачи стопа больше половины периода FSCL
Цитата(sonycman @ Dec 13 2008, 03:49) *
И почему атмеловцы не стали устанавливать флаг TWINT после завершения STOP?

Да уж, в TWI атмеловцы постарались - создали все возможные неудобства (не только TWINT после завершения STOP)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 13 2008, 09:51
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Спасибо! a14.gif
Тогда пусть будет пауза в 2 мкс (для 400 кГц), раз это наиболее надёжный способ smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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