Риски при управлении несколькими чипами с одним и тем же адресом через I2C
Я знаю, что устройства I2C должны иметь уникальные адреса при использовании. Что, если я по-прежнему использую несколько устройств с одним и тем же адресом, что может пойти не так? Опишу ситуацию:
У меня есть несколько цифровых конденсаторов (NCD2400M от IXYS), и я буду использовать их так, чтобы всегда отправлять одну и ту же команду. к каждому чипу. Мне не нужно ничего из них читать, поэтому я подумал, зачем мне мультиплексировать мою линию I2C. У меня нет оснований их идентифицировать, только командую. Для управления я использую Arduino (в настоящее время Nano может быть заменен на другую модель Arduino).
Я уже пробовал командовать ими одновременно, и это работает просто великолепно. Я попробовал соединить SDA и SCL четырех чипов и использовать RC-цепь и прямоугольную волну, чтобы проверить время нарастания, чтобы убедиться, что каждый чип действительно меняет свою емкость.
Однако я новичок в протоколе I2C и еще не знаком со всеми деталями. Я думаю, могут возникнуть проблемы, когда один из чипов выйдет из строя? Могу ли я в этом случае предположить, что с битом ACK/NACK все в порядке, поскольку чипы «идентичны»?
-РаутСа
РЕДАКТИРОВАТЬ: После использования правильных ключевых слов для поиска я нашел это ранее задал вопрос. Исходя из этого, я теперь понимаю, что, по крайней мере, может возникнуть проблема, когда только один из чипов попытается отправить бит NACK.
@RautSa, 👍3
Обсуждение2 ответа
Лучший ответ:
Риска что-то повредить нет, но риск заключается в надежности.
NCD2400M работает при напряжении 3,3 В и 5 В, поэтому он будет работать с любой платой Arduino.
Ваш вопрос очень похож на вопрос, который вы уже нашли: electronics.stackexchange.com/questions/417263/multiple-instances-of-same-device-on-i2c-bus.
Стоит упомянуть несколько особенностей Arduino.
Во время setup()
Arduino датчик часто проверяется, подключен ли он и возможен ли обмен данными с датчиком. Это было бы невозможно, если бы датчики использовали общий адрес I2C.
Библиотека Arduino Wire обнаруживает ошибку шины, например, когда на шине есть другие ведущие устройства I2C, и возвращает ошибку.
Поскольку ваши NCD2400M являются только ведомыми устройствами, я думаю, что они не вызовут ошибку шины.
Вам нужна удача, и я не могу гарантировать, что она всегда сработает:
- Когда NCD2400M ведет себя как обычный ведомый I2C и это не так умный, то не обнаруживает, что другой тянет SDA на низкий уровень для подтверждения.
- Некоторые датчики отправляют NACK, когда они заняты. В даташите не нашел такой записи. Вы могли бы написать в NCD2400M дважды, чтобы убедиться, что они его получили.
- Когда у них есть
внутренние часы и отвечать разными таймингами на шине I2C,
затем вы можете установить частоту SCL ниже. Например
Wire.setClock(50000);
послеWire.begin()
для тактовой частоты SCL 50 кГц.
Если один из NCD2400M перегорел, вы не сможете определить неисправный. Однако, когда один из NCD2400M выходит из строя, возможно, вся схема перестает быть надежной.
Чтобы создать хороший дизайн, вы должны знать, действительно ли вы общаетесь с датчиком или просто болтаете в воздухе. Когда вы создали больше проектов Arduino, вы знаете, что важно знать, подключен датчик или нет.
Попытка сделать это решение «простым» на данный момент может вызвать много проблем позже.
Вывод: Это сработает. Вы можете использовать его для теста. Когда вы используете его в финальной версии, вы рискуете, что это может вызвать массу неприятностей.
Подробнее об основах шины I2C: http://www.gammon.com.au/i2c<. /п>
Спасибо за ваш ответ и советы. С моим текущим прототипом я продолжу эту настройку, а позже добавлю мультиплексирование в более окончательный проект. Отсутствие информации NACK является достаточно серьезной причиной для реализации мультиплексирования. Жаль, что у них есть только два адреса для чипа., @RautSa
@RautSa с 4 чипами и без мультиплексора вам понадобится 5 цифровых контактов Arduino Nano. С программной библиотекой i2c, одним scl и четырьмя sda у вас есть четыре шины i2c. Когда каждая микросхема может иметь два адреса, то нужно всего две шины i2c, то есть 3 контакта с программной библиотекой i2c., @Jot
Всегда можно добавить переключатель, например DG406, DG409 или аналогичный, чтобы выбрать, какой колпачок подключен к SDA, чтобы одновременно подавалась только одна команда. Поднимите SDA на выходной стороне, чтобы он не плавал на чипе.
Верно, это возможно. Скорее всего, мне придется использовать реализацию, которая занимает наименьшее количество места на печатной плате окончательного проекта, поэтому мне придется проверить варианты., @RautSa
- Как перевести Arduino Nano в спящий режим с низким энергопотреблением (<0,05 мА)
- MAX30100 не работает
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Библиотека I2C MIFARE RC522
- Не удалось выделить SSD1306 при добавлении константы
- Сброс адреса I2c — MLX90614
- SSD1306 распознается сканером I2C, но не может его отобразить
- Могу ли я соединить вместе несколько плат Arduino Nano ?
Пожалуйста, добавьте ссылку на датчик в свой вопрос. https://www.ixysiss.com/ncd2400, @Jot
@Jot Спасибо за заметку, я добавил ссылку., @RautSa
@Jaromanda X Думаю, ты не удосужился прочитать мой пост? Это работает, я проверял. Вопрос в том, представляет ли это опасность, если используется не по назначению., @RautSa
@Jaromanda X Тебе действительно следует уточнить свои ответы. Если я ожидаю, что он будет работать неправильно, возможно, он работает правильно? Комментарии типа «вероятно, не сработает» бесполезны. Если бы вы прокомментировали _почему_, возможно, это не сработает, теперь это было бы полезно., @RautSa