Jetzt weiß ich, dass Sie den I2C-Leuten etwas Geld bezahlen müssen, um eine I2C-Adresse für sich zu reservieren. Aber ich möchte das nicht tun.
Ich bitte um Rat, welche Adresse ich für meine Slave- und Master-MCUs in meinem Projekt wählen soll. Es wird auch ein EEPROM auf der Platine sein. Daher vermeide ich die Verwendung der Adresse des EEPROM. Ich plane, dass der Master eine breite Palette von Sensoren, einschließlich Gyros und Beschleunigungssensoren, und möglicherweise zusätzliche Speichergeräte anschließt. Gibt es Adressblöcke, von denen ich Abstand halten sollte? Ich dachte daran, nur 0x00 für den Master und 0x01 für den Slave zu verwenden, da diese scheinbar selten verwendet werden.
Eine andere Frage: Wäre es eine schlechte Idee, 10-Bit-Geräte und 7-Bit-Geräte am selben Bus zu mischen? Ich dachte über die Möglichkeit nach, dass meine MCUs mit 10-Bit-Adressierung kommunizieren, aber nur 7-Bit-Adressen für Sensoren verwenden.
Antworten:
Verwenden Sie zuerst nicht 0x00 und 0x01, diese sind reserviert! In Tabelle 3 der I2C-Busspezifikation sind die reservierten Adressen aufgeführt (und die Gründe dafür):
Sie sollten auch 0x00 meiden, da dies keine Flankenübergänge hat und möglicherweise eine Fehlerbedingung ist (und das Debuggen schwierig ist).
Ansonsten würde ich sagen "Mach es einfach konfigurierbar." Wenn Sie in der Lage sein möchten, eine Vielzahl von Sensoren anzuschließen, können Sie entweder NXP für eine Adresse bezahlen oder einstellbare Adressen vergeben. Softwaremodifikationen sollten offensichtlich sein, wenn Sie den Quellcode verteilen möchten. Eine Hardware-Option zum Umschalten von ein oder zwei Bits Ihrer ausgewählten Adresse (Lötbrücken an digitalen Pins) ist billig und einfach, oder ein Kontaktplannetz von Widerständen mit an einen A / D-Pin angeschlossenen Jumpern kann Ihnen die vollständige Kontrolle über die Hardware geben.
quelle
Wählen Sie ein Gerät aus, das Sie eindeutig nicht in Ihrem Design verwenden, und verwenden Sie dessen I2C-Adresse. Wenn Sie beispielsweise keine RTC benötigen, können Sie 0xA2 und 0xA3 verwenden, die vom NXP PCF8563 (und wahrscheinlich auch von anderen RTCs) verwendet werden.
quelle
Hier ist eine Liste der zugewiesenen Adressen ab 1999: http://www.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF
Sie veröffentlichen keine vollständige Liste mit dieser Begründung:
Von http://www.nxp.com/products/interface_control/i2c/faq/
Wenn nun alles projektintern sein soll, gibt es keinen Grund, warum Sie nicht einfach eine Adresse auswählen können, die Sie möchten, solange sie mit nichts in Konflikt steht, das Sie verbinden möchten.
quelle
Wie Kellenjb sagt, erhalten Sie keine vollständige Liste der Slave-Geräteadressen.
Es gibt jedoch mehrere reservierte Adressen, die Sie nicht verwenden können (0x00 ist beispielsweise die allgemeine Anrufadresse).
Die Liste ist hier
Das Mischen von 10- und 7-Bit-Adressen ist in Ordnung, solange die 7-Bit-Slaves dem I2C-Standard entsprechen und 10-Bit-Adressen ignorieren.
quelle