Ответы:
Расположение ступицы датчика
В этом сценарии есть две шины I²C. Давайте назовем их местным автобусом и главным автобусом . Назначение локальной шины - подключить группу датчиков к микроконтроллеру (мкК). Целью микроконтроллера является опрос датчиков, сбор от них информации и обнаружение определенных событий. Микроконтроллер в такой роли называется сенсорным концентратором . Концентратор датчика не отвечает за функции более высокого порядка; для этого есть мощный главный процессор. Основная шина соединяет концентратор датчика с главным процессором. Таким образом, концентратор датчиков µC является ведущим на локальной шине I²C и ведомым на главной шине I²C.
SPI и I²C
PIC, связанный в оригинальном сообщении, не разделяет контакты между SPI и I²C. Однако существуют другие PIC, которые используют одни и те же контакты для аппаратного SPI и I²C, поскольку оба они реализованы с использованием одного и того же периферийного устройства MSSP. Если PIC имеет два отдельных периферийных устройства MSSP, то один может использоваться для аппаратного SPI, а другой - для аппаратного обеспечения I²C.
Очень распространенная причина, по которой требуется более одной шины, - устройства, работающие на разных скоростях. Первоначально I²C работал на максимальной частоте 100 кГц. Позднее скорость была увеличена до максимума 400 кГц, а еще позже - до 1 МГц и выше.
Дело в том, что, поскольку адрес каждого устройства встроен в протокол I²C, то, если у вас есть устройства с разными значениями скорости на одной и той же шине, скажем, 100 кГц и 400 кГц, вы всегда должны использовать шину с наименьшей общей скоростью на все устройства на одной шине (в данном случае 100 кГц).
Если вы запускаете шину на более высокой скорости (400 кГц), очевидно, что низкоскоростное устройство не будет работать должным образом, и оно может даже интерпретировать адрес высокоскоростного устройства как его собственный, вызывая сбой устройства 400 кГц как Что ж. Но даже если вы первоначально запустили шину на частоте 100 кГц, а затем попытались ускорить шину до 400 кГц после обращения к высокоскоростному чипу, для низкоскоростного чипа было бы возможно (хотя, вероятно, маловероятно) интерпретировать одно из следующих значений: высокоскоростные пакеты данных неверно указываются в качестве своего адреса, и, таким образом, портится связь по шине. В любом случае, в конце обмена с устройством 400 кГц, устройство 100 кГц, вероятно, будет в неизвестном состоянии.
Поэтому наиболее эффективно, если у вас есть устройства, работающие на разных скоростях, и у вас есть несколько портов I²C, и у вас есть запасные контакты для такой роскоши: один I²C, скажем, для устройств 100 кГц, другой для устройств 400 кГц и другой для устройств с частотой 1 МГц, в зависимости от ваших потребностей.
Это не проблема с SPI, потому что каждое устройство включается (адресуется) в аппаратном обеспечении отдельной линией выбора микросхемы. Таким образом, тактовая частота может быть согласована со скоростью выбранного чипа (10 МГц, 20 МГц и т. Д.) Без какого-либо влияния на другие чипы на той же шине, поскольку они не включены.
Также это может позволить вам поддерживать два устройства с одинаковым адресом. Да, большинство устройств позволяют вам выбирать два нижних бита их адреса с помощью ремешков. Недавно мне пришлось поддерживать 4 устройства, каждое из которых позволяло устанавливать только LSB их адреса с резистором. Наличие двух портов означает, что никаких дополнительных затрат для меня.
Может быть, я хочу, чтобы один был мастером для нескольких устройств, а другой представлял собой подчиненный порт, поэтому моему мастеру не нужно ждать, чтобы захватить шину, чтобы дать мне команду, пока я опрашиваю датчик температуры для 10 000-го время.
В этой ветке, похоже, есть и другие хорошие ответы, просто добавив мои 2 цента.
Скорость.
Если вам необходимо получить доступ к двум устройствам I2C одновременно, вы можете столкнуться со значительным конфликтом. Или один должен ждать другого.
Во-вторых, I²C можно использовать для увеличения пропускной способности (вы можете получать или отправлять два байта одновременно).
Если у вас есть какой-то АЦП, который работает непрерывно, один I2C все время занят.
Переключение адресов также занимает некоторое время, поэтому в некоторых случаях вы можете использовать два порта для двух устройств и избежать изменения адреса, чтобы сэкономить время.
Другие упомянули много причин для этого, я добавлю одну:
У вас есть куча устройств IVC на 5 В и куча устройств I2C на 3 В3.
Например, у меня есть микро 3.3 В, которое имеет два порта I2C, один с допуском 5 В, другой только 3 В3.