Hallo zusammen,
ich habe ein Nucleo-64 Board (STM32F411). Ich möchte (irgendwann mal eine Reihe von) Sensoren über SPI ansprechen. Dazu habe ich mir eine Platine gebaut, die die drei SPI-Bahnen SCLK, MOSI und MISO vom STM32 aufteilt (jede hat noch 100 Ohm in Reihe), und über die ich jeweils mit einem Flachbandkabel jeden Sensor nach belieben dran stecken kann. Jeder Sensor hat natürlich seinen eigenen SS-Pin.
Jetzt "scheitere" ich an: Sensor 1!
Zur Info, was vorher geschah: ich habe mir ein selbst zusammengebauten Controller (nennen wir ihn auch mal "Sensor") als SPI-Slave konfiguriert und kann erfolgreich nach Belieben alle Daten hin und her schieben. Beliebig oft und lange.
SPI funktioniert also erstmal über den STM32.
Jetzt klemme ich den ersten echten Sensor an: einen LSM6DS3, Breakout-Board von Sparkfun (Link). Davon habe ich ca. 3 Stk hier funktionsfähig, und auch schon teilweise erfolgreich in einer anderen Konfiguration eingesetzt. Bei allen drei Sensoren ist das Problem das gleiche.
Was jetzt passiert: ich frage das WHO_AM_I-Register ab, um zu überprüfen, ob er da ist.
Jedes Mal, wenn ich den Sensor anstecke, wird das Register erfolgreich ausgelesen. Nach mal 1s, mal 20s verweigert der LSM allerdings die Antwort. Dann aber auch für immer. Erst wenn ich den Sensor abziehe und wieder auf mein Board stecke, wird er wieder aktiv - erneut für 1-20s. Danach steigt er wieder aus.
Ich habe mir am Oszi alle Kanäle angeschaut: SS, SCLK und MOSI sind im erfolgreichen Betrieb identisch, wie in dem Fall, wenn der Sensor aussteigt - keine Qualitätseinbußen. Ich habe jetzt mal SCLK bei 500kHz und 1MHz getestet - das Verhalten ist bei beiden Taktraten identisch.
Diese Register frage ich im Full Duplex-Mode ab:
1) WHO_AM_I
2) Gyro_x_low-Byte
3) Gyro_x_high-Byte
4) Gyro_y_low-Byte
5) Gyro_y_high-Byte
6) Gyro_z_low-Byte
7) Gyro_z_high-Byte
Acc_x_low-Byte
9) Acc_x_high-Byte
...
13) Acc_z_high-Byte
14) 0x00 - dient nur zum Lesen des letzten Registers
Wenn der Sensor aussteigt, passiert es lediglich eher zufällig (gefühlt einer von 5 Abfrage-Sätzen, dass der MISO vom Sensor während Befehl 1 (WHO_AM_I) auf komplett low bleibt, genau ab dem Beginn von Befehl 2 (also mit dem ersten clk auf SCLK) komplett auf high geht und dort bleibt, bis der SS wieder deaktiviert wird).
Zugegeben, ich weiß nichtmal, was euch weiterhelfen könnte, um mir weiterzuhelfen.
Hat jemand von euch schonmal so ein Problem gehabt? Oder wenn ihr sagt, in welche Richtung ich schauen sollte, dann gebt mal Bescheid - dann stelle ich dann noch ein paar mehr Infos zur Verfügung.
Grüß, NRicola
Lesezeichen