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.
Réponses:
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):
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.
la source
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).
la source
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:
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.
la source
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.
la source