Ist es möglich, SPI ohne Mikrocontroller in UART umzuwandeln?

Ich habe mich gefragt, ob ich SPI nur in diese Richtung in UART umwandeln soll, nicht umgekehrt, ohne einen Mikrocontroller oder eine Brücke zu verwenden.

Wenn synchron als ein besonderer Fall asynchroner Kommunikation angesehen werden kann, wäre es nicht irgendwie möglich, den Rx dazu zu bringen, nur die Eingabe zu lesen? (Zumindest in dem Fall, dass es sich um einen ununterbrochenen Bitfluss handelte.)

Natürlich sollte die Baudrate angepasst werden ... aber gibt es noch andere Einschränkungen, die ich vermisse?

Beifall!

Vorausgesetzt, das Ziel ist eine einfache byteweise Umwandlung, ist dies tatsächlich besser für eine Zustandsmaschine geeignet als für einen Computer mit gespeicherten Programmen. MCUs sind jedoch in kleinen Funktionseinheiten leichter verfügbar als programmierbare Logikstrukturen, und mehr Menschen sind mit der effizienten Entwicklung für sie vertraut. Die Dinge können am einfachsten sein, wenn die Ausgangsbaudrate um mehr als den Faktor der übertragenen Wortlänge über Nutzlastbits schneller ist als die Eingangsbaudrate.

Antworten (2)

Ja, wenn die SPI-Bitrate mit der UART-Bitrate übereinstimmt, die Sie generieren möchten, ist dies möglich.

Der SPI-Datenstrom muss sorgfältig aufgebaut werden:

  • SPI-Daten sind normalerweise MSB-first, aber UART-Daten sind normalerweise LSB-first, also müssen Sie die Bitreihenfolge in jedem der Datenbytes umkehren.
  • UART-Daten enthalten ein Startbit und ein Stoppbit, die jedes Byte einklammern, sodass Sie für jedes 8-Bit-Datenbyte, das Sie übertragen möchten, (mindestens) 10 Bits in den SPI-Datenstrom einfügen müssen. Eine einfache (aber ineffiziente) Möglichkeit, dies zu tun, besteht darin, Datenbytes mit Bytes von abzuwechseln 11111110.
Hübsch! Was ist, wenn ich die Art und Weise, wie der SPI-Datenstrom aufgebaut ist, nicht ändern kann? Wäre es noch möglich, die Informationen nach UART zu rekonstruieren?
Nein. Wenn Sie den SPI-Datenstrom nicht ändern können, müssen Sie ein SPI-Slave-Gerät konstruieren, das ihn so interpretieren kann, wie er ist. Der bei weitem einfachste Weg, dies zu tun, ist die Verwendung eines kleinen Mikrocontrollers. Warum schließt du das aus?
Ich darf das Gerät, das den SPI-Datenstrom generiert, nicht modifizieren. Ich hatte gehofft, die Notwendigkeit eines zusätzlichen Mikrocontrollers wegen Platz und Einfachheit zu vermeiden ... aber ich kann mir keine anderen Alternativen vorstellen! Sieht so aus, als würde es ein Mikro sein! Irgendwelche Vorschläge? Es wäre schön zu vermeiden, ein Board zu entwerfen und zu löten, aber auch ohne Arduino-ähnliche Boards zu verwenden.
Welche Art von physischem Gerät suchen Sie? Welche Art von Verbindungen zwischen Geräten? Passt es in das Originalgehege oder ist es ein eigenes Tier?
Das Gerät empfängt einen kontinuierlichen Strom von SPI-Daten und gibt ihn an UART aus. UART ist mit der Benutzeroberfläche verbunden, sodass es in beide Richtungen (Vollduplex) verwendet werden kann, um das von uns besprochene Gerät bei Bedarf zu konfigurieren. Größe ist ein Problem, es sollte klein sein (ein Arduino Micro ist bereits zu groß) und eine Baudrate von 115200 unterstützen. Der Energieverbrauch muss angemessen niedrig sein, aber das ist zweitrangig. Ansonsten fällt mir keine weitere Einschränkung ein...
"Ich hatte gehofft, den Bedarf eines zusätzlichen Mikrocontrollers wegen des Platzbedarfs und der Einfachheit zu vermeiden ..." Wollen Sie damit sagen, dass Sie keine kleinen und einfachen Dinge wollen? Denn so würde eine Mikrocontroller-Lösung aussehen. Arduino ist kein Mikrocontroller, es ist ein Entwicklungsboard, das unter anderem einen Mikrocontroller enthält (und Stiftleisten und Anschlüsse und Spannungsreglerversorgung und USB-Schnittstelle und ... . @Fran Wahrscheinlich wäre ein 8-Pin-ATtiny perfekt für den Arbeit.
Mit Einfachheit und Raum meine ich, nichts hinzuzufügen, deshalb die Hauptfrage!! Ich weiß, dass Arduino nicht nur das Mikro ist, aber ich kann nicht nur mit einem Mikro abbilden ... normalerweise benötigen Sie eine Platine und Anschlüsse und so weiter !! Wie auch immer, ich werde den winzigen Arduino überprüfen! Danke!
Richtig: Ich werde die ATtiny überprüfen
Zusätzliche Einschränkung: Die SPI-Daten müssen genau zum richtigen Zeitpunkt ausgetaktet werden. Für 'normale' SPI ist dies keine Voraussetzung, daher achtet eine normale SPI-Quelle wahrscheinlich nicht darauf.
In Ihrer ursprünglichen Frage sagten Sie, dies sei eine Übertragung in eine Richtung. Jetzt sagen Sie, dass es in beide Richtungen geht. Dies bedeutet, dass es ein übergeordnetes Protokoll gibt, mit dem der SPI-Master feststellt, ob eingehende Daten vorliegen. Sie müssen dieses Protokoll implementieren, vorausgesetzt, Sie haben eine angemessene Dokumentation darüber.
Nein, lassen Sie mich klarstellen ... Ich muss nur von SPI zu UART konvertieren, es ist ein Einwegprozess. Der SPI-Master erzeugt nur Ausgaben und erhält keine Eingaben. Wenn ich zufällig ein Zwischengerät verwenden würde, um diesen Vorgang durchzuführen, könnte ich UART in beide Richtungen verwenden, um dieses Gerät zu konfigurieren, da die UART-Seite gemäß meinen Anforderungen geändert werden kann. Aber Daten, die von UART kommen, müssen nicht an den SPI weitergeleitet werden. Eigentlich sollte es nicht, da ich nicht weiß, welche Folgen es haben könnte.
@WoutervanOoijen: Reden Sie von Flusskontrolle? Das OP hat bereits erklärt, dass es sich um einen "kontinuierlichen Strom" von SPI-Daten handelt, daher ist es selbstverständlich, dass die UART-Datenrate hoch genug sein muss, um Bedenken hinsichtlich der Flusssteuerung auszuräumen.
Bei UART müssen die Bitzellengrenzen zeitlich genau beabstandet sein, da der Empfänger nur auf der Grundlage der Zeit abtastet. Bei SPI besteht die einzige Anforderung darin, dass sich die Daten irgendwann zwischen den aktiven Taktflanken ändern müssen. Es besteht keine Anforderung an das genaue Timing dieser Datenänderungen (oder der Taktflanken). Daher ist es nicht unmöglich, dass ein SPI-Datenstrom verwendet werden könnte, um einen UART-Datenstrom zu fälschen, aber es ist alles andere als garantiert. (Nein, das hat nichts mit Flusskontrolle zu tun.)
@WoutervanOoijen: Ich dachte, es sei klar, dass wir weit über die Idee hinausgegangen sind, die SPI-Hardware zur Erzeugung eines UART-Signals zu verwenden - das OP hat erklärt, dass er den SPI-Master in keiner Weise ändern kann.
Nicht vom Lesen Ihrer Antwort, das war es, was ich kommentiert habe.

Es gibt kundenspezifische ICs, zum Beispiel diesen von NXP: http://www.nxp.com/products/interface_and_connectivity/bridges/i2c_spi_slave_to_uart_irda_gpio_bridges/series/SC16IS740_750_760.html

Sie haben wahrscheinlich eine darin versteckte MCU zum Puffern und Arbitrieren.

Danke! Ich habe eines davon, aber das Gerät ist mit SPI konfiguriert, und meine Hauptbeschränkung besteht darin, dass das SPI von einem System generiert wird, das ich in keiner Weise ändern kann.
Übrigens! Wissen Sie, ob es möglich wäre, eines davon über UART einzurichten? Das würde mein Problem lösen :-)