Kann der SS-Pin niedrig gebunden werden, wenn nur ein SPI-Gerät verwendet wird?

8

Ich habe online gelesen, dass zum Starten einer SPI-Transaktion mit einem SPI-unterstützten Gerät die SS-Leitung (Slave Select, auch bekannt als Chip Select) für die gesamte Transaktion auf niedrig gesetzt und am Ende der Transaktion auf hoch gesetzt werden muss. Wenn ich eine Verbindung herstelle, die nur ein SPI-Gerät enthält, muss ich dann den SS-Leitungssendebefehl senken und dann jedes Mal die SS-Leitung erhöhen, oder kann ich die SS-Leitung niedrig binden und unbegrenzt Befehle senden? Das Gerät, das ich benutze, ist ISD1700 Soundchip .

Nick Alexeev
quelle
3
Im Allgemeinen ja, der SS-Pin informiert das Slave-Gerät, wann die Transaktion beginnt und endet. Ohne sie gibt es nichts, was sicherstellen könnte, dass es synchron bleibt. Es mag funktionieren, aber wenn es jemals nicht mehr synchron ist, wird es es nicht wiedererlangen.
Kevin White
4
@kevinWhite Tatsächlich benötigen viele SPI-Geräte diesen SS-Übergang, um eine interne Zustandsmaschine zu starten. Das Datenblatt für Ihr bestimmtes Gerät sollte Ihnen die Antwort geben, aber wenn Sie es bereits haben, warum versuchen Sie es nicht?
Akohlsmith
1
@akohlsmith - Ich stimme zu, ich sage, dass Sie die SS brauchen, nicht, dass Sie ohne sie davonkommen können. Selbst Geräte, für die keine internen Vorgänge erforderlich sind, können nicht mehr mit dem Master synchronisiert sein. Der einzige Hersteller, der die Verwendung des SS empfohlen hat, ist Analog Devices für einige seiner Geräte, bei denen den Pins mehrere Funktionen zugewiesen sind, sodass der SS möglicherweise nicht verfügbar ist. Ich sehe nicht, wie zuverlässig das sein kann, und ich habe Beschwerden gehört, bei denen das Gerät zurückgesetzt werden muss, um wieder synchron zu werden.
Kevin White
Ich stimme @akohlsmith zu. Und wenn Sie die Frage beantworten möchten, werde ich abstimmen. Hier ist mein Argument: Ich kommuniziere regelmäßig mit einem Gerät über SPI. Es gibt jedoch eine Interrupt-gesteuerte Funktion, für die auch das SPI für dasselbe Gerät erforderlich ist. Mit dem SS-Pin sollte ich in der Lage sein, die aktuelle SPI-Transaktion zu unterbrechen, ohne sie zu beenden. Ermöglicht mir einen schnelleren Zugriff auf das SPI-Gerät, wenn der Interrupt gewartet wird.
st2000

Antworten:

14

[@Kevin und @akohlsmith sollten ihre Kommentare als Antworten veröffentlichen.
Dies dient dazu, ihre Kommentare zu erweitern. ]]

SPI 1 schreibt nicht das genaue Verhalten der SS vor (Slave-Auswahlzeile 2 ). Dieses Verhalten hängt von der Implementierung jedes einzelnen Geräts ab. Ich habe Geräte gesehen, die mit der SS arbeiten können. Ich habe auch Geräte gesehen, die fallende und steigende Flanken auf der SS erfordern.

Obwohl nicht ausdrücklich darauf hingewiesen wird, dass die SS umgeschaltet werden muss , heißt es
im Entwurfshandbuch (S. 31) , dass die SS die SPI-Transaktion startet und beendet. Es wäre vernünftig anzunehmen, dass SS umgeschaltet werden muss, damit die SPI-Transaktion erfolgreich ist.

1 SPI ist eher eine Gewohnheit als ein Standard.
2 CS (Chip Select) ist ein anderer Name für Slave Select.

Nick Alexeev
quelle
6
Dies ist eine sehr gute Antwort. Viele / Die meisten SPI-Zielgeräte sind vollständig von der SPI_CS-Leitung abhängig, um die bitinterne Zustandsmaschine innerhalb des Teils zu initialisieren und zwischen dem Initiator und den Zielgeräten zu synchronisieren. Es gibt einige Geräte, die eine erneute Synchronisierung durchführen können, indem sie Synchronisierungs- oder Opcode-Muster im laufenden Betrieb auf der MOSI-Signalleitung erkennen. Diese sind jedoch in der Minderheit, und jedem, der ein System mit SPI-Geräten entwirft, wird empfohlen, jedem Zielgerät ein SPI_CS bereitzustellen, auch wenn dies die Verwendung zusätzlicher Schaltkreise und / oder GPIOs mit dem Initiatorgerät bedeutet, um diese Funktion bereitzustellen.
Michael Karas
Sie müssen keine weitere Antwort hinzufügen, Ihre erfasst, was @kevinwhite und ich gesagt haben. :-)
Akohlsmith
5

Es hängt ganz vom Slave-Gerät ab.

Wenn das Protokoll für das Slave-Gerät eine Art Framing enthält, sei es mit Paketen fester Länge, Start / Stopp-Bytes oder einem Header, der die Paketlänge angibt, kann das Slave-Gerät möglicherweise ohne Chipauswahl arbeiten. Ich habe einen SPI-Flash-Speicherchip auf der Platine, an dem ich gerade arbeite, der mit oder ohne Chipauswahl vollkommen zufrieden zu sein scheint. Es kann ohne Probleme dauerhaft an 0 V (aktiviert) angeschlossen werden.

Dies verursachte uns tatsächlich einige Probleme, da ein Auftragnehmer einige der Low-Level-E / A einschließlich des SPI eingerichtet hatte und wir (und sie!) Nicht realisierten, dass die Chipauswahl nicht funktionierte. Erst als ich ihre SPI-Arbeit erweitern musste, um ein weiteres SPI-Gerät auf demselben Bus hinzuzufügen, stellte ich fest, dass wir keine Chip-Auswahl hatten!

Umgekehrt benötigen viele Slave-Geräte Chipauswahl, um die Daten zu rahmen, und das Senden von mehr Bits / Bytes als das erwartete Paket, ohne die Chipauswahl am Ende freizugeben, wird als ungültige Übertragung angesehen und zurückgewiesen. DACs laden häufig den neuen Wert auf den Ausgang der Chipauswahl-Anstiegsflanke. In ähnlicher Weise verwenden ADCs häufig die SPI-Übertragung, um die Konvertierung zu starten (und manchmal auch zu planen), sodass sie die fallende Flanke der Chipauswahl als Auslöser benötigen.

Ihr Datenblatt sagt eigentlich nichts darüber aus, wie Sie Ihren bestimmten Chip über SPI fahren können, und ich bin nicht motiviert genug, ihn zu googeln. Übung für den Leser übrig ...;)

Graham
quelle
Ich werde nur SS niedrig binden und beten, dass es funktioniert, da das Datenblatt für das Gerät, das ich aus dem Internet erhalten habe, nur besagt, dass (gemäß der Pin-Definitionstabelle im Datenblatt) SS verwendet wird, um das Gerät zu aktivieren. Es heißt auch, dass sich die anderen SPI-Leitungen in einem hochohmigen Zustand befinden, wenn SS hoch ist. Daumen drücken.
@ Mike Ich habe heute Morgen eine gewisse Motivation entdeckt und "ISD1700" gegoogelt. Die ersten beiden Links waren zwei PDF-Dateien. Das erste war das Datenblatt, mit dem Sie verlinkt haben. und die zweite war die Konstruktionsanleitung, die genau sagt, wie der Chip angetrieben wird. In der Entwurfsanleitung heißt es (Abschnitt 10.2, Seite 31): "Eine SPI-Transaktion wird an der fallenden Flanke des SS ~ -Pins initiiert." Nein, das Datenblatt besagt, dass Sie mit dem, was Sie planen, nicht durchkommen können. Und ich möchte hier nicht zu snarky sein, aber wenn Sie JFGI hätten und die beiden wichtigsten Links gelesen hätten, hätten Sie Ihre eigene Frage beantworten können.
Graham
3

Ohne etwas Spezifisches über das SPI-Slave-Gerät zu wissen, können Sie SS nicht einfach niedrig binden.

Viele Geräte verwenden die Vorderkante von SS, um ihre interne Logik auf den Start einer neuen Transaktion zurückzusetzen. Beispielsweise könnten Speicher die ersten zwei Bytes als Adresse und nachfolgende Bytes als Daten interpretieren. Einige Speicher führen den physischen Schreibvorgang erst durch, wenn SS deaktiviert ist.

Bei einigen Geräten mit dem richtigen Protokoll können Sie möglicherweise damit durchkommen. Es funktioniert jedoch nicht mit den meisten Geräten da draußen.

Olin Lathrop
quelle
Einige Jahre zu spät. Und ich bin hier, weil ich auch nach Antworten gesucht habe. Sehr gute Informationen, die Sie Olin hinzugefügt haben, und auch gute Informationen von anderen. Ich denke, das Problem lag hauptsächlich in der Interpretation der Wörter "Chip Select" oder "Slave Select". Wenn man gezwungen wäre, etwas anzunehmen, würde die Annahme einfach bedeuten, dieses Gerät zu aktivieren und alle anderen Slave-Geräte auszuschalten, die es sonst könnten die Kommunikation zwischen Slave und Master stören. Eine faire und logische "Annahme". Es ist schön, dass dieses Thema hier in diesem Thread geklärt wird.
Kenny
Eine weitere folgende Frage aus diesem Thema könnte sein: ----- Wenn der Chipauswahl- / Chipfreigabepin nicht dauerhaft aktiviert werden soll, wann genau sollte das SPI-Slave-Gerät aktiviert und deaktiviert werden? Beispiel: Deaktivieren wir das Slave-Gerät nach Abschluss jedes an den Slave gesendeten Befehls?
Kenny