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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> I2C - защита от дурака.
Trashy_2
сообщение Aug 29 2016, 08:39
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 254
Регистрация: 27-10-08
Пользователь №: 41 220



Куча девайсов на I2C. Иногда у какого-либо девайса происходит затык и он притягивает к земле или дату или клок. В итоге раком встаёт ВСЁ!
Как схемотехнически избежать подобных ситуаций?


--------------------
Транзистор не сможет измерить широкое сердце героя!(ц)
Go to the top of the page
 
+Quote Post
p_kav
сообщение Aug 29 2016, 08:46
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 5-08-14
Из: Ярославль
Пользователь №: 82 466



Предусмотреть сброс всех/только глючных устройств шины по питанию.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Aug 29 2016, 08:46
Сообщение #3


Знающий
****

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



Цитата(Trashy_2 @ Aug 29 2016, 11:39) *
Куча девайсов на I2C. Иногда у какого-либо девайса происходит затык и он притягивает к земле или дату или клок. В итоге раком встаёт ВСЁ!
Как схемотехнически избежать подобных ситуаций?

если у чипов есть вход "reset", то дергать им, если более глобально - то рубить питание через ключ..
в теории, есть еще возможность развешивать через саму i2c, но это если чип поддерживает данную процедуру..
самый тяжелый вариант - мультимастеринг..
Go to the top of the page
 
+Quote Post
Trashy_2
сообщение Aug 29 2016, 08:47
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 254
Регистрация: 27-10-08
Пользователь №: 41 220



Цитата(p_kav @ Aug 29 2016, 11:46) *
Предусмотреть сброс всех/только глючных устройств шины по питанию.

А как узнать кто из них глючный?


--------------------
Транзистор не сможет измерить широкое сердце героя!(ц)
Go to the top of the page
 
+Quote Post
p_kav
сообщение Aug 29 2016, 08:51
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 5-08-14
Из: Ярославль
Пользователь №: 82 466



Статистически, во время разработки. У меня, например, так делал барометр BMP280, а акселерометр MPU-6050 не глючил ни разу. Но, по факту, лучше перезагружать по питанию всё, что есть на шине.

Ещё стоит попробовать снизить номинал подтягивающих резисторов. Часто устройства на шине заглючивают не просто так.
Go to the top of the page
 
+Quote Post
Trashy_2
сообщение Aug 29 2016, 08:57
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 254
Регистрация: 27-10-08
Пользователь №: 41 220



Цитата(p_kav @ Aug 29 2016, 11:51) *
Статистически, во время разработки. У меня, например, так делал барометр BMP280, а акселерометр MPU-6050 не глючил ни разу. Но, по факту, лучше перезагружать по питанию всё, что есть на шине.

Ещё стоит попробовать снизить номинал подтягивающих резисторов. Часто устройства на шине заглючивают не просто так.

Там железяка с кучей слотов, в который на ходу вставляют и выдёргивают блоки. У каждой свой прогер(даже из других регионов). И каждому нужно доказывать, что это его металлолом гонит. А так, адреса протестил, его глючный - в ауте. Вот и пусть сам колупается пока не очухается.
Я тут думал через транзистор коммутировать, на базу которого через кондёр сигнал заводить. Типа, импульсы проходят, а постоянка хрен. Типа вотчдог на конденсаторе...


--------------------
Транзистор не сможет измерить широкое сердце героя!(ц)
Go to the top of the page
 
+Quote Post
Jury093
сообщение Aug 29 2016, 08:58
Сообщение #7


Знающий
****

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



Цитата(p_kav @ Aug 29 2016, 11:51) *
Ещё стоит попробовать снизить номинал подтягивающих резисторов. Часто устройства на шине заглючивают не просто так.

ну и не забыть проинтить чипы после сброса/питания, а в линусе сначала выгрузить модули драйверов, а уж потом ребутать чипы на шине..
Go to the top of the page
 
+Quote Post
Alex11
сообщение Aug 29 2016, 10:02
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Если на шине только слейвы, то почти всегда помогает поставить SDA в high и подать 9 SCL импульсов. Если устройство не ломаное совсем, то перестает держать шину.
Go to the top of the page
 
+Quote Post
vladec
сообщение Aug 30 2016, 07:50
Сообщение #9


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

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



А как Вы подаете на SCL импульсы если он, как раз таки, удерживается в нуле?
Go to the top of the page
 
+Quote Post
Alex11
сообщение Aug 30 2016, 10:21
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Если виснет так, то только ресет или питание.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 30 2016, 11:23
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Alex11 @ Aug 29 2016, 16:02) *
Если на шине только слейвы, то почти всегда помогает поставить SDA в high и подать 9 SCL импульсов. Если устройство не ломаное совсем, то перестает держать шину.

И каким образом это поможет?
Например устройство - EEPROM, которая на операции записи пропустила (из-за помех) один клок. Соответственно - держит ACK. Ну подадите Вы ещё 9 клоков - она будет ACK для след. байта держать. Как это поможет?
Или любое устройство, принимающее блок байт, подтверждающее каждый байт ACK-ом. И если после такого ACK-а получает СТОП-условие - завершающее транзакцию, а если не получает - запускает счётчик на ещё 9 клоков.
Тогда уж, чтобы точно освободить шину, надо 9 раз сформировать СТОП-условие на шине. Или даже ещё больше раз.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Aug 30 2016, 11:30
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Trashy_2 @ Aug 29 2016, 15:57) *
Там железяка с кучей слотов, в который на ходу вставляют и выдёргивают блоки. .

Ставить на каждый слот отдельный контроллер I2C. По другому никак.
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 30 2016, 17:45
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(vladec @ Aug 30 2016, 10:50) *
А как Вы подаете на SCL импульсы если он, как раз таки, удерживается в нуле?


Че-то не понял, если устройство - слейв, как оно вообще что-то на клок выставляет?? В топку такие "умные" девайсы wacko.gif
Go to the top of the page
 
+Quote Post
p_kav
сообщение Aug 30 2016, 17:49
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 5-08-14
Из: Ярославль
Пользователь №: 82 466



Цитата(mantech @ Aug 30 2016, 22:45) *
Че-то не понял, если устройство - слейв, как оно вообще что-то на клок выставляет?? В топку такие "умные" девайсы wacko.gif


А почему нет? Это называется Clock Stretching - когда микросхема EEPROM не успевает записать данные, она придерживает SCL внизу, и мастер понимает, что устройство занято и не надо его грузить новыми данными.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Sep 19 2016, 12:03
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(p_kav @ Aug 30 2016, 20:49) *
А почему нет? Это называется Clock Stretching - когда микросхема EEPROM не успевает записать данные, она придерживает SCL внизу, и мастер понимает, что устройство занято и не надо его грузить новыми данными.

А если вешается система то при чем тут слейв!? Значит алгоритм мастера не правильно продуман.
Go to the top of the page
 
+Quote Post

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

 


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


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