Verwenden Sie den Pegel-Transceiver 74LCX245 für SPI / I²C

Ich muss die Pegel der SPI- und I²C- Busse eines 5-V-Mikrocontrollers in einen 3,3-V-Kartenleser und EEPROM -Speicher umwandeln, also habe ich mich für den 74LCX245 entschieden , da es sich um einen bidirektionalen Transceiver handelt.

Aber am Ende ist es nur unidirektional, weil Sie einen Stift setzen müssen, um ihm mitzuteilen, in welche Richtung die Ebenen übersetzt werden sollen.

Kann ich es trotzdem verwenden? Da SPI und I²C Datenleitungen haben, die zum Mikrocontroller führen müssen, betragen sie 3,3 V. Weil es "Mikrocontroller -> 74LCX245 -> Kartenleser" übersetzt, aber es gibt keine Möglichkeit, die von der Speicherkarte kommenden Daten zu verschieben mit dem gleichen Transceiver.

Mikrocontroller: PIC 18F2550

Gibt es eine Möglichkeit, dies zu tun? Verwenden Sie dasselbe Gerät oder sollte ich mit den N-Kanal-Transistoren enden?

Können Sie uns Teilenummern und Datenblätter von Mikrocontroller, Kartenleser und (E)EPROM geben?
Meistens kann ein 5-V-Chip einen 3,3-V-Bus lesen. Außerdem sind einige 3,3-V-Geräte „5-V-konform“, was bedeutet, dass es ihnen egal ist, ob Sie ihnen 5 V statt 3,3 V geben.
Könnten Sie PIC18LF2550 verwenden und die gesamte Schaltung mit 3,3 V versorgen?

Antworten (3)

Wie Sie bereits wissen, ist der 74LCX245 bidirektional, aber die Richtung muss mit einem Pin konfiguriert werden. Der I2C-Master würde also Logik benötigen, um den Pin von Senden auf Empfangen umzuschalten, wenn er mit dem Sprechen fertig ist, damit er die Bestätigung empfangen kann. Da Sie den I2C-Steuerblock nicht implementieren, sondern nur einen verwenden und die Signale, die die Sende-/Empfangsübergänge anzeigen, nicht freigeben, wird das Ansteuern dieses Sende-/Empfangsstifts schwierig, aber nicht nachweislich unmöglich.

Daher die Antwort auf Ihre Frage kann ich sie noch verwenden? ist ja, denke ich. Sie benötigen eine Schaltung, die zu erraten versucht, wann sich der Master in einem Sendezustand befindet. Dies kann erfolgen, indem SDA und SCL überwacht werden, um das Passieren der Start- und Stoppbedingungen zu erfassen, die im Wesentlichen anzeigen, dass der Master den Bus nimmt und den Bus freigibt. Wenn der Master sprechen möchte, wird er zuerst SDA niedrig ziehen. Grundsätzlich scheint es an dieser Stelle eine gute Idee zu sein, den 74LCX245 sofort auf Senden zu stellen. Was als nächstes kommt, ist der Taktflankenübergang, der den Start anzeigt. Aber Sie möchten den Durchgang des SDA-Pulldowns nicht verzögern, damit die Slave-Geräte eine klare Startbedingung erhalten. Wenn Sie später sehen, dass SDA hoch geht, während die Uhr ebenfalls hoch ist, ist dies eine Stoppbedingung.

Ein Problem besteht darin, dass der Chip nur einen einzigen globalen Pin zum Umkehren der Richtung aller seiner Leitungen hat. Sie möchten die Richtung der SCL-Leitung, die immer vom Master zu den Slaves geht, nicht ändern. Sie möchten die Uhr niemals drosseln, nicht einmal für einen Moment. Wenn Sie also darauf bestehen, nur den 74LCX245 zu verwenden, benötigen Sie zwei davon.

Eine weitere Überlegung ist, dass der Chip keine Open-Drain-Ausgänge hat, sondern gepufferte. Dies könnte auf zwei Arten ein Problem darstellen:

  • Wenn der 74LXC245 seinen Ausgang auf Low treibt, wird erwartet, dass der Ausgang den Strom von den Pulldown-Widerständen auf dem Bus ableitet. Glücklicherweise ist dies in Ordnung, da das Datenblatt ±50 mA als maximalen Ausgangsstrom für Quellen oder Senken auflistet.

  • Ein Problem tritt auf, wenn der 74LXC245 zum Senden konfiguriert ist und einen hohen Zustand auf den Bus treibt, während es passiert, dass ein Gerät den Bus herunterzieht und ebenfalls versucht zu senden. Der Puffer des Senders speist dann Strom direkt in den Drain des Geräts, der fast mit Masse kurzgeschlossen ist. Vielleicht könnte sich ein kleiner Widerstand dagegen wehren: groß genug, um den Strom zu begrenzen, aber klein genug, dass der Logikpegel ausreichend nahe an Null heruntergezogen werden kann (da dieser Widerstand mit dem Pulldown-Widerstand auf dem Bus gepaart wird, um den Boden zu bilden von ein Spannungsteiler).

  • In Bezug auf den vorherigen Punkt sollten Sie wahrscheinlich die globale Deaktivierung verwenden, die beide Seiten in High-ZIe versetzt, um festzustellen, wann der Bus vollständig im Leerlauf ist, und den Chip auszuschalten. Vor dem Erfassen, wann der Master senden möchte, sollte der Chip nicht im Empfangsmodus sein, da er dann den Drain des Masters treiben könnte. Idealerweise möchten Sie den Chip im bilateralen High-Z-Modus verwenden und von dort aus senden. Dann zum Empfangen (für die Antwort vom Gerät) und dann zurück zu High-Z.

RE: "SCL-Leitung, die immer vom Master zu den Slaves geht", dies gilt nicht in einem Multi-Master-System, und es gilt nicht, wenn der Slave Clock-Stretching implementiert (allerdings tun dies nicht sehr viele Slaves).
Gewählt wegen der vielen Bearbeitungen und dem ständigen Hinzufügen von Informationen. Außerdem haben Sie auf meine Frage verwiesen und erklärt, dass sie für meinen Zweck nicht nützlich sein würde.
Stimmt mit Photon überein: I2C braucht wirklich eine bidirektionale Verschiebung, da der Slave mit ziemlicher Sicherheit die Uhr nach dem Decodieren der Adresse strecken muss. Ebenso kann SPI nicht wirklich mit einem einzigen Konfigurations-Pin ausgeführt werden, da der Slave gleichzeitig an den Master sendet, während der Master an den Slave sendet.

Ich kenne keine Möglichkeit, einen 245er-Chip für die Pegelübersetzung für I2C zu verwenden. Wie Sie betonen, enthält I2C kein Signal, das zur Steuerung des DIRection-Pins des '245 verwendet werden kann.

Die kanonische Methode für die Übersetzung auf I2C-Ebene sieht in etwa so aus:

Geben Sie hier die Bildbeschreibung ein

Wenn die 5-V-Seite nach unten gezogen wird, wird die 3-V-Seite durch die Body-Diode des FET nach unten gezogen. Wenn die 3-V-Seite auf Low gezogen wird, arbeiten die FETs in einer Gate-gemeinsamen Konfiguration, um die 5-V-Seite auf Low zu ziehen. Die Auswahl der FETs ist ziemlich pingelig, also stecken Sie nicht einfach irgendwelche alten FETs ein, die Sie herumliegen haben.

Eine Google-Suche nach "I2C-Level-Übersetzer" liefert auch mehrere Treffer von NXP, TI, Maxim (und wahrscheinlich anderen), die zeigen, dass sie Chips speziell für diese Funktion herstellen. Diese Chips enthalten im Grunde die obige Schaltung mit einer "Beschleunigungs"-Schaltung, um das Erreichen höherer Busgeschwindigkeiten zu ermöglichen.

Ja, diese Lösung kenne ich bereits. Du verwechselst die Dinge. I2C legt die Übersetzungsrichtung nicht fest. Der 74LCX245 hat einen Pin, der anzeigt, in welche Richtung die Pegel übersetzt werden, nicht der I2C. Bitte überprüfen Sie meine Frage noch einmal.
@SeinOxygen, Der '245 hat einen Richtungseingangsstift . Es gibt nicht an, wie es übersetzt werden soll, es muss gesagt werden. Aber I2C hat keine Ausgabe, die Sie verwenden könnten, um es zu sagen.
So würde ich es machen, außer dass ich 2,2-kOhm-Pullups verwenden würde, um sicherzustellen, dass der I2C schnell genug für 400-kHz- oder 1-MHz-Frequenzen angesteuert wird.

Es gibt viele Methoden, um eine "Pegelkonvertierung" durchzuführen, und der Forenthread 3,3 Volt bis 5,5 Volt Oktal-TTL-Line-Pegelkonvertierung ist sehr nützlich.

Sie können einen Spannungsteiler verwenden, wenn Sie nicht viel Geschwindigkeit benötigen (ich weiß nicht, ob dies bei Ihnen funktioniert).