Forum: Mikrocontroller und Digitale Elektronik Was bewirkt die Nutzung von NSS bei einem STM32 SPI-Slave?


von Volker K. (vokuit00)


Lesenswert?

Hallo,

ich versuche gerade raus zu finden was bei einem STM32 SPI-Slave die 
Nutzung von NSS als Hardware-Input bewirkt. Ich hab schon in vielen 
Dokumenten von STM gesucht, dort ist immer die Master-Seite mit NSS gut 
dokumentiert, aber über den Slave findet man nicht viel.

Also hab ich ein bisschen experimentiert. Ich hätte erwartet, dass ohne 
negative Flanke an NSS nie ein SPI-Empfang statt findet. Macht er aber. 
Ich kann das CS-Signal am NSS-Pin komplett ausstecken und es werden 
trotzdem Daten empfangen. Finde ich erst Mal seltsam.

Ein bisschen Veränderung findet man, wenn man beginnt die SPI zu stören. 
Mit NSS-Nutzung fängt sie sich in der Regel wieder, ohne meistens nicht.

Weiss jemand hier genaueres?

Danke
Vokuit00

von STMApprentice (Gast)


Lesenswert?

Volker K. schrieb:
> Ich kann das CS-Signal am NSS-Pin komplett ausstecken und es werden
> trotzdem Daten empfangen. Finde ich erst Mal seltsam.

Ausstecken heisst bei dir vermutlich: den Pin floaten lassen.
Der bekommt schon durch seine Offenheit mal ein Low-Signal.
Und schon ist der Slave aktiv.

Überleg dir mal eine bessere Variante für "Ausstecken". Sowohl
für die Wortwahl als auch für die Technik die dahinter steckt.

von Abimon (Gast)


Lesenswert?

SS beudeutet vermutlich Slave Select und N dass das Signal invertiert 
ist.

von Volker K. (vokuit00)


Lesenswert?

Ich mache kurz PullUp-Widerstände rein und teste dann nochmal.

Danke für die Antwort.

von Volker K. (vokuit00)


Lesenswert?

Hab es gerade getestet, auch mit Pullup-Widerständen empfängt er munter 
weiter Daten über die SPI wenn ich den NSS "ausstecke". Dann ist er 
durch den Pullup ja definiert auf HIGH und dürfte nichts mehr empfangen.

Und Ausstecken passt im Moment sehr gut als Wortwahl. Ich habe zwei 
STM-Boards nebeneinander über Einzelsteckverbinder verbunden und 
versuche die SPI so hinzubekommen, dass sie sich durch nichts aus dem 
Takt bringen lässt.
Dazu stecke ich dann zum Test den einen oder anderen Steckverbinder aus 
und schaue was passiert.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Volker K. schrieb:
> Hab es gerade getestet, auch mit Pullup-Widerständen empfängt er munter
> weiter Daten über die SPI wenn ich den NSS "ausstecke". Dann ist er
> durch den Pullup ja definiert auf HIGH und dürfte nichts mehr empfangen.

Das solltest Du lieber mal mit 'nem Multimeter prüfen.

Andere Ideen: Pin nicht auf AF, oder NSS im SPI Peripherial ist nicht 
"scharf".

von Volker K. (vokuit00)


Lesenswert?

SPI-Einstellung:

hspi3.Init.NSS = SPI_NSS_HARD_INPUT;

Das mit dem "Pin nicht auf AF" hab ich nicht verstanden.

von STMApprentice (Gast)


Lesenswert?

Volker K. schrieb:
> Dann ist er
> durch den Pullup ja definiert auf HIGH und dürfte nichts mehr empfangen.

Dann gibt es ja noch die Möglichkeit ihn (den NSS) soft oder
hard zu konfigurieren. Ich nehme jetzt mal an dass der STM nur
im Soft-Modus immer empfängt, im Hardware Modus dagegen nur
wenn der NSS low ist ....

von Stefan (Gast)


Lesenswert?

Volker K. schrieb:
> Das mit dem "Pin nicht auf AF" hab ich nicht verstanden.

Damit ist sowas hier gemeint:
1
GPIO_InitStructure.Mode         = GPIO_MODE_AF_PP;
2
...
3
GPIO_InitStructure.Alternate    = GPIO_AF5_SPI4;
4
GPIO_InitStructure.Pin          = NSS_PIN | SDI_PIN;

von Volker K. (vokuit00)


Lesenswert?

/**SPI3 GPIO Configuration
    PA4     ------> SPI3_NSS
    PC10     ------> SPI3_SCK
    PC11     ------> SPI3_MISO
    PC12     ------> SPI3_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

und er ist als NSS Hard eingestellt:

hspi3.Init.NSS = SPI_NSS_HARD_INPUT;

von Christoph (gizmo)


Lesenswert?

Hab mir gerade mal die Ref Manuals zum F103 und F303 angeschaut weils 
mich auch interessiert hat, und dort steht wirklich nicht viel.

Im F303 Manual steht dies hier unter Communication Diagrams:
The slave starts to control MISO line as NSS is active and SPI is 
enabled, and is disconnected from the line when one of them is released.

Hört sich so an als würde der Slave immer empfangen und nur das Senden 
hängt vom NSS Pin ab. Kommt mir etwas komisch vor, aber du kannst ja mal 
schauen ob das der Fall ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.