Quelle adresse I2C dois-je choisir?

16

Maintenant, je sais que pour avoir une adresse I2C réservée, vous devez payer de l'argent aux gens I2C. Mais je ne veux pas faire ça.

Je demande des conseils sur l'adresse que je dois choisir pour mes MCU esclaves et maîtres sur mon projet. Il y aura également une EEPROM sur la carte. Je vais donc éviter d'utiliser l'adresse de l'EEPROM. Je prévois que le maître se connecte à une large gamme de capteurs, y compris des gyroscopes et des accéléromètres, et peut-être des dispositifs de mémoire supplémentaires. Y a-t-il des blocs d'adresses dont je devrais rester à l'écart? Je pensais simplement utiliser 0x00 pour le maître et 0x01 pour l'esclave, car ceux-ci semblent être rarement utilisés.

Une autre question: serait-ce une mauvaise idée de mélanger des appareils 10 bits et des appareils 7 bits sur le même bus? J'envisageais la possibilité de faire communiquer mes MCU avec un adressage 10 bits, mais uniquement en utilisant des adresses 7 bits pour les capteurs.

Thomas O
la source
1
@ W5VO. Oui, juste à côté de la carte SD, les gens ne veulent que 3000 $.
Thomas O
1
@ThomasO, vous n'avez pas besoin de les payer pour obtenir une adresse réservée, comme un identifiant, vous n'avez pas à payer cela pour fabriquer un appareil, ils vendent un service. SDcard ils font respecter leur propriété intellectuelle, ils peuvent vous dire de le faire ou choisir une technologie différente.
Kortuk
1
@ThomasO, je tenais à souligner qu'il y a quelque chose pour lequel vous payez dans ce cas. De plus, deux mille, ce n'est pas beaucoup dans un vrai produit.
Kortuk
1
@Thomas O 3 000 $ est en fait très raisonnable pour les produits. Il s'agit d'une goutte dans le seau pour toute entreprise fabriquant des produits.
Kellenjb
2
@reemrevnivek, mais le titulaire du brevet a choisi de préférer cela et de faire en sorte que le matériel ouvert ne soit pas en mesure de permettre l'utilisation, et d'exiger le paiement de cette redevance. en tant que titulaire du brevet, ils ont ce droit. Je suis, jusqu'à ce que les lois changent, je vais m'assurer que c'est clair. J'aimerais une révision des brevets et des droits d'auteur, mais jusqu'à ce qu'ils le soient, c'est ainsi que les ingénieurs qui ont de bonnes idées sont protégés et récompensés.
Kortuk

Réponses:

13

Tout d'abord, n'utilisez pas 0x00 et 0x01, ceux-ci sont réservés! Le tableau 3 de la spécification de bus I2C répertorie les adresses réservées (et les raisons pour lesquelles):

Adresse esclave R / W Description
 0000 000 0 Adresse d'appel générale
 0000 000 1 octet START
 0000 001 X adresse CBUS
 0000 010 X Réservé pour différents formats de bus
 0000 011 X Réservé à des fins futures
 0000 1XX X Code maître en mode Hs
 1111 1XX 1 ID d'appareil
 1111 Adressage esclave 0XX X 10 bits

Vous devez également éviter de 0x00 car cela n'a pas de transitions de bord et peut être une condition d'erreur (et il est difficile de déboguer).

A part ça, je dirais "Rendez-le simplement configurable". Si vous voulez pouvoir brancher une grande variété de capteurs, vous pouvez soit payer NXP pour une adresse, soit lui donner des adresses réglables. Les modifications logicielles doivent être évidentes si vous souhaitez distribuer le code source. Une option matérielle pour basculer un ou deux bits de votre adresse sélectionnée (cavaliers de soudure sur des broches numériques) est bon marché et facile, ou un réseau en échelle de résistances avec des cavaliers connectés à une broche A / D pourrait vous donner un contrôle complet sur le matériel.

Kevin Vermeer
la source
1
+1 pour l'adresse configurable. J'ai vu cela sur des esclaves qui auront plusieurs de la même chose sur le même bus.
Kellenjb
Oui, je pensais à des adresses configurables. Il pourrait être mis à jour en modifiant les paramètres du système de menus. Une chose importante est que des protections doivent être ajoutées pour empêcher quelqu'un de changer l'adresse et le MCU maître de perdre la communication avec l'esclave, donc un type de protocole doit être établi qui réinitialise les adresses (par exemple, après 5 secondes sans communication, réinitialisez donc l'adresse .)
Thomas O
16

Choisissez un appareil que vous n'utiliserez pas positivement dans votre conception et utilisez son adresse I2C. Par exemple, si vous n'aurez pas besoin d'un RTC, vous pouvez utiliser 0xA2 et 0xA3, qui sont utilisés par le NXP PCF8563 (et probablement d'autres RTC).

Stevenvh
la source
j'aime ça, très intelligent.
NickHalden
Malheureusement, certains appareils se heurtent toujours, par exemple le ST STCN75 et le TI DAC8571 ou le Microchip 24AA025E48 et le TI ADC121C027 .
Xcodo
10

Voici une liste des adresses attribuées à partir de 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF

Ils ne publient pas une liste complète avec ce raisonnement:

Q: Est-il possible de recevoir une liste de toutes les adresses esclaves I²C utilisées à ce jour?

R: Non. NXP Semiconductors ne publie pas cette liste de toutes les adresses esclaves précédemment attribuées, car c'est la seule façon dont nous pouvons garantir que la liste reste à jour et chaque adresse affectée est unique. Si cette liste était mise à disposition, les licenciés du bus I²C commenceraient à sélectionner eux-mêmes les adresses des esclaves et la liste centrale deviendrait bientôt incomplète, ce qui pourrait conduire à des conflits d'adresse. Le principe établi, qui fonctionne bien, est que chaque licencié envoie une demande d'adresse esclave à un seul contact au sein de NXP Semiconductors, qui attribue ensuite l'adresse esclave sur la base d'une seule liste maître.

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

Maintenant, si tout va être interne à votre projet, il n'y a aucune raison pour que vous ne puissiez pas sélectionner n'importe quelle adresse que vous voulez tant qu'elle n'entre pas en conflit avec tout ce que vous prévoyez de connecter.

Kellenjb
la source
Raisonnement étrange: en n'ayant pas de liste, ils s'assurent de maintenir la liste à jour ...: - /
Federico Russo
Raisonnement simple: ils veulent s'assurer que toute personne qui attribue des identifiants aura une liste vraiment à jour; avoir des copies obsolètes de la liste flottant autour de soi minerait cet objectif.
supercat
1
@Federico Ils ont une liste, ils ne la publient tout simplement pas pour que les gens soient obligés de les parcourir pour s'assurer que la liste est à jour. Si la liste était publiée, il y aurait des tonnes de gens qui choisiraient une adresse inutilisée, alors que se passe-t-il lorsque quelqu'un réserve correctement cette adresse?
Kellenjb
FWIW: SELGUIDE.PDF est dans le lien
HiTechHiTouch
1

Comme Kellenjb le dit, vous n'obtiendrez pas une liste complète des adresses des périphériques esclaves.

Cependant, il existe plusieurs adresses réservées que vous ne pouvez pas utiliser (0x00 par exemple est l'adresse d'appel générale).

La liste est ici

Mélanger l'adressage 10 et 7 bits est correct tant que les esclaves 7 bits obéissent à la norme I2C et ignorent les adresses 10 bits.

marque
la source