Quale indirizzo I2C dovrei scegliere?


16

Ora so che per avere un indirizzo I2C riservato a te stesso devi pagare un po 'di soldi alle persone I2C. Ma non voglio farlo.

Sto chiedendo consigli su quale indirizzo dovrei scegliere per i miei MCU slave e master nel mio progetto. Ci sarà anche una EEPROM sul tabellone. Quindi eviterò di utilizzare l'indirizzo della EEPROM. Pianifico che il master si colleghi a una vasta gamma di sensori, inclusi giroscopi e accelerometri, e forse dispositivi di memoria aggiuntivi. Ci sono blocchi di indirizzi di cui dovrei stare alla larga? Stavo pensando di usare solo 0x00 per il master e 0x01 per lo slave, perché quelli sembrano essere usati raramente.

Un'altra domanda: sarebbe una cattiva idea mescolare dispositivi a 10 bit e dispositivi a 7 bit sullo stesso bus? Stavo considerando la possibilità di far comunicare le mie MCU con indirizzamento a 10 bit, ma utilizzando solo indirizzi a 7 bit per i sensori.


1
@ W5VO. Sì, proprio accanto alla scheda SD le persone vogliono solo $ 3.000.
Thomas O

1
@ThomasO, non è necessario pagarli per ottenere un indirizzo riservato, come un identificatore, non è necessario pagare questo per creare un dispositivo, stanno vendendo un servizio. SDcard stanno facendo rispettare la loro proprietà intellettuale, possono dirti di farlo o scegliere una tecnologia diversa.
Kortuk,

1
@ThomasO, stavo sottolineando che c'è qualcosa per cui stai pagando in questo caso. Inoltre, duemila non sono molto in un prodotto reale.
Kortuk,

1
@ Thomas O $ 3.000 è in realtà molto ragionevole per i prodotti. Questa è una goccia nel secchio per qualsiasi azienda che produce prodotti.
Kellenjb,

2
@reemrevnivek, ma il detentore del brevetto ha scelto che avrebbero preferito richiederlo e impedire all'hardware aperto di non essere in grado di consentirne l'uso e richiedere il pagamento di questa tassa. in quanto titolare del brevetto, hanno quel diritto. Sono, fino a quando le leggi cambieranno, per assicurarmi che sia chiaro. Vorrei una revisione dei brevetti e dei diritti d'autore, ma fino a quando lo sono, è così che gli ingegneri che hanno buone idee vengono protetti e premiati.
Kortuk,

Risposte:


13

Innanzitutto, non usare 0x00 e 0x01, quelli sono riservati! La tabella 3 delle specifiche del bus I2C elenca gli indirizzi riservati (e i motivi per cui):

Descrizione slave R / W
 0000 000 0 Indirizzo di chiamata generale
 0000000 1 byte di START
 0000 001 X indirizzo CBUS
 0000 010 X Riservato per diversi formati di bus
 0000 011 X Riservato per scopi futuri
 0000 1XX X Codice master in modalità Hs
 1111 1XX 1 ID dispositivo
 1111 0XX X Indirizzamento slave a 10 bit

Dovresti anche stare alla larga da 0x00 perché non ha transizioni sui bordi e potrebbe essere una condizione di errore (ed è difficile eseguire il debug).

A parte questo, direi "Renderlo configurabile". Se vuoi essere in grado di collegare una vasta gamma di sensori, puoi pagare NXP per un indirizzo o dargli indirizzi regolabili. Le modifiche al software dovrebbero essere ovvie se si desidera distribuire il codice sorgente. Un'opzione hardware per attivare uno o due bit dell'indirizzo selezionato (jumper di saldatura su pin digitali) è economica e semplice, oppure una rete ladder di resistori con jumper collegati a un pin A / D potrebbe darti il ​​controllo completo dell'hardware.


1
+1 per l'indirizzo configurabile. Ho visto questo sugli schiavi che avranno molte delle stesse cose sullo stesso bus.
Kellenjb,

Sì, stavo pensando a indirizzi configurabili. Potrebbe essere aggiornato modificando le impostazioni dal sistema di menu. Una cosa importante è che è necessario aggiungere protezioni per evitare che qualcuno cambi l'indirizzo e che l'MCU master perda la comunicazione con lo slave, quindi è necessario stabilire un tipo di protocollo che ripristini gli indirizzi (ad es. Dopo 5 secondi non c'è comunicazione, quindi resettare l'indirizzo .)
Thomas O

16

Scegli un dispositivo che non utilizzerai positivamente nel tuo design e usa il suo indirizzo I2C. Ad esempio, se non avrai bisogno di un RTC, puoi usare 0xA2 e 0xA3, che sono usati da NXP PCF8563 (e probabilmente altri RTC).


mi piace questo, molto intelligente.
NickHalden,

Purtroppo alcuni dispositivi continuano a scontrarsi, ad esempio ST STCN75 e TI DAC8571 o Microchip 24AA025E48 e TI ADC121C027 .
Xcodo,

10

Ecco un elenco di indirizzi assegnati a partire dal 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Non rilasciano un elenco completo con questo ragionamento:

D: È possibile ricevere un elenco di tutti gli indirizzi I²C-slave utilizzati finora?

R: No. NXP Semiconductors non pubblica questo elenco di tutti gli indirizzi slave assegnati in precedenza, poiché questo è l'unico modo in cui possiamo garantire che l'elenco rimanga aggiornato e che ciascun indirizzo assegnato sia univoco. Se questo elenco fosse reso disponibile, i licenziatari del bus I²C inizierebbero a selezionare da soli gli indirizzi slave e l'elenco centrale diventerebbe presto incompleto, il che potrebbe portare a conflitti di indirizzo. Il principio stabilito, che ha dimostrato di funzionare bene, è che ogni licenziatario invia una richiesta di indirizzo slave a un singolo contatto all'interno di NXP Semiconductors, che quindi alloca l'indirizzo slave in base a un unico elenco principale.

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

Ora, se tutto sarà interno al tuo progetto, non c'è motivo per cui non puoi semplicemente selezionare qualsiasi indirizzo che desideri purché non sia in conflitto con qualcosa che prevedi di connetterti.


Strano ragionamento: non avendo una lista si assicurano di mantenerla aggiornata ...: - /
Federico Russo

Ragionamento semplice: vogliono garantire che chiunque assegni gli ID disponga di un elenco veramente aggiornato; avere copie obsolete dell'elenco che fluttuava avrebbe minato tale obiettivo.
supercat

1
@Federico Hanno un elenco, semplicemente non lo pubblicano in modo che le persone siano costrette ad esaminarli per assicurarsi che l'elenco sia aggiornato. Se l'elenco fosse pubblicato ci sarebbero tonnellate di persone che scelgono un indirizzo inutilizzato, cosa succede quando qualcuno si riserva tale indirizzo?
Kellenjb,

FWIW: SELGUIDE.PDF si trova nel collegamento
HiTechHiTouch,

1

Come dice Kellenjb, non otterrai un elenco completo degli indirizzi dei dispositivi slave.

Tuttavia, esistono diversi indirizzi riservati che non è possibile utilizzare (0x00, ad esempio, è l'indirizzo di chiamata generale).

L'elenco è qui

La miscelazione dell'indirizzamento a 10 e 7 bit va bene purché gli slave a 7 bit rispettino lo standard I2C e ignorino gli indirizzi a 10 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.