Was bewirkt die Nutzung von NSS bei einem STM32 SPI-Slave?

OP #4877464
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
Gast #4878295
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.
OP #4878340
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.
#4878358
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".
Gast #4878402
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 ....
OP #4878694
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;
#4878718
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.

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