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

Множественный pull-up на I2C: куда подключать?

Приветствую!

Есть система из 4-5 плат, и на каждой из них установлен свой внутренний набор источников (DC/DC, LDO и т.д.) для получения локальных питаний. Все эти устройства должны видеть друг друга по I2C. К какому напряжению правильно тянуть линии SCL/SDA? Отваливание одной платы не должно влиять на шину. Я думал на всех платах поставить резисторы этак на 10-15 кОм, но правильно ли это?

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


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

1 minute ago, Arlleex said:

Я думал на всех девайсах поставить резисторы этак на 10-15 кОм, но правильно ли это?

Мультимастер?

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


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

Тянуть естественно, к номинальному рабочему напряжению. Если напряжение варьируется - я бы поставил подтяжку через диоды.

VCC -----|>|---/\/\/\/---+----- SDA
VCC -----|>|---/\/\/\/------+-- SCL
       DL4148  3.3k

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

Вопрос в том, как отнесётся периферия к инжекции напряжения в порт, когда нет основного питания. Предполагаю возможное паразитное запитывание и рекомендую разрывать шину ещё и через аналоговый ключ (да хоть на полевом транзисторе, но лучше на оптическом реле) на стороне каждого устройства.

 

 

Просто с обшей шиной я уже поймал проблему (хотя там UART используется), но если одно устройство выпадает - то шину в таком случае стягивает через паразитные диоды к земле (по факту - по подпитывает через порт контроллера устройство, но так как тока не хватает - просто тянет линию до 1В и всё ломается). Так что крайне рекомендую всё же размыкать линию при пропадании питания.

Изменено пользователем AlanDrakes

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


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

1 час назад, Arlleex сказал:

Отваливание одной платы не должно влиять на шину.

А что такое "отваливание"? Отключение питания платы или просто факт зависания I2C-слэйва на ней?

Если 1-е: То имхо лучше развязать все платы через гальванические изоляторы I2C.

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

 

26 минут назад, AlanDrakes сказал:

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

Ну да - и тогда в устройство, которое к примеру запитано от 3.3V, на его SDA прилетит +5V. Не поплохеет ли ему от такого сюрприза?  :wacko:

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

 

PS: А вообще вроде как I2C - внутриплатный интерфейс, а не межплатный.

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


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

1 hour ago, Arlleex said:

Приветствую!

Есть система из 4-5 плат, и на каждой из них установлен свой внутренний набор источников (DC/DC, LDO и т.д.) для получения локальных питаний. Все эти устройства должны видеть друг друга по I2C. К какому напряжению правильно тянуть линии SCL/SDA? Отваливание одной платы не должно влиять на шину. Я думал на всех платах поставить резисторы этак на 10-15 кОм, но правильно ли это?

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

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


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

1 час назад, aaarrr сказал:

Мультимастер?

Да. Причем такой мультимастер, что на некоторых платах подтяжка уже есть и на это нельзя повлиять (SoM-модуль, где эти резисторы я хз).
 

43 минуты назад, AlanDrakes сказал:

Вопрос в том, как отнесётся периферия к инжекции напряжения в порт, когда нет основного питания...

Про инжекцию я знаю. STM-ки без проблем перенесут, другие микросхемы - не знаю. Но через резистор в 10-15 кОм вряд ли что-то успешно запитается.

 

25 минут назад, jcxz сказал:

А что такое "отваливание"? Отключение питания платы или просто факт зависания I2C-слэйва на ней?

Плата просто отсутствует в разъеме или ее питание снято (это не то же самое).

Цитата

PS: А вообще вроде как I2C - внутриплатный интерфейс, а не межплатный.

Расстояния там маленькие, не вижу проблем. Более того, в моей системе этот самый I2C я на другой заменить не могу.

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


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

12 minutes ago, Arlleex said:

Но через резистор в 10-15 кОм вряд ли что-то успешно запитается.

Некоторые PMIC'и отказываются стартовать, если на выходе что-то есть.

 

2 hours ago, Arlleex said:

Отваливание одной платы не должно влиять на шину.

А есть плата, "отваливание" которой не предусматривается или не допускается?

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


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

Поставьте на каждой плате микросхему I2C буфера. Типа PCA9513.

Она позволит развязать I2C цепи плат. Также она поддерживает горячее подключение.

Можно, как предложили выше, использовать для развязки полевые транзисторы. Пример AN10216-01 I2C Manual  Slide 141.

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


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

12 минут назад, aaarrr сказал:

А есть плата, "отваливание" которой не предусматривается или не допускается?

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

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


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

Нужно диодным ИЛИ создать бесперебойное напряжение для двух резисторов подтяжки и подключить к ним каждое устройство через пару изолирующих NMOS стоками.

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


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

12.11.2021 в 16:44, Arlleex сказал:

Плата просто отсутствует в разъеме или ее питание снято (это не то же самое).

Вы привели разные варианты.
Если платы нет в разъёме - линия вообще не нагружена на этот отвод. Можно, конечно, учитывать звон на линии из-за отражений в проводах... но это иронично для относительно низкоскоростного интерфейса.
А вот при пропадании питания по какой-либо причине - шину может подтянуть к нулю и всё. Коммуникация отвалится из-за того, что уровень линии активный, значит занято.

 

12.11.2021 в 16:11, jcxz сказал:

Ну да - и тогда в устройство, которое к примеру запитано от 3.3V, на его SDA прилетит +5V. Не поплохеет ли ему от такого сюрприза?  :wacko:

При подтяжке через 3.3кОм получим "лишний" ток в линию:
(5 - 3.3 - 0.4) / 3300 = 1.3В / 3300Ом = 0,39мА. Ну как бы... и фиг с ним. Здесь беру из такого расчёта: Максимальное питание = 5В, номинальное питание = 3.3В, Диод с падением напряжения на переходе 0.4В, резистор на 3.3кОм.

 

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


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

Вообще, я имел в виду подобную схему.
Разные линии VCC могут не иметь одинаковый потенциал.
Прямоугольники поверх шин на устройствах Dev_x - рекомендуемые ключи, которые будут "размыкаться" при потере питания модуля. Из простого - я бы поставил что-то похожее на оптопару с полевым транзистором вот с такой внутренней схемой:

%D0%9E%D0%BF%D1%82%D0%BE%D0%BF%D0%B0%D1%

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

Screenshot_20211115_101724.png

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


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

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

При подтяжке через 3.3кОм получим "лишний" ток в линию:

(5 - 3.3 - 0.4) / 3300 = 1.3В / 3300Ом = 0,39мА. Ну как бы... и фиг с ним. Здесь беру из такого расчёта: Максимальное питание = 5В, номинальное питание = 3.3В, Диод с падением напряжения на переходе 0.4В, резистор на 3.3кОм.

Не надо угадывать - что и как там внутри чипа. Надо следовать требованиям даташита. И если там указано: "3.3V максимум" и не заявлено "5V tolerance", то значит - "больше 3.3V нельзя" и точка.

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

Прямоугольники поверх шин на устройствах Dev_x - рекомендуемые ключи, которые будут "размыкаться" при потере питания модуля. Из простого - я бы поставил что-то похожее на оптопару с полевым транзистором вот с такой внутренней схемой:

Зачем этот колхоз, если существуют специализированные ИС - изоляторы I2C?

Типа ADUM1250/ADUM1251/ADUM2250/ADUM2251?

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


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

кроме изоляторов существуют еще и девайсы с выключателями шин (switch-и)

например, если на двух платах стоят одинаковые DCDC с одним адресом - как их загрузить?

https://www.ti.com/interface/i2c/switches-and-multiplexers/products.html

я столкнулся с таким на ксайлинских демоплатах - там какие-то адские деревья набираются из тех же TCA9548 и кажется, что замаешься эти шины переключать, чтобы до нужного "листа" на этом дереве дойти - а потом как-то привыкаешь :)

естественно, что они и согласовывают разные напряжения на разных i2c шинах

но гальванической развязки нет (вопрос а нужна ли она в вашем случае?)

 

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


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

5 часов назад, yes сказал:

если на двух платах стоят одинаковые DCDC с одним адресом - как их загрузить?

Встретилась забавная микросхема: LTC4316.
Эта микросхема позволяет разрезать I2C цепь на две части и изменить (заксорить с константой) адреса цепочки микросхем, подключенных к ее выходу. Константа для XOR определяется резисторными делителями.

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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