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

OP #4877464
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
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
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.
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
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 ....
Gast
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;
OP
/**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;
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.