Перейти к содержанию
    

Странная работа I2C изолятора TI ISO1541D

Всем привет.

Для работы с контроллерами двух последовательно соединенных батарей пришлось, для верхней батареи, использовать гальваноразвязанный I2C. В качестве изолятора выбран TI ISO1541D https://www.ti.com/lit/ds/symlink/iso1540.pdf

После сборки устройства выяснилось, что I2C для верхней батареи работает некорректно, мастер (STM32F413CGU6) не видит ACK от слейва (BQ40Z80). Начал разбираться, оказалось, что между мастером и изолятором есть странное состояние шины, при котором напряжение на SDA равно примерно 600 мВ. В даташите на изолятор сказано, что "Low-level output voltage, SDA1 and SCL1" равно от 650 до 800 мВ. Действительно ли в этом дело? Может ли этот уровень мастер интерпретировать как "1" на линии?

Сигналы на экране осциллографа: желтый - SDA slave, зеленый - SLC slave, синий - SDA master.

 

8xDQ4eVqEw4.jpg

Снимок экрана 2021-12-07 202643.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Судя по описанию на ISO1541D, да - низкий уровень это 0.65...0.8В

Цитата

When the I 2C bus drives SDA2 low, SDA1 follows after a certain delay in the receive path. The output low is the buffered output of VOL1 = 0.75 V, which is sufficiently low to be detected by Schmitt-trigger inputs with a minimum input-low voltage of VIL = 0.9 V at 3 V supply levels.


2. Максимальное значение напряжения, при котором МК все еще воспринимает его как лог. 0, судя по даташиту, есть 0.3*3.3 = 0.99В.

Следовательно, на первый взгляд дело не в уровнях напряжений. Меня больше смущают "рога" на ACK. На таких рогах не исключено, например, что slave словит какой-нибудь повторный старт или принудительный стоп. И еще: в RM на STM32 есть описание, как настраивать фильтры и схемы цифровой задержки - очень рекомендую заострить на этом внимание, если этого сделано не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте так, чтобы SDA менялась не по спаду SCL, а после спада, например  в середине '0' на SCL. Сам нарывался на такое. Долго ломал голову, пока не перечитал стандарт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, дело не в этом. Каким-то образом, в процессе передачи первого байта (запись адреса регистра) слейв притягивает клок к нулю. Из-за того, что изолятор клока однонаправленный, мастер не видит притянутого клока и фигачит данные дальше. Перечитал интернеты про I2C, выяснил, что если слейв не успевает передавать данные, он может притянуть клок к нулю, приостановив работу мастера. Заказал ISO1540, с двунаправленным клоком, впаяю и посмотрю что будет.

6 часов назад, Arlleex сказал:

что slave словит какой-нибудь повторный старт или принудительный стоп.

На осциллограмме передача адреса, рога это ACK слейва. Просто смутило, что точно такой же слейв в нижнем плече, без изолятора, работает отлично. А про фильтры спасибо, посмотрю что можно накрутить чтобы они точно не мешали.

4 часа назад, Zig сказал:

Сделайте так, чтобы SDA менялась не по спаду SCL, а после спада, например  в середине '0' на SCL. Сам нарывался на такое. Долго ломал голову, пока не перечитал стандарт.

 Попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Behram сказал:

Похоже, дело не в этом. Каким-то образом, в процессе передачи первого байта (запись адреса регистра) слейв притягивает клок к нулю. Из-за того, что изолятор клока однонаправленный, мастер не видит притянутого клока и фигачит данные дальше. Перечитал интернеты про I2C, выяснил, что если слейв не успевает передавать данные, он может притянуть клок к нулю, приостановив работу мастера.

Это называется "clock stretching".

3 минуты назад, Behram сказал:

Заказал ISO1540, с двунаправленным клоком, впаяю и посмотрю что будет.

Зря. Если причина именно в этом, то достаточно просто понизить скорость I2C. Чтобы slave успевал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Behram сказал:

Выставил 10 кБит/сек - поведение ровно то же, слейв притягивает клок к нулю.

Значит нужно ещё меньше.

Контроллеру батареи думаю большие скорости ни к чему.

 

PS: Если "clock stretching" на границе байта, то ещё можно просто в этом месте поставить задержку при передаче.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну посмотрите, насколько (по длительности) slave тянет SCL. Вот с запасом меньшую частоту и используйте как рабочую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удивительно, но даже выставив битрейт 100 бит/с, поведение слейва ровно такое же. Если посмотреть осциллограмму с рабочего канала, подключённого просто через буфер то, по прикидкам, даже на 5 кбит/с все должно работать. 

IMG_20211207_150830.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, Behram сказал:

Удивительно, но даже выставив битрейт 100 бит/с, поведение слейва ровно такое же. Если посмотреть осциллограмму с рабочего канала, подключённого просто через буфер то, по прикидкам, даже на 5 кбит/с все должно работать. 

похоже на конфликт слейвов на шине или мультимастеринг. какая у вас топология подключения? stm32 дальше мультиплексор и пара bq40z80? еще что-то на шине есть? если работать отдельно, физически отключив по очереди каждую bq40z80, то ошибки уходят? bqstudio через адаптер все время подключена или отключаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего это замечание вам не поможет но всетаки скажу. Мы много раз использовали ISO1540 и ISO1541 и не имели никаких приключений. Причем между двумя процессора и они менялись ролями в одном из изделий. Во всех случаях на шинах висели только резисторы и чипы. А у вас я вижу защитный диод. Он имеет емкость. Попробуйте его удалить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

08.12.2021 в 16:07, Behram сказал:

Заказал ISO1540

Каналы одинаковые, поэтому проверить можно парой ISO1541, но ИС откровенная халтура.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11.12.2021 в 14:42, Jury093 сказал:

какая у вас топология подключения? stm32 дальше мультиплексор и пара bq40z80?

Канал без изоляции: STM32-I2C1 -> BMX160 на плате -> буфер на плате -> bq40z80 на 20 см кабеле.

Канал с изоляцией: STM32-I2C2 -> изолятор на плате -> bq40z80 на 20 см кабеле.

11.12.2021 в 14:42, Jury093 сказал:

bqstudio через адаптер все время подключена или отключаете?

Отключен, конечно.

 

21 час назад, novsys сказал:

Попробуйте его удалить.

Уже удалил, но такой же защитный диод стоит на неизолированном канале и всё работает.

20 часов назад, Plain сказал:

Каналы одинаковые, поэтому проверить можно парой ISO1541, но ИС откровенная халтура.

Штош, осталось только дождаться 1540.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, Behram сказал:

осталось только дождаться 1540

Вы покупаете комплектацию для опытов без запаса?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 минут назад, Behram сказал:

Канал без изоляции: STM32-I2C1 -> BMX160 на плате -> буфер на плате -> bq40z80 на 20 см кабеле.

Канал с изоляцией: STM32-I2C2 -> изолятор на плате -> bq40z80 на 20 см кабеле.

Отключен, конечно.

ок. тогда дальше очевидные действия:

- поменять каналы i2c1-i2c2 местами, ошибки остались - проблемы на стороне stm32, иначе - проблема на шлейфе с изолятором

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...