Welche I2C-Adresse soll ich wählen?

16

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.

Thomas O.
quelle
1
@ W5VO. Ja, direkt neben der SD-Karte wollen die Leute nur 3.000 Dollar.
Thomas O
1
@ThomasO, Sie müssen sie nicht bezahlen, um eine reservierte Adresse zu erhalten, wie eine Kennung. Sie müssen sie nicht bezahlen, um ein Gerät herzustellen. Sie verkaufen einen Service. SD-Karte erzwingen sie ihr geistiges Eigentum, sie können Sie dazu auffordern oder eine andere Technologie wählen.
Kortuk
1
@ThomasO, ich habe darauf hingewiesen, dass Sie in diesem Fall für etwas bezahlen. Zweitausend ist auch nicht viel in einem echten Produkt.
Kortuk
1
@ Thomas O $ 3.000 ist eigentlich sehr vernünftig für Produkte. Dies ist ein Tropfen auf den heißen Stein für jedes Unternehmen, das Produkte herstellt.
Kellenjb
2
@reemrevnivek, aber der Patentinhaber entschied, dass er dies eher verlangen würde, und veranlasste Open-Hardware, die Nutzung nicht zuzulassen und diese Gebühr zu zahlen. als Patentinhaber haben sie dieses Recht. Ich werde sicherstellen, dass dies klar ist, bis Gesetze geändert werden. Ich würde gerne die Patente und Urheberrechte überarbeiten, aber bis dahin werden Ingenieure mit guten Ideen auf diese Weise geschützt und belohnt.
Kortuk

Antworten:

13

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):

Slave-Adr. R / W Beschreibung
 0000 000 0 Allgemeine Anrufadresse
 0000 000 1 START-Byte
 0000 001 X CBUS-Adresse
 0000 010 X Reserviert für unterschiedliche Busformate
 0000 011 X Für zukünftige Zwecke reserviert
 0000 1XX X Hs-Modus Mastercode
 1111 1XX 1 Geräte-ID
 1111 0XX X 10-Bit-Slave-Adressierung

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.

Kevin Vermeer
quelle
1
+1 für konfigurierbare Adresse. Ich habe dies bei Sklaven gesehen, die mehrere gleiche Dinge im selben Bus haben werden.
Kellenjb
Ja, ich habe über konfigurierbare Adressen nachgedacht. Sie kann durch Ändern der Einstellungen im Menüsystem aktualisiert werden. Eine wichtige Sache ist, dass Schutzmaßnahmen hinzugefügt werden müssen, um zu verhindern, dass jemand die Adresse ändert und die Master-MCU die Kommunikation mit dem Slave verliert. Daher muss eine Art Protokoll eingerichtet werden, das die Adressen zurücksetzt (z. B. nach 5 Sekunden hat keine Kommunikation eine solche Adresse zurückgesetzt) .)
Thomas O
16

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.

stevenvh
quelle
Ich mag das, sehr klug.
NickHalden
Leider stoßen einige Geräte immer noch aufeinander , beispielsweise der ST STCN75 und der TI DAC8571 oder der Microchip 24AA025E48 und der TI ADC121C027 .
Xcodo
10

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:

F: Ist es möglich, eine Liste aller bisher verwendeten I²C-Slave-Adressen zu erhalten?

A: Nein. NXP Semiconductors gibt diese Liste nicht mit allen zuvor zugewiesenen Slave-Adressen aus, da nur so gewährleistet werden kann, dass die Liste auf dem neuesten Stand ist und jede zugewiesene Adresse eindeutig ist. Wenn diese Liste zur Verfügung gestellt würde, würden I²C-Bus-Lizenznehmer Slaveadressen selbst auswählen und die zentrale Liste würde bald unvollständig, was zu Adresskonflikten führen könnte. Das bewährte Prinzip besteht darin, dass jeder Lizenznehmer eine Slave-Adressanforderung an einen einzelnen Kontakt innerhalb von NXP Semiconductors sendet, der die Slave-Adresse dann anhand einer einzelnen Master-Liste zuweist.

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.

Kellenjb
quelle
Seltsame Überlegungen: Da sie keine Liste haben, sorgen sie dafür, dass die Liste auf dem neuesten Stand ist ...: - /
Federico Russo
Einfache Argumentation: Sie möchten sicherstellen, dass jeder, der IDs zuweist, eine wirklich aktuelle Liste hat. Veraltete Kopien der Liste würden dieses Ziel untergraben.
Supercat
1
@ Federico Sie haben eine Liste, sie veröffentlichen sie nur nicht, so dass die Leute gezwungen sind, sie zu durchsuchen, um sicherzustellen, dass die Liste auf dem neuesten Stand ist. Wenn die Liste veröffentlicht würde, würde es Unmengen von Leuten geben, die eine unbenutzte Adresse auswählen. Was passiert dann, wenn jemand diese Adresse richtig reserviert?
Kellenjb
FWIW: SELGUIDE.PDF ist im Internet Archive Link
HiTechHiTouch
1

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.

Kennzeichen
quelle