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
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.
SS beudeutet vermutlich Slave Select und N dass das Signal invertiert ist.
Ich mache kurz PullUp-Widerstände rein und teste dann nochmal. Danke für die Antwort.
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
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".
SPI-Einstellung: hspi3.Init.NSS = SPI_NSS_HARD_INPUT; Das mit dem "Pin nicht auf AF" hab ich nicht verstanden.
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 ....
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; |
/**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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.