STM32 SPI - Wozu dieses NSS?

#1701147
Lesenswert?

Hi,

ich bin grad am studieren der SPI Beschreibung im Reference Manual für 
den STM32.

So weit so gut, abgesehen, dass sie full duplex und bidirectional 
wechselseitig verwenden.

Was sich mir allerdings überhaupt nicht erschließt, ist dieser NSS Pin, 
bzw. wieso man wenn man diesen nicht verwendet, ein NSS Bit setzen muss 
oder hab ich das falsch verstanden. Beim SPI auf den AVRs gibts das ja 
gar nicht.

Liebe Grüße
Tom
#1701182
Lesenswert?

@PRX: Ich hab beim AVR gar keinen SS verwendet, wenn ich mich da richtig 
erinnere. Ich brauch doch nur CLK, MOSI, MISO und CS um einen Slave 
anzusprechen. wozu dann noch SS?

Full duplex != bidirektional

Ja genau, daher ist mir bis jetzt noch nicht ganz klar was ST da genau 
meint.

Full duplex ist doch auf jeden fall immer bidirektional, andersherum 
nicht zwingend.

Tom
#1701188
Lesenswert?

Thomas Burkhart schrieb:

> @PRX: Ich hab beim AVR gar keinen SS verwendet, wenn ich mich da richtig
> erinnere. Ich brauch doch nur CLK, MOSI, MISO und CS um einen Slave
> anzusprechen. wozu dann noch SS?

SS = CS. Aber auch beim AVR heisst dieser Pin SS, nur die dran hängenden 
Devices sagen oft CS dazu. Und CLK heisst normalerweise SCK. Man kann 
auch über die eigenen Füsse stoplern.

> Full duplex ist doch auf jeden fall immer bidirektional, andersherum
> nicht zwingend.

Full duplex geht schlecht mit einer einzigen Datenleitung. 
"Bidirektional" meint hier, dass die gleiche Leitung mal in die eine mal 
in die andere Richtung überträgt. Also half duplex, was ST simplex 
nennt.
#1701357
Lesenswert?

HI,
naja so HALB ist das alles wahr.
Der NSS Pin kann auch von der Hardware automatisch gesetzt werden, mit 
der geeigneten Einstellung. Allerdings hat der Modus in meinem STM32 
noch nen Bug(älteres Modell).

--> SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
-->SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

Gruß
#1701376
Lesenswert?

Jean Player schrieb:

> Der NSS Pin kann auch von der Hardware automatisch gesetzt werden, mit
> der geeigneten Einstellung. Allerdings hat der Modus in meinem STM32
> noch nen Bug(älteres Modell).

Wie ST sich das wirklich gedachte hatte kann ich der Doku dazu nicht 
sauber entnehmen. Es wird zwar ein Hardware-Modus erwähnt, in dem der 
Pin als Ausgang definiert wird, dummerweise widersprechen sich dabei 
aber die Teile der Doku gegenseitig. Von einer automatischen 
Aktivierung/Deaktivierung steht allerdings nirgends etwas. Die einzig 
dokumentierte Automatik ist der Fallback in den Slave-Modus, abhängig 
vom NSS-Pin, was mit Multi-Master-Betrieb zu tun hat.

Klar scheint aber auf Basis entsprechender Diskussionen im STM32-Forum, 
dass man im Master-Modus die SS/CS-Funktion vom SPI manuell steuern 
muss. Ob man dafür den NSS-Pin oder einen anderen verwendet, ist egal. 
Wer es anders versuchte fiel auf die Nase. Und darauf bezog ich mich 
hier im Thread.

Ob das mit Bugs zu tun hat, mit Dokumentations-, Implementierungs oder 
Denkfehler weiss ich nicht. Jedenfalls ist die letzte öffentliche Doku 
(STM32F100 Reference) dazu nicht signifikant anders als die ältere und 
die Errata-Sheets erwähnen keinen Bug dazu.

Wenn du die ganze Wahrheit dazu kennst, immer raus damit. Grad im 
DMA-Betrieb wäre eine automatische Deaktivierung nach erfolgtem Transfer 
recht hilfreich.
#1701978
Lesenswert?

A. K. schrieb:
> Wie ST sich das wirklich gedachte hatte kann ich der Doku dazu nicht
> sauber entnehmen. Es wird zwar ein Hardware-Modus erwähnt, in dem der
> Pin als Ausgang definiert wird, dummerweise widersprechen sich dabei
> aber die Teile der Doku gegenseitig. Von einer automatischen
> Aktivierung/Deaktivierung steht allerdings nirgends etwas. Die einzig
> dokumentierte Automatik ist der Fallback in den Slave-Modus, abhängig
> vom NSS-Pin, was mit Multi-Master-Betrieb zu tun hat.

Richtig.

> Klar scheint aber auf Basis entsprechender Diskussionen im STM32-Forum,
> dass man im Master-Modus die SS/CS-Funktion vom SPI manuell steuern
> muss. Ob man dafür den NSS-Pin oder einen anderen verwendet, ist egal.
> Wer es anders versuchte fiel auf die Nase. Und darauf bezog ich mich
> hier im Thread.

Nicht ganz, der Select funzt. Allerdings bleibt der Pin danach für immer 
Low und muss per Hand zurück gesetzt werden. Das Beispiel Programm in 
der Firmware Lib (Spi->DMA) funktioniert zum Beispiel, aber wie gesagt, 
der Deselect leider nicht.

> Ob das mit Bugs zu tun hat, mit Dokumentations-, Implementierungs oder
> Denkfehler weiss ich nicht. Jedenfalls ist die letzte öffentliche Doku
> (STM32F100 Reference) dazu nicht signifikant anders als die ältere und
> die Errata-Sheets erwähnen keinen Bug dazu.

Ja, mit dem Bug hat ja auch leider niemand von den Herren im ST Forum zu 
gegeben. Es sollte nur in späteren Revisions erfolgen, das der NSS 
ordentlich funktioniert. Ist jetzt mittlerweile glaube ich 1 1/2 Jahre 
her und es scheint sich noch nix ergeben zu haben. Oder ?

> Wenn du die ganze Wahrheit dazu kennst, immer raus damit. Grad im
> DMA-Betrieb wäre eine automatische Deaktivierung nach erfolgtem Transfer
> recht hilfreich.

Tja leider weiss ich auch nur das oben beschriebene. Das Deselect muss 
per Hand geschehen ;-(
Ich wollte auch nur hinweisen, das es auch so funktioniert, damit keine 
Halbwahrheiten im WIKI stehen.

Gruß
#1702200
Lesenswert?

Jean Player schrieb:

> Nicht ganz, der Select funzt. Allerdings bleibt der Pin danach für
> immer Low und muss per Hand zurück gesetzt werden.

Dass da was automatisch aktiviert wird war mir entgangen, danke, aber im 
üblichen ausschliesslichen Master-Mode bringt das ziemlich wenig, denn 
das vordere Ende vom Transfer hat man sowieso unter Kontrolle, nur am 
hinteren Ende hätte das wirkliche Vorteile.

> ordentlich funktioniert. Ist jetzt mittlerweile glaube ich 1 1/2 Jahre
> her und es scheint sich noch nix ergeben zu haben. Oder ?

Wie gesagt, der F100 ist taufrisch, seine separate Referenz ebenfalls, 
und die ist an dieser Stelle fast identisch. Da die Doku zudem nirgends 
eine automatische Deaktivierung erwähnt nehme ich an, dass ST das 
schlicht unter "works as designed" abbucht, nicht unter "bug".
#2569068
Lesenswert?

Folgendes Szenario :

Zwei Stm32F101 sollen über SPI kommunizieren.

Einer als Master ,der andere entsprechend Slave.
Bei dem Slave "Board" habe ich NSS entsprechend verbunden.
Ist es nun problematisch das NSS des Slave mit dem NSS des Master STM 
ohne Widerstand zu verbinden ? Bzw. macht es sinn ? Oder sollte ich 
besser das NSS des Slave mit einem anderen I/O des Master STM verbinden 
?

Brauche ich einen Pull-Up am NSS oder geschieht dies (wenn implementiert 
) intern ?

Vielen Dank !

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren