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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> I2C
Евгений Германов...
сообщение Nov 2 2008, 07:47
Сообщение #1


Профессионал
*****

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



Что можно сделать ведущему,если ведомый завис.Завис именно ведомый,те 0 на SDA и/или SCL выдан ведомым.Нехорошие слова не помогают,проверял smile.gif
Отключение питания не предлагать.
Go to the top of the page
 
+Quote Post
Максим Зиновьев
сообщение Nov 2 2008, 08:30
Сообщение #2


Техногипнолог
*****

Группа: Свой
Сообщений: 1 132
Регистрация: 6-03-05
Из: Saratov
Пользователь №: 3 126



Ничего, кроме цепи ресета в сторону слейва от мастера. И второй цепи ресета - от слейва до зависшего мастера

Или аппаратой приблуды, которая будет ресетить всех без разбора при долгом нуле на сда или сцл
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 2 2008, 12:20
Сообщение #3


Профессионал
*****

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



Цитата(maximiz @ Nov 2 2008, 11:30) *
Ничего, кроме цепи ресета в сторону слейва от мастера. И второй цепи ресета - от слейва до зависшего мастера

Или аппаратой приблуды, которая будет ресетить всех без разбора при долгом нуле на сда или сцл

Аесли нет сброса?
Про аппаратную-мысль интересная.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 2 2008, 21:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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 имеется. Особенно после подачи питания рекомендуется.
Так что поясните-ка ваши проблемы подробнее. По какой-такой причине зависают ваши слейвы и что они из себя представляют?
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 3 2008, 05:59
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 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 СД индикаторами) и чтото из часовых микросхем.Никто ничего не растягивает и не затягивает.Суть проблемы-если во время обмена выражениями между мастером и помошником этот обмен прервать,то помошник виснет(что вообщето логично).
И вопрос в том ,как его принудить к возобновлению диалога.Мысль с отключением питания,конечно,здравая но уж больно жестокая и не всегда легко реализуемая.
Обмен прерываю всегда я. smile.gif
Go to the top of the page
 
+Quote Post
Sun525
сообщение Nov 3 2008, 06:54
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 28-12-07
Из: Мурманск
Пользователь №: 33 719



Цитата
В-третьих, для того чтобы вывести из ступора приемную схему I2C слейва, необходимо без выдачи старт-условия просто "поклокать" шину сигналом SCL (9-10 тактовых испульсов). Такая рекомендация даже в спецификации I2C имеется. Особенно после подачи питания рекомендуется.


Сообщение отредактировал Sun525 - Nov 3 2008, 06:56
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 3 2008, 08:14
Сообщение #7


Профессионал
*****

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



поробую beer.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 3 2008, 15:25
Сообщение #8


Гуру
******

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



Цитата(Евгений Германович @ Nov 3 2008, 10:59) *
Суть проблемы-если во время обмена выражениями между мастером и помошником этот обмен прервать,то помошник виснет(что вообщето логично).
А почему нельзя штатно с выдачей стоп-условия прерывать обмен? 07.gif Ну а способ я вам уже подсказал.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 3 2008, 17:40
Сообщение #9


Гуру
******

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



Цитата(rezident @ Nov 3 2008, 18:25) *
А почему нельзя штатно с выдачей стоп-условия прерывать обмен?
Если на шине висит память, то как-то стремно - мало ли что она успела насосать пока мастер был в сбросе. А стоп-условие запускает запись. Так что спокойнее "проклокать" и начать со старт-условия.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 3 2008, 22:16
Сообщение #10


Гуру
******

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



Цитата(Сергей Борщ @ Nov 3 2008, 22:40) *
Если на шине висит память, то как-то стремно - мало ли что она успела насосать пока мастер был в сбросе. А стоп-условие запускает запись. Так что спокойнее "проклокать" и начать со старт-условия.
Когда это происходит после сброса по снижению напряжения питания мастера, то это понятно, так и нужно делать. Я-то понял, что обмен мастером по какой-то другой причине прерывается. Причем как-то нештатно, раз проблемы возникают.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 4 2008, 06:45
Сообщение #11


Профессионал
*****

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



Цитата(rezident @ Nov 3 2008, 18:25) *
А почему нельзя штатно с выдачей стоп-условия прерывать обмен? 07.gif Ну а способ я вам уже подсказал.

Нельзя,используется аппаратный сброс.Способ хорош ,а что делать если всё в нолях и виноват ведомый??
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 4 2008, 08:47
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 4 2008, 12:16
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 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 и бороться надо именно с этой причиной. Если же не описано - надо писать в техподдержку производителю.

Если ведомый вашей разработки - вам надо искать и устарнять в нем ошибку. Если ни один из этих вариантов вам не подходит - то спасет только аппаратный сброс ведомого, но это такой костыль...

Нет ведомый не мой
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 4 2008, 13:19
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 5 2008, 13:57
Сообщение #15


Профессионал
*****

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



Цитата(Сергей Борщ @ Nov 4 2008, 16:19) *
Зал в ожидании ерзает на стульях... Огласите имя этого таинственного ведомого.

P.S. И зачем вы цитируете сообщение целиком, чтобы ответить лишь на последнее предложение из него?

Для простоты и скорости. smile.gif
По многочисленным просьбам-ведомых 2
1 SAA 1064 но не уверен,на память не помню.
2М41Т56М6Е-это часы.Кстати о времени,если кто владеет инфой на эту бяку -подскажите,как рассчитывать поправку,в описи ничерта не понятно.
Go to the top of the page
 
+Quote Post

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

 


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


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