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

|
Цитата(Евгений Германович @ Nov 2 2008, 12:47)  Что можно сделать ведущему,если ведомый завис.Завис именно ведомый,те 0 на SDA и/или SCL выдан ведомым. Хотелось бы узнать, что из себя представляет ваш слейв? Программный? Аппаратный? Потому, что Во-первых, с точки зрения самой шины I2C длительность нуля на шине не ограничена, т.е. шина I2C полностью статическая. Ограничена длительность нуля на шине в SMBUS. Во-вторых, слейв имеет право "растягивать" нуль на SCL, если он слишком "тормозной тугодум". Если у вас слейв не такой, то зачем вообще допускать управлением сигналом SCL на слейве? Пускай у него SCL будет чистым входом. В-третьих, для того чтобы вывести из ступора приемную схему I2C слейва, необходимо без выдачи старт-условия просто "поклокать" шину сигналом SCL (9-10 тактовых испульсов). Такая рекомендация даже в спецификации I2C имеется. Особенно после подачи питания рекомендуется. Так что поясните-ка ваши проблемы подробнее. По какой-такой причине зависают ваши слейвы и что они из себя представляют?
|
|
|
|
|
Nov 3 2008, 05:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(rezident @ Nov 3 2008, 00:41)  Хотелось бы узнать, что из себя представляет ваш слейв? Программный? Аппаратный? Потому, что Во-первых, с точки зрения самой шины I2C длительность нуля на шине не ограничена, т.е. шина I2C полностью статическая. Ограничена длительность нуля на шине в SMBUS. Во-вторых, слейв имеет право "растягивать" нуль на SCL, если он слишком "тормозной тугодум". Если у вас слейв не такой, то зачем вообще допускать управлением сигналом SCL на слейве? Пускай у него SCL будет чистым входом. В-третьих, для того чтобы вывести из ступора приемную схему I2C слейва, необходимо без выдачи старт-условия просто "поклокать" шину сигналом SCL (9-10 тактовых испульсов). Такая рекомендация даже в спецификации I2C имеется. Особенно после подачи питания рекомендуется. Так что поясните-ка ваши проблемы подробнее. По какой-такой причине зависают ваши слейвы и что они из себя представляют? Поясняю: в качестве ведущего трудится pic18f452( аппаратно трудится). Ведомыми являются SAA1064 если не соврал.(схема управления 4 СД индикаторами) и чтото из часовых микросхем.Никто ничего не растягивает и не затягивает.Суть проблемы-если во время обмена выражениями между мастером и помошником этот обмен прервать,то помошник виснет(что вообщето логично). И вопрос в том ,как его принудить к возобновлению диалога.Мысль с отключением питания,конечно,здравая но уж больно жестокая и не всегда легко реализуемая. Обмен прерываю всегда я.
|
|
|
|
|
Nov 3 2008, 06:54
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 28-12-07
Из: Мурманск
Пользователь №: 33 719

|
Цитата В-третьих, для того чтобы вывести из ступора приемную схему I2C слейва, необходимо без выдачи старт-условия просто "поклокать" шину сигналом SCL (9-10 тактовых испульсов). Такая рекомендация даже в спецификации I2C имеется. Особенно после подачи питания рекомендуется.
Сообщение отредактировал Sun525 - Nov 3 2008, 06:56
|
|
|
|
|
Nov 4 2008, 08:47
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Евгений Германович @ Nov 4 2008, 09:45)  а что делать если всё в нолях и виноват ведомый?? Давайте рассуждать логически. Ведомый может держать SDA в нуле выдавая бит пока не получит от ведущего импульс SCL. Тогда он станет выдавать следующий бит, который тоже может оказхаться нулем. Так может повторяться максимум 8 раз, после чего ведомый отпускает SDA для приема ACK. Не приняв его, он прекращает выдачу. Т.е. после 9 холостых тактов SCL SDA гарантировано свободна и можно делать START. Если ведомый отвечает спецификации SMBus, то линию SCL он может "придерживать" в нуле, но не бесконечно. Максимальное время обычно оговорено в даташите (возможно косвенно, в виде параметра "минимальная частота SCL"). Если ведомый держит SCL дольше - вам надо обращаться к производителю, ибо в таком случае он должен убрать из даташита упоминание SMBus. Если у ведомого в даташите написано I2C то теоретически он может держать SCL сколько угодно, и значит в даташите должно быть описано - что конкретно вызывает удержание SCL и бороться надо именно с этой причиной. Если же не описано - надо писать в техподдержку производителю. Если ведомый вашей разработки - вам надо искать и устарнять в нем ошибку. Если ни один из этих вариантов вам не подходит - то спасет только аппаратный сброс ведомого, но это такой костыль...
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 4 2008, 12:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(Сергей Борщ @ Nov 4 2008, 11:47)  Давайте рассуждать логически. Ведомый может держать SDA в нуле выдавая бит пока не получит от ведущего импульс SCL. Тогда он станет выдавать следующий бит, который тоже может оказхаться нулем. Так может повторяться максимум 8 раз, после чего ведомый отпускает SDA для приема ACK. Не приняв его, он прекращает выдачу. Т.е. после 9 холостых тактов SCL SDA гарантировано свободна и можно делать START.
Если ведомый отвечает спецификации SMBus, то линию SCL он может "придерживать" в нуле, но не бесконечно. Максимальное время обычно оговорено в даташите (возможно косвенно, в виде параметра "минимальная частота SCL"). Если ведомый держит SCL дольше - вам надо обращаться к производителю, ибо в таком случае он должен убрать из даташита упоминание SMBus.
Если у ведомого в даташите написано I2C то теоретически он может держать SCL сколько угодно, и значит в даташите должно быть описано - что конкретно вызывает удержание SCL и бороться надо именно с этой причиной. Если же не описано - надо писать в техподдержку производителю.
Если ведомый вашей разработки - вам надо искать и устарнять в нем ошибку. Если ни один из этих вариантов вам не подходит - то спасет только аппаратный сброс ведомого, но это такой костыль... Нет ведомый не мой
|
|
|
|
|
Nov 4 2008, 13:19
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Евгений Германович @ Nov 4 2008, 15:16)  Нет ведомый не мой Зал в ожидании ерзает на стульях... Огласите имя этого таинственного ведомого. P.S. И зачем вы цитируете сообщение целиком, чтобы ответить лишь на последнее предложение из него?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 5 2008, 13:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(Сергей Борщ @ Nov 4 2008, 16:19)  Зал в ожидании ерзает на стульях... Огласите имя этого таинственного ведомого.
P.S. И зачем вы цитируете сообщение целиком, чтобы ответить лишь на последнее предложение из него? Для простоты и скорости. По многочисленным просьбам-ведомых 2 1 SAA 1064 но не уверен,на память не помню. 2М41Т56М6Е-это часы.Кстати о времени,если кто владеет инфой на эту бяку -подскажите,как рассчитывать поправку,в описи ничерта не понятно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|