Я планирую взаимодействовать с некоторыми сенсорными устройствами через I 2 C по длинной шине, с устройствами, соединенными в цепочку каждые 2 м или около того, всего до 16 м. Я видел здесь другие вопросы , относящиеся к этому из раздела «какой протокол мне использовать?» угол, но меня больше интересует фактическая проводка.
Мои основные требования:
Устройства, вероятно, будут работать на логике 5 В.
Существует ли идеальный тип кабеля для такого рода вещей?
I2C в некотором смысле является очень удобным протоколом, но цель его разработки состоит в том, чтобы соединять устройства на одной плате. Помимо проблем с уровнями сигнализации, существуют некоторые проблемы с протоколом, которые могут создавать проблемы при использовании его для связи с несколькими платами.
Например, предположим, что подключены два ведомых устройства, которые позволяют ведущему считывать произвольное количество байтов и которые могут возвращать ноль для произвольного количества этих байтов. Если в то время как одно устройство посылает данные ведущему устройству, второе устройство ошибочно интерпретирует часть данных как последовательность «СТАРТ», за которой следует его адрес чтения, возможно, что для каждого последующего такта по крайней мере одно из устройств будет хотеть для вывода бита данных "0". Такой сценарий сделал бы невозможным для мастера когда-либо восстановить контроль над шиной. Хотя можно спроектировать одноплатную связь таким образом, чтобы паразитные импульсы «просто не возникали», это часто невозможно при подключении многих устройств. Можно попытаться свести к минимуму вероятность появления паразитных импульсов, но не следует ожидать, чтобы избежать их полностью. Если раз в месяц показания датчика искажаются из-за паразитного импульса, это может быть приемлемо, но блокировка системы раз в месяц, скорее всего, будет менее приемлемой.
Если вы используете установку с одним мастером, я бы посоветовал использовать отдельные провода для выхода SDA к подчиненным устройствам и возврата SDA. Если ведомые устройства используют квитирование, возможно, стоит сделать то же самое для SCK. Затем на выходе мастера можно было бы активно повышать и понижать уровень (вместо того, чтобы активно понижать и пассивно повышать). Если бы разъемы были обозначены сторонами «вход» и «выход», каждая плата в цепочке могла бы «И» вернуть возврат от предыдущего устройства с состоянием контактов своего собственного устройства и вывести активный высокий и низкий уровень в обратном направлении. также. Такой дизайн, скорее всего, потребует использования битового мастера, а не аппаратного мастера, но, учитывая, что реализации программных мастеров часто могут лучше восстанавливать ошибки, чем аппаратные мастера, которые не должны этого делать.
В дополнение к повышенной надежности, достигаемой за счет привода «активный-высокий/активный-низкий», использование отдельных выходных/возвратных проводов для SDA позволит избежать возможности того, что одно ведомое устройство будет мешать попыткам ведущего заставить другое устройство отключиться, поскольку даже если все но одно ведомое устройство хотело выводить низкий уровень на SDA, у ведущего не возникло бы проблем с генерацией перехода с низкого уровня на высокий на выводе SDA последнего оставшегося ведомого.
Если вы не хотите использовать дополнительные провода для отделения выхода SDA от возврата SDA, можно было бы подключить ведомые устройства так, чтобы их сила подтягивания к SDA была ограничена, и подключить ведущее устройство так, чтобы оно могло безопасно подавлять рабы. Это позволило бы выполнить чистое восстановление в случае неисправности ведомого устройства, но не обеспечило бы преимуществ чистоты сигнала при использовании отдельных проводов. Кроме того, это будет хорошо работать только в том случае, если квитирование не используется. Надежная работа I2C требует, чтобы переходы на SCK и SDA были разделены временем, превышающим наихудший случай перекоса передачи. Если мастер полностью контролирует SCK, он может это обеспечить. Однако ведомые устройства, использующие квитирование, могут асинхронно генерировать события на SCK и SDA, при этом ведущее устройство не может контролировать их разделение.
Слайд 68, стр. 25 из AN10216:
Хотя это, возможно, и не идеально, это то, что рекомендует Philips (моя версия документа от марта 2003 года). Телефонный кабель с витой парой.
КиранФ
КиранФ
Воутер ван Оойен
Полиномиальный
Полиномиальный
КиранФ
КиранФ
Воутер ван Оойен
Ник Алексеев
Полиномиальный