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

 
 
> 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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
Максим Зиновьев
сообщение 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
rezident
сообщение Nov 5 2008, 21:13
Сообщение #16


Гуру
******

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



Цитата(Евгений Германович @ Nov 5 2008, 18:57) *
По многочисленным просьбам-ведомых 2
1 SAA 1064 но не уверен,на память не помню.
2М41Т56М6Е-это часы.
Вы ошибаетесь или лукавите. У всех этих слейвов (и у SAA1064 и у М41Т56M6E) вывод SCL является чисто входом, а не двунаправленным сигналом. Так что удерживать SCL в нуле они физически не могут, а для вывода их из ступора достаточно мастеру поCLOCKать SCLем. Судя по всему, глючит все же ваш мастер, который почему-то после сброса держит SCL в нуле. Изучайте тщательнее аппаратуру МК и проверяйте свою программу.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2008, 08:16
Сообщение #17


Гуру
******

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



Цитата(Евгений Германович @ Nov 5 2008, 16:57) *
Для простоты и скорости. smile.gif
А пункт 3.4 правил придуман для слабых? То, что читающий ваши сообщения вынужден перечитывать все отцитированное чтобы найти там на что же конкретно вы ответили, вас тоже не беспокоит? Тогда, возможно, для собеседников проще и быстрее будет просто не отвечать вам?

Цитата(Евгений Германович @ Nov 5 2008, 16:57) *
1 SAA 1064 но не уверен,на память не помню.
Хм... Вы хотите, чтобы вам помогли, или чтобы потренировались в прогнозировании? Люди сейчас начнут штудировать даташиты, ломать голову как она может делать то, чего не должна, а потом вы скажете "ой, нет, тут другой микросхем" и думаете, у кого-то останется желание решать задачу с новыми исходными данными? Развивая мысль: мы правильно понимаем, что "все в нулях" из сообщения №11 означает "ноль и на SDA и на SCL?

По теме: я согласен с rezident, что проблема где-то у вас. Чтобы окончательно убедиться в этом, помогите нам помочь вам и поймав ситуацию "всё в нолях" отключая ведомых по одному от шины локализуйте, какой именно из ведомых удерживает SCL (именно SCL, почему может быть притянута SDA и как "проклокивание" выводит из этого состояния см. ответ №12).


--------------------
На любой вопрос даю любой ответ
"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 6 2008, 16:23
Сообщение #18


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

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



Цитата(rezident @ Nov 6 2008, 00:13) *
Вы ошибаетесь или лукавите. У всех этих слейвов (и у SAA1064 и у М41Т56M6E) вывод SCL является чисто входом, а не двунаправленным сигналом. Так что удерживать SCL в нуле они физически не могут, а для вывода их из ступора достаточно мастеру поCLOCKать SCLем. Судя по всему, глючит все же ваш мастер, который почему-то после сброса держит SCL в нуле. Изучайте тщательнее аппаратуру МК и проверяйте свою программу.

Да отключал я мастера а 0 оставались.Это и странно.Пока не передернеш питание стоит 0.С мастером проще он сброс имеет.
Go to the top of the page
 
+Quote Post
AndreyS
сообщение Nov 10 2008, 19:28
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276



Цитата(Евгений Германович @ Nov 6 2008, 19:23) *
Да отключал я мастера а 0 оставались.Это и странно.Пока не передернеш питание стоит 0.С мастером проще он сброс имеет.


Добрый день.
Простите за бестактность. А подтяжки, при отключении мастера, вы случаем не отрубали???

Просто у меня лично была похожая проблема с процом F120 от SiLabs. На шине висели все I2C устройства слейвы, а он единственный SMBus мастер. Так зависала именно аппаратная часть этого проца. Да бы не ресетить проц целиком, я сбрасывал порты программно в 0 и и после этого SMBus контроллер в проце оживал. Можно было продолжать работу с интерфейсом. Плюс соответственно изменил подтяжки по спецификации I2C, а не SMBus. Правда у меня зависон на лицо был в проце, так как SCL было в 0, а SDA в 1, но прерывание не формировалось.

Сообщение отредактировал AndreyS - Nov 10 2008, 19:42


--------------------
Удачи.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 10 2008, 19:52
Сообщение #20


Гуру
******

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



Цитата(Евгений Германович @ Nov 5 2008, 16:57) *
Для простоты и скорости. smile.gif

Moderator:
Не следует это делать за чужой счет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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