Arlleex 178 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба Приветствую! Есть система из 4-5 плат, и на каждой из них установлен свой внутренний набор источников (DC/DC, LDO и т.д.) для получения локальных питаний. Все эти устройства должны видеть друг друга по I2C. К какому напряжению правильно тянуть линии SCL/SDA? Отваливание одной платы не должно влиять на шину. Я думал на всех платах поставить резисторы этак на 10-15 кОм, но правильно ли это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 1 minute ago, Arlleex said: Я думал на всех девайсах поставить резисторы этак на 10-15 кОм, но правильно ли это? Мультимастер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 12 ноября, 2021 Опубликовано 12 ноября, 2021 (изменено) · Жалоба Тянуть естественно, к номинальному рабочему напряжению. Если напряжение варьируется - я бы поставил подтяжку через диоды. VCC -----|>|---/\/\/\/---+----- SDA VCC -----|>|---/\/\/\/------+-- SCL DL4148 3.3k В таком случае шина будет подтягиваться к максимальному напряжению источника питания, а остальные при мЕньшем напряжении - не будут воздействовать на линию. Вопрос в том, как отнесётся периферия к инжекции напряжения в порт, когда нет основного питания. Предполагаю возможное паразитное запитывание и рекомендую разрывать шину ещё и через аналоговый ключ (да хоть на полевом транзисторе, но лучше на оптическом реле) на стороне каждого устройства. Просто с обшей шиной я уже поймал проблему (хотя там UART используется), но если одно устройство выпадает - то шину в таком случае стягивает через паразитные диоды к земле (по факту - по подпитывает через порт контроллера устройство, но так как тока не хватает - просто тянет линию до 1В и всё ломается). Так что крайне рекомендую всё же размыкать линию при пропадании питания. Изменено 12 ноября, 2021 пользователем AlanDrakes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 1 час назад, Arlleex сказал: Отваливание одной платы не должно влиять на шину. А что такое "отваливание"? Отключение питания платы или просто факт зависания I2C-слэйва на ней? Если 1-е: То имхо лучше развязать все платы через гальванические изоляторы I2C. Если 2-е: можно подтянуть туда, где гарантированно будет питание. Подтянуть можно к минимальному напряжению из всех, на которых сидят слэйвы. 26 минут назад, AlanDrakes сказал: В таком случае шина будет подтягиваться к максимальному напряжению источника питания, а остальные при мЕньшем напряжении - не будут воздействовать на линию. Ну да - и тогда в устройство, которое к примеру запитано от 3.3V, на его SDA прилетит +5V. Не поплохеет ли ему от такого сюрприза? Если подтягивать, то к минимальному из всех напряжений питания. PS: А вообще вроде как I2C - внутриплатный интерфейс, а не межплатный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 60 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 1 hour ago, Arlleex said: Приветствую! Есть система из 4-5 плат, и на каждой из них установлен свой внутренний набор источников (DC/DC, LDO и т.д.) для получения локальных питаний. Все эти устройства должны видеть друг друга по I2C. К какому напряжению правильно тянуть линии SCL/SDA? Отваливание одной платы не должно влиять на шину. Я думал на всех платах поставить резисторы этак на 10-15 кОм, но правильно ли это? Если временно закрыть глаза на величину питания, то оставить подтяжку только на мастере. Если в системе только один мастер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 1 час назад, aaarrr сказал: Мультимастер? Да. Причем такой мультимастер, что на некоторых платах подтяжка уже есть и на это нельзя повлиять (SoM-модуль, где эти резисторы я хз). 43 минуты назад, AlanDrakes сказал: Вопрос в том, как отнесётся периферия к инжекции напряжения в порт, когда нет основного питания... Про инжекцию я знаю. STM-ки без проблем перенесут, другие микросхемы - не знаю. Но через резистор в 10-15 кОм вряд ли что-то успешно запитается. 25 минут назад, jcxz сказал: А что такое "отваливание"? Отключение питания платы или просто факт зависания I2C-слэйва на ней? Плата просто отсутствует в разъеме или ее питание снято (это не то же самое). Цитата PS: А вообще вроде как I2C - внутриплатный интерфейс, а не межплатный. Расстояния там маленькие, не вижу проблем. Более того, в моей системе этот самый I2C я на другой заменить не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 12 minutes ago, Arlleex said: Но через резистор в 10-15 кОм вряд ли что-то успешно запитается. Некоторые PMIC'и отказываются стартовать, если на выходе что-то есть. 2 hours ago, Arlleex said: Отваливание одной платы не должно влиять на шину. А есть плата, "отваливание" которой не предусматривается или не допускается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 34 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба Поставьте на каждой плате микросхему I2C буфера. Типа PCA9513. Она позволит развязать I2C цепи плат. Также она поддерживает горячее подключение. Можно, как предложили выше, использовать для развязки полевые транзисторы. Пример AN10216-01 I2C Manual Slide 141. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба 12 минут назад, aaarrr сказал: А есть плата, "отваливание" которой не предусматривается или не допускается? По факту у меня 2 независимых SoM (в качестве мастеров), вот они должны работать одновременно. При этом если один из них (любой, но, естественно, не оба сразу) отвалится (выключится по какой-либо причине, например, отгорело что-то в проце), второй должен иметь возможность все еще получать доступ к I2C-шине. Более того, на этой шине (помимо 2 мастеров) висят 4 слэйва, каждый со своим питанием. Я предусмотрел установку подтяжек и на них тоже. Моя логика была в том, что подтягивать шину должен хоть кто-то, и отключение всех, кроме любого последнего устройства, не должно отключать подтяжку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 206 12 ноября, 2021 Опубликовано 12 ноября, 2021 · Жалоба Нужно диодным ИЛИ создать бесперебойное напряжение для двух резисторов подтяжки и подключить к ним каждое устройство через пару изолирующих NMOS стоками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 15 ноября, 2021 Опубликовано 15 ноября, 2021 · Жалоба 12.11.2021 в 16:44, Arlleex сказал: Плата просто отсутствует в разъеме или ее питание снято (это не то же самое). Вы привели разные варианты. Если платы нет в разъёме - линия вообще не нагружена на этот отвод. Можно, конечно, учитывать звон на линии из-за отражений в проводах... но это иронично для относительно низкоскоростного интерфейса. А вот при пропадании питания по какой-либо причине - шину может подтянуть к нулю и всё. Коммуникация отвалится из-за того, что уровень линии активный, значит занято. 12.11.2021 в 16:11, jcxz сказал: Ну да - и тогда в устройство, которое к примеру запитано от 3.3V, на его SDA прилетит +5V. Не поплохеет ли ему от такого сюрприза? При подтяжке через 3.3кОм получим "лишний" ток в линию: (5 - 3.3 - 0.4) / 3300 = 1.3В / 3300Ом = 0,39мА. Ну как бы... и фиг с ним. Здесь беру из такого расчёта: Максимальное питание = 5В, номинальное питание = 3.3В, Диод с падением напряжения на переходе 0.4В, резистор на 3.3кОм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 15 ноября, 2021 Опубликовано 15 ноября, 2021 · Жалоба Вообще, я имел в виду подобную схему. Разные линии VCC могут не иметь одинаковый потенциал. Прямоугольники поверх шин на устройствах Dev_x - рекомендуемые ключи, которые будут "размыкаться" при потере питания модуля. Из простого - я бы поставил что-то похожее на оптопару с полевым транзистором вот с такой внутренней схемой: Из минусов, их нужно ставить на каждый модуль по два канала. И желательно "включать" только когда процессор действительно готов к работе (на случай его перезагрузки или подключения на горячую). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 15 ноября, 2021 Опубликовано 15 ноября, 2021 · Жалоба 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 15 ноября, 2021 Опубликовано 15 ноября, 2021 · Жалоба кроме изоляторов существуют еще и девайсы с выключателями шин (switch-и) например, если на двух платах стоят одинаковые DCDC с одним адресом - как их загрузить? https://www.ti.com/interface/i2c/switches-and-multiplexers/products.html я столкнулся с таким на ксайлинских демоплатах - там какие-то адские деревья набираются из тех же TCA9548 и кажется, что замаешься эти шины переключать, чтобы до нужного "листа" на этом дереве дойти - а потом как-то привыкаешь :) естественно, что они и согласовывают разные напряжения на разных i2c шинах но гальванической развязки нет (вопрос а нужна ли она в вашем случае?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 34 15 ноября, 2021 Опубликовано 15 ноября, 2021 · Жалоба 5 часов назад, yes сказал: если на двух платах стоят одинаковые DCDC с одним адресом - как их загрузить? Встретилась забавная микросхема: LTC4316. Эта микросхема позволяет разрезать I2C цепь на две части и изменить (заксорить с константой) адреса цепочки микросхем, подключенных к ее выходу. Константа для XOR определяется резисторными делителями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться