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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Volker K. (vokuit00)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
SS beudeutet vermutlich Slave Select und N dass das Signal invertiert 
ist.

von Volker K. (vokuit00)


Bewertung
0 lesenswert
nicht lesenswert
Ich mache kurz PullUp-Widerstände rein und teste dann nochmal.

Danke für die Antwort.

von Volker K. (vokuit00)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
SPI-Einstellung:

hspi3.Init.NSS = SPI_NSS_HARD_INPUT;

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

von STMApprentice (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 S. (gizmo)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.