Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C: start condition сразу после stop condition
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sonycman
Сейчас вот переношу один старый асмовый проект для меги8 на си.
И вспомнил, что была у меня проблема с шиной I2C - если в процессе обмена данными возникала ошибка, то я сразу после посылки STOP начинал отправлять START для повторной передачи. То есть совсем без паузы.
Что приводило к невыполнению посылки START`а, так как, видимо, в это время всё ещё выполнялся STOP...

Тогда я просто поставил паузу в несколько миллисекунд после каждого стопа (или перед каждым стартом).
Есть ли другой способ, "более красивый"?
И почему атмеловцы не стали устанавливать флаг TWINT после завершения STOP?
rezident
Согласно спецификации I2C bus после стоп-условия и перед формированием нового старт-условия должна быть пауза не менее 4,7мкс для стандартного режима (100кГц) и не менее 1,3мкс для быстрого режима (400кГц).
Или ваш вопрос все же в контексте использования модуля TWI был задан?
Diusha
Цитата(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)
sonycman
Спасибо! a14.gif
Тогда пусть будет пауза в 2 мкс (для 400 кГц), раз это наиболее надёжный способ smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.