Verwirrt über die I2C-Adressierung in PCA8574/74A

Das Datenblatt für den NXP PCA8574/74A enthält folgende Zeile zur Adressierung (S.6):

Wenn AD2, AD1 und AD0 auf VDD oder VSS gehalten werden, wird dieselbe Adresse wie PCF8574 oder PCF8574A angelegt.

Ich fürchte, ich verstehe nicht, was hier gemeint ist. Kann bitte jemand aufklären?
Auch während Adressbereiche angegeben sind als (abhängig von den Eingängen AD0..AD2)

PCF8574: 0x20 - 0x27
PCF8574A: 0x38 - 0x3F

Sowohl der Text als auch Abb. 7 deuten darauf hin, dass die Geräteadresse zwischen 0x01 und 0x7F frei gewählt werden kann (obwohl ich nicht sehe, wie dies geschehen würde).

Alt-Text

Oder lese ich das falsch?

Antworten (1)

Das Datenblatt zeigt deutlich, dass es genau dort in Abschnitt 2 Punkt 7 "8 programmierbare Slave-Adressen mit 3 Adresspins" gibt. Mit anderen Worten, es gibt eine 7-Bit-Adresse, 4 dieser Bits sind für alle Chips gleich ( intern fest codiert ), und 3 davon (insbesondere Bits 0, 1 und 2) sind programmierbar, indem die Pin-Werte entweder auf Vss (GND) oder Vdd (dh 5 V) gesetzt (dh elektrisch verbunden ) werden. Wofür die oberen 4 Bits intern fest codiert sind, hängt vom verwendeten Chip ab - Tabelle 4 zeigt an, dass diese Bits A[6:3] = 0100 für den PCA8574 sind, und Tabelle 5 zeigt an, dass diese Bits A[6:3] sind. = 0111 für PCA8574A.

Um es deutlich zu machen, für den PCA8574 ist die niedrigste mögliche Adresse 010 0000 == 0x20 und die höchstmögliche Adresse 010 0111 == 0x27. Ebenso ist für den PCA8574A die niedrigstmögliche Adresse 011 1000 == 0x38 und die höchstmögliche Adresse 011 1111 == 0x3F.

Stimmt, und so werden I2C-Geräte normalerweise konfiguriert, aber Abbildung 7 legt nahe, dass A[6:3] alles zwischen 0000 und 1111 sein kann, und der Text sagt auch ausdrücklich, dass 111 1100 ausgeschlossen ist.
@stevenvh Abbildung 7 stellt lediglich die Bitreihenfolge (dh Bit 6 ist das höchstwertige Bit und Bit 0 ist das niedrigstwertige Bit und sollte von dem R/W-Flag gefolgt werden) in Bezug auf die Übertragung auf dem Bus fest. 111 1100 ist ausgeschlossen, da die einzigen zulässigen Adressen 011 1xxx und 010 0xxx sind. Die Ausnahmen für allgemeine Anrufe sind, dass sie vom Gerät einfach "nicht unterstützt" werden. Ich könnte nicht sagen, was an der Adresse 0b1111100 == 0x7C "besonders" ist, ich glaube nicht, dass es im I2C-Protokoll eine Bedeutung hat ... wahrscheinlich nur eine FYI des Herstellers, um diesen Wert bitte "vom Bus" zu halten.
@stevenvh Konservativ denke ich, dass sie sagen, dass Sie den PCA8574A nicht in einem System verwenden können, das (a) allgemeine Anrufe verwendet oder (b) ein anderes Gerät mit der Adresse 0x7C hat - da der PCA8574A diesen Zustand nicht tolerieren kann "aus irgendeinem Grund." Wenn der PCA8574A das einzige I2C-Gerät in Ihrem Bus ist, ist dies wahrscheinlich keine Einschränkung, die Sie interessiert.
@stevenvh: Diese Zahl 7 ist zumindest irreführend, wenn nicht gar falsch. Die Bildunterschrift besagt, dass es für den PCA8574/74A ist, aber für diese Chips sind nur die 3 niedrigeren Adressbits programmierbar, die höheren Bits sind fest. Also ist entweder die Auszeichnung, die die programmierbaren Bits umfasst, falsch, oder die Beschriftung sollte so etwas wie "allgemeine 7-Bit-I2C-Adresse" lauten.