Теперь я знаю, что для того, чтобы зарезервировать для себя адрес I2C, нужно заплатить людям I2C немного денег. Но я не хочу этого делать.
Я прошу совета о том, какой адрес я должен выбрать для своего ведомого и основного MCU в моем проекте. На плате также будет EEPROM. Поэтому я буду избегать использования адреса EEPROM. Я планирую подключить мастер к широкому спектру датчиков, включая гироскопы и акселерометры и, возможно, дополнительные устройства памяти. Есть ли какие-либо блоки адресов, от которых мне следует избегать? Я думал о том, чтобы просто использовать 0x00 для ведущего устройства и 0x01 для ведомого, потому что они, кажется, используются редко.
Другой вопрос: было бы плохой идеей смешивать 10-битные и 7-битные устройства на одной шине? Я рассматривал возможность связи моих MCU с 10-битной адресацией, но только с использованием 7-битных адресов для датчиков.
Ответы:
Во-первых, не используйте 0x00 и 0x01, они зарезервированы! В таблице 3 спецификации шины I2C перечислены зарезервированные адреса (и причины этого):
Вы также должны избегать 0x00, потому что это не имеет краевых переходов и может быть ошибочным условием (и это трудно отладить).
Кроме этого, я бы сказал: «Просто сделайте его настраиваемым». Если вы хотите иметь возможность подключать самые разные датчики, вы можете либо заплатить NXP за адрес, либо присвоить ему настраиваемые адреса. Модификации программного обеспечения должны быть очевидны, если вы хотите распространять исходный код. Аппаратная опция для переключения одного или двух битов выбранного адреса (перемычки припоя на цифровых выводах) является дешевой и простой, или лестничная сеть резисторов с перемычками, подключенными к аналого-цифровому выводу, может дать вам полный контроль над оборудованием.
источник
Выберите устройство, которое вы не будете использовать в своем дизайне, и используйте его адрес I2C. Например, если вам не понадобится RTC, вы можете использовать 0xA2 и 0xA3, которые используются NXP PCF8563 (и, возможно, другими RTC).
источник
Вот список выделенных адресов по состоянию на 1999 год: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF
Они не выпускают полный список с этим рассуждением:
С http://www.nxp.com/products/interface_control/i2c/faq/
Теперь, если все будет внутренним для вашего проекта, нет причины, по которой вы не можете просто выбрать любой адрес, который хотите, если он не конфликтует с тем, что вы планируете подключить.
источник
Как говорит Kellenjb, вы не получите полный список адресов подчиненных устройств.
Однако есть несколько зарезервированных адресов, которые вы не можете использовать (например, 0x00 - это общий адрес вызова).
Список здесь
Смешивание 10 и 7-битной адресации хорошо, если 7-битные подчиненные подчиняются стандарту I2C и игнорируют 10-битные адреса.
источник