Какой адрес I2C мне выбрать?

16

Теперь я знаю, что для того, чтобы зарезервировать для себя адрес I2C, нужно заплатить людям I2C немного денег. Но я не хочу этого делать.

Я прошу совета о том, какой адрес я должен выбрать для своего ведомого и основного MCU в моем проекте. На плате также будет EEPROM. Поэтому я буду избегать использования адреса EEPROM. Я планирую подключить мастер к широкому спектру датчиков, включая гироскопы и акселерометры и, возможно, дополнительные устройства памяти. Есть ли какие-либо блоки адресов, от которых мне следует избегать? Я думал о том, чтобы просто использовать 0x00 для ведущего устройства и 0x01 для ведомого, потому что они, кажется, используются редко.

Другой вопрос: было бы плохой идеей смешивать 10-битные и 7-битные устройства на одной шине? Я рассматривал возможность связи моих MCU с 10-битной адресацией, но только с использованием 7-битных адресов для датчиков.

Томас О
источник
1
@ W5VO. Да, прямо рядом с SD-картой люди, желающие только 3000 долларов.
Томас О
1
@ TomasO, вам не нужно платить им, чтобы получить зарезервированный адрес, например, идентификатор, вам не нужно платить за создание устройства, они продают услугу. SDcard они защищают свою интеллектуальную собственность, они могут сказать вам сделать это или выбрать другую технологию.
Кортук
1
@ TomasO, я подчеркивал, что в этом случае вы платите за что-то. Кроме того, две тысячи не так много в реальном продукте.
Кортук
1
@Thomas O $ 3000 на самом деле очень разумно для продуктов. Это капля в море для любой компании, производящей продукцию.
Kellenjb
2
@reemrevnivek, но владелец патента решил, что они скорее потребуют этого и заставят open-hardware не иметь возможности использовать его, и потребуют уплаты этого сбора. как владелец патента, они имеют это право. Я, пока законы не изменятся, собираюсь убедиться, что это ясно. Я хотел бы пересмотреть патент и авторское право, но пока они не будут, это то, как инженеры, у которых есть хорошие идеи, защищены и вознаграждены.
Кортук

Ответы:

13

Во-первых, не используйте 0x00 и 0x01, они зарезервированы! В таблице 3 спецификации шины I2C перечислены зарезервированные адреса (и причины этого):

Slave addr R / W Описание
 0000 000 0 Общий телефонный адрес
 0000 000 1 байт СТАРТ
 0000 001 X CBUS адрес
 0000 010 X Зарезервировано для другого формата шины
 0000 011 X Зарезервировано для будущих целей
 0000 1XX X Hs-основной код режима
 1111 1XX 1 идентификатор устройства
 1111 0XX X 10-битная подчиненная адресация

Вы также должны избегать 0x00, потому что это не имеет краевых переходов и может быть ошибочным условием (и это трудно отладить).

Кроме этого, я бы сказал: «Просто сделайте его настраиваемым». Если вы хотите иметь возможность подключать самые разные датчики, вы можете либо заплатить NXP за адрес, либо присвоить ему настраиваемые адреса. Модификации программного обеспечения должны быть очевидны, если вы хотите распространять исходный код. Аппаратная опция для переключения одного или двух битов выбранного адреса (перемычки припоя на цифровых выводах) является дешевой и простой, или лестничная сеть резисторов с перемычками, подключенными к аналого-цифровому выводу, может дать вам полный контроль над оборудованием.

Кевин Вермеер
источник
1
+1 для настраиваемого адреса. Я видел это на рабах, которые будут иметь несколько одинаковых вещей в одном автобусе.
Kellenjb
Да, я думал о настраиваемых адресах. Его можно обновить, изменив настройки из системы меню. Одна важная вещь заключается в том, что необходимо добавить меры предосторожности, чтобы не допустить, чтобы кто-то изменил адрес, а главный MCU потерял связь с ведомым устройством, поэтому необходимо установить какой-то протокол, который сбрасывает адреса (например, через 5 секунд нет связи, поэтому сбросьте адрес .)
Томас О
16

Выберите устройство, которое вы не будете использовать в своем дизайне, и используйте его адрес I2C. Например, если вам не понадобится RTC, вы можете использовать 0xA2 и 0xA3, которые используются NXP PCF8563 (и, возможно, другими RTC).

stevenvh
источник
мне это нравится, очень умно
NickHalden
К сожалению, некоторые устройства все еще конфликтуют, например ST STCN75 и TI DAC8571 или Microchip 24AA025E48 и TI ADC121C027 .
Xcodo
10

Вот список выделенных адресов по состоянию на 1999 год: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Они не выпускают полный список с этим рассуждением:

В: Можно ли получить список всех адресов I²C-slave, используемых на сегодняшний день?

A: Нет. NXP Semiconductors не выпускает этот список всех ранее назначенных подчиненных адресов, так как это единственный способ гарантировать, что список обновляется и каждый назначенный адрес уникален. Если бы этот список был доступен, лицензиаты I2C-шины сами начали бы выбирать подчиненные адреса, и центральный список вскоре стал бы неполным, что могло привести к конфликтам адресов. Установленный принцип, доказавший свою работоспособность, заключается в том, что каждый лицензиат отправляет запрос адреса подчиненного устройства одному контакту в NXP Semiconductors, который затем назначает адрес подчиненного устройства на основе одного основного списка.

С http://www.nxp.com/products/interface_control/i2c/faq/

Теперь, если все будет внутренним для вашего проекта, нет причины, по которой вы не можете просто выбрать любой адрес, который хотите, если он не конфликтует с тем, что вы планируете подключить.

Kellenjb
источник
Странные рассуждения: не имея списка, они следят за тем, чтобы поддерживать этот список в актуальном состоянии ...: - /
Федерико Руссо
Простые рассуждения: они хотят, чтобы у каждого, кто выделяет идентификаторы, был актуальный список; устаревшие копии этого списка могут подорвать эту цель.
суперкат
1
@Federico У них есть список, они просто не публикуют его, поэтому люди вынуждены просматривать его, чтобы убедиться, что список обновлен. Если бы список был опубликован, было бы множество людей, которые выбирают неиспользуемый адрес, тогда что произойдет, если кто-то правильно зарезервирует этот адрес?
Келленжб,
FWIW: SELGUIDE.PDF находится в Internet Archive ссылке
HiTechHiTouch
1

Как говорит Kellenjb, вы не получите полный список адресов подчиненных устройств.

Однако есть несколько зарезервированных адресов, которые вы не можете использовать (например, 0x00 - это общий адрес вызова).

Список здесь

Смешивание 10 и 7-битной адресации хорошо, если 7-битные подчиненные подчиняются стандарту I2C и игнорируют 10-битные адреса.

отметка
источник