in SPI, können MOSI und MISO miteinander verbunden werden?

Ich verwende einen Mikrocontroller der Serie 8051, und die Dokumentation besagt, dass, wenn ich den seriellen Modus 0 verwende, sein RXD-Pin als bidirektionaler Pin (sowohl Eingang als auch Ausgang) fungieren kann, während TXD ausschließlich eine Uhr ist.

Ich habe einen IC mit MOSI-, MISO- und Taktstiften. und ich verwende auch Multiplexer/Demultiplexer-ICs.

Ich möchte den RXD-Pin des Mikrocontrollers nutzen, damit ich nicht viele CPU-zeitraubende Bit-Banging-Routinen für jedes Gerät ausführen muss, das ich steuern möchte.

Ist es also akzeptabel, MOSI-, MISO- und RXD-Pins miteinander zu verbinden, oder sollte irgendwo ein Widerstand vorhanden sein?

Und ist es sicher, einen Ausgang eines Demultiplexers (Beispiel: 74hc151) an den RXD-Pin des 8051 und an einen Eingang eines Decoders (Beispiel: 74HC138) anzuschließen, oder sollte ich Widerstände verwenden?

Wenn Widerstände erforderlich sind, welche Werte würden Sie vorschlagen und warum?

Ich habe die Frage ein paar Mal gelesen, aber ich verstehe sie nicht, sorry. Ich bin verwirrt darüber, dass Sie über RXD und TXD sprechen und dann über MOSI und MISO von SPI. Ich denke, Sie sagen, dass RXD und TXD einige Pins auf dem uC sind, die als SPI-Ports verwendet werden können, ist das richtig? Vielleicht können Sie einen Schaltplan zur Verfügung stellen, der zeigt, was Sie tun möchten? Unabhängig von der Konfiguration macht es für mich keinen Sinn, warum Sie MOSI und MISO zusammen kurzschließen würden?
Ich habe gelesen, dass auf einem 8051-Chip (Beispiel: AT89C2051) das Setzen der seriellen Schnittstelle auf Modus Null dazu führt, dass TXD eine Uhr und RXD eine Daten-E / A ist und TXD es für jedes verarbeitete Bit austaktet. Seite 11 dieses Papiers erklärt es: libvolume6.xyz/medicalelectronics/btech/semester4/… , und ich möchte sie kurzschließen, damit ich Daten auf der seriellen Schnittstelle des 8051 im Schieberegistermodus empfangen kann.
Ok, ich werde diese Idee unter Berücksichtigung Ihres Links fortsetzen, aber ich denke, aus Sicherheitsgründen werde ich mir 1K-Widerstände ansehen.

Antworten (1)

Die Antwort ist "es kommt darauf an".

Wenn Ihr SPI-Slave seinen MISO-Pin in drei Zuständen anzeigt, wenn er nicht sendet, schadet es nicht, MISO und MOSI an eine MCU anzuschließen, die diese Funktion unterstützt. Ob der SPI-Slave dies tut oder nicht, sollte im Datenblatt des Geräts angegeben werden, aber wenn nicht, können Sie es selbst herausfinden:

  • Lassen Sie die MISO-Leitung von der MCU getrennt
  • Verbinden Sie die MISO-Leitung mit zwei Widerständen, einen mit + V und einen mit GND
  • Der tatsächliche Wert der Widerstände spielt keine Rolle. Sie sollten denselben Wert haben, und jeder Wert zwischen 1k und 10k wäre für dieses Experiment in Ordnung.
  • Verbinden Sie einen Kanal eines Oszilloskops mit der MISO-Leitung und einen anderen Kanal mit der MOSI- oder CS#-Leitung.

Lassen Sie nun Ihre MCU eine normale SPI-Transaktion mit dem Gerät durchführen, auf die das Gerät reagieren würde. Was Sie suchen, ist der MISO-Signalpegel, während die MCU an das Gerät sendet. Aufgrund des Widerstandsvorspannungsnetzwerks sollte die MISO-Leitung ungefähr auf der Hälfte des Versorgungspegels liegen. Abhängig vom Gerät und der Toleranz Ihrer Widerstände kann es etwas mehr oder weniger sein, aber Sie sollten etwas sehen, das nicht +V und nicht GND ist, wenn das Gerät seine MISO-Leitung dreifach angibt.

Wenn sich die MISO-Leitung an einer der Schienen befindet und dann mit dem Umschalten beginnt, wenn das Gerät antwortet, ist das Gerät kein guter Kandidat zum Kombinieren von MISO- und MOSI-Leitungen. Dies liegt daran, dass das Gerät die MISO-Leitung aktiv ansteuert, wenn es nicht spricht. Dies ist nicht falsch, da SPI ein Vollduplex-Kommunikationssystem ist und jede Richtung ihr eigenes physikalisches Signal hat. Das Gerät erwartet, das einzige treibende Element in diesem Netz zu sein, also tut es das Richtige, indem es einen Signalpegel aufrechterhält.

Wenn jedoch die MISO-Leitung mehr oder weniger auf halbem Weg zwischen den Schienen sitzt und dann nur auf die Schienen umschaltet, wenn sie ihre Antwort sendet, dann ist dieses Gerät in der Lage, seine MISO- und MOSI-Leitungen miteinander zu verbinden. Das Datenblatt kann erwähnen, dass ein Pull-up- oder Pull-down-Widerstand auf der MISO-Leitung verwendet werden sollte, was ein weiterer Hinweis darauf ist, dass dies ein Gerät ist, das in der Lage ist, die MISO- und MOSI-Leitungen miteinander zu verbinden.

Nun, um etwas anzusprechen, was Sie gesagt haben:

Ich möchte den RXD-Pin des Mikrocontrollers nutzen, damit ich nicht viele CPU-zeitraubende Bit-Banging-Routinen für jedes Gerät ausführen muss, das ich steuern möchte.

Ich erkenne, dass Sie einen 8051 verwenden, aber selbst dann ist es schwer zu glauben, dass Ihre MCU viel tun wird, während die SPI-Transaktion aktiv ist. Wenn Sie keine riesigen Datenblöcke übertragen, Ihr SPI-Peripheriegerät hundelangsam ist oder Ihr spezieller 8051 einen erstaunlichen seriellen Anschluss hat, haben Sie zwischen den Bytes wahrscheinlich nur sehr wenig Zeit, um irgendetwas zu tun. Sogar der schnellste 8051s-Takt bei etwa 50 MHz, was auch für die meisten SPI-Slaves ungefähr die maximale SPI-Taktfrequenz ist. Selbst wenn Ihr spezifischer 8051 eine Anweisung pro Takt ausführen kann, erhalten Sie nicht mehr als 8-48 Anweisungen pro Byte, die über SPI übertragen werden (vorausgesetzt, Ihr SPI-Port arbeitet mit 6-50 MHz). Es ist unwahrscheinlich, dass Sie viel Zeit oder Energie sparen, wenn Sie das Peripheriegerät verwenden.

Was meinst du mit "erstaunlicher" serieller Schnittstelle? eine, die mit hoher Geschwindigkeit überträgt? Nun, ich könnte die serielle Schnittstelle auch im manuellen Modus konfigurieren, wo ich ein Programm schreiben kann, um das Bit mit superlangsamer Geschwindigkeit umzuschalten und das Bit mit langsamer Geschwindigkeit zurückzulesen, aber wenn ich es tatsächlich lesen kann, indem ich es durch richte seriell (Modus 0), das würde ich lieber tun.
Was ich damit meine ist, wenn Sie ein einfaches SPI-Peripheriegerät haben, werden Sie nach jedem Byte unterbrochen, damit Sie das nächste Byte an das Peripheriegerät weiterleiten können. Wenn Sie jedoch die Möglichkeit haben, einen ganzen Puffer anzugeben oder DMA zu verwenden, sind dies „erstaunlichere“ SPI-Peripherieimplementierungen, mit denen Sie andere Arbeiten erledigen können, während der Datenpuffer für Sie ausgetaktet wird.