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?
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 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.
Kiteloopdesign
Benutzer152879
Bruce Abbott
Benutzer152879