Qual endereço I2C devo escolher?

16

Agora eu sei que, para ter um endereço I2C reservado para você, você precisa pagar algum dinheiro ao pessoal do I2C. Mas eu não quero fazer isso.

Estou pedindo conselhos sobre o endereço que devo escolher para meus escravos e MCUs principais no meu projeto. Também haverá uma EEPROM no quadro. Portanto, evitarei usar o endereço da EEPROM. Eu pretendo que o mestre se conecte a uma ampla gama de sensores, incluindo giroscópios e acelerômetros, e talvez dispositivos de memória adicionais. Existem blocos de endereços dos quais devo ficar longe? Eu estava pensando em usar apenas 0x00 para o mestre e 0x01 para o escravo, porque esses parecem ser raramente usados.

Outra pergunta: seria uma má idéia misturar dispositivos de 10 bits e dispositivos de 7 bits no mesmo barramento? Eu estava considerando a possibilidade de meus MCUs se comunicarem com o endereçamento de 10 bits, mas apenas usando endereços de 7 bits para sensores.

Thomas O
fonte
11
@ W5VO. Sim, bem ao lado das pessoas do cartão SD que querem apenas US $ 3.000.
Thomas O
11
@ ThomasO, você não precisa pagá-los para obter um endereço reservado, como um identificador, não precisa pagar para fazer um dispositivo, eles estão vendendo um serviço. Se eles estão aplicando sua propriedade intelectual, eles podem pedir para você fazer isso ou escolher uma tecnologia diferente.
Kortuk
11
@ThomasO, eu estava afirmando que há algo pelo qual você está pagando neste caso. Além disso, dois mil não são muito em um produto real.
Kortuk
11
@ Thomas O $ 3.000 é realmente muito razoável para produtos. Esta é uma gota no balde para qualquer empresa que fabrica produtos.
Kellenjb
2
@reemrevnivek, mas o detentor da patente optou por exigir isso e fazer com que o hardware aberto não possa permitir o uso, além de pagar esta taxa. como detentor da patente, eles têm esse direito. Até que as leis mudem, vou garantir que isso fique claro. Gostaria de revisar as patentes e os direitos autorais, mas até que sejam, é assim que os engenheiros que têm boas idéias são protegidos e recompensados.
Kortuk

Respostas:

13

Primeiro, não use 0x00 e 0x01, eles são reservados! A Tabela 3 da Especificação do barramento I2C lista os endereços reservados (e os motivos):

Descrição do escravo R / W
 0000 000 0 Endereço geral da chamada
 0000 000 1 byte START
 0000 001 endereço X CBUS
 0000 010 X Reservado para diferentes formatos de barramento
 0000 011 X Reservado para fins futuros
 0000 1XX X código mestre do modo Hs
 1111 1XX 1 ID do dispositivo
 1111 0XX X endereçamento escravo de 10 bits

Você também deve ficar longe de 0x00 porque isso não tem transições de borda e pode ser uma condição de erro (e é difícil depurar).

Fora isso, eu diria "Basta configurá-lo". Se você quiser conectar uma ampla variedade de sensores, poderá pagar ao NXP por um endereço ou fornecer endereços ajustáveis. As modificações de software devem ser óbvias se você deseja distribuir o código fonte. Uma opção de hardware para alternar um ou dois bits do endereço selecionado (jumpers de solda nos pinos digitais) é barata e fácil, ou uma rede de resistores com jumpers conectados a um pino A / D pode oferecer controle total no hardware.

Kevin Vermeer
fonte
11
+1 para endereço configurável. Eu já vi isso em escravos que terão várias coisas iguais no mesmo ônibus.
Kellenjb
Sim, eu estava pensando em endereços configuráveis. Pode ser atualizado alterando as configurações do sistema de menus. Uma coisa importante é que salvaguardas precisam ser adicionadas para evitar que alguém altere o endereço e o MCU mestre perca a comunicação com o escravo, portanto é necessário estabelecer algum tipo de protocolo que redefina os endereços (por exemplo, após 5 segundos não há comunicação, redefinir o endereço .)
Thomas O
16

Escolha um dispositivo que você não usará positivamente em seu design e use o endereço I2C. Por exemplo, se você não precisar de um RTC, poderá usar 0xA2 e 0xA3, que são usados ​​pelo NXP PCF8563 (e provavelmente outros RTCs).

stevenvh
fonte
Eu gosto disso, muito esperto.
NickHalden
Infelizmente, alguns dispositivos ainda estão em conflito, por exemplo, o ST STCN75 e o TI DAC8571 ou o Microchip 24AA025E48 e o TI ADC121C027 .
Xcodo 28/01
10

Aqui está uma lista de endereços alocados em 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Eles não divulgam uma lista completa com este raciocínio:

P: É possível receber uma lista de todos os endereços de escravos I²C usados ​​até hoje?

R: Não. A NXP Semiconductors não emite esta lista de todos os endereços escravos atribuídos anteriormente, pois é a única maneira de garantir que a lista permaneça atualizada e que cada endereço atribuído seja único. Se essa lista fosse disponibilizada, os licenciados do barramento I²C começariam a selecionar os endereços de escravos e a lista central logo ficaria incompleta, o que poderia levar a conflitos de endereço. O princípio estabelecido, comprovadamente funcionando bem, é que cada licenciado envia uma solicitação de endereço escravo para um único contato dentro da NXP Semiconductors, que depois aloca o endereço escravo com base em uma única lista mestre.

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

Agora, se tudo for interno ao seu projeto, não há motivo para que você não possa simplesmente selecionar qualquer endereço que desejar, desde que não entre em conflito com o que planeja conectar.

Kellenjb
fonte
Raciocínio estranho: por não ter uma lista, eles garantem manter a lista atualizada ...: - /
Federico Russo
Raciocínio simples: eles desejam garantir que qualquer pessoa que aloque IDs tenha uma lista realmente atualizada; ter cópias desatualizadas da lista flutuando prejudicaria esse objetivo.
Supercat
11
@Federico Eles têm uma lista, eles simplesmente não a publicam, para que as pessoas sejam forçadas a examiná-las para garantir que a lista esteja atualizada. Se a lista foi publicada, haveria toneladas de pessoas que escolheriam endereços não utilizados, o que acontece quando alguém reserva esse endereço corretamente?
Kellenjb
FWIW: SELGUIDE.PDF está no link
HiTechHiTouch 10/18/18
1

Como Kellenjb diz, você não terá uma lista completa de endereços de dispositivos escravos.

No entanto, existem vários endereços reservados que você não pode usar (0x00, por exemplo, é o endereço de chamada geral).

A lista está aqui

A mistura de endereços de 10 e 7 bits é boa, desde que os escravos de 7 bits obedeçam ao padrão I2C e ignorem os endereços de 10 bits.

Marca
fonte