PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] IMU über SPI antwortet nicht



NRicola
01.11.2017, 13:44
Hallo zusammen,

ich habe ein Problem mit dem Ansprechen eines 6-Achs-IMUs mit einem FPGA über SPI. Ich möchte Euch um Rat fragen, warum der Sensor nicht antworten könnte.

Die Fragen wären also:
1) Ist irgendwas an meinen auferlegten SPI-Signalen falsch?
2) Könnte der Sensor kaputt sein und wie ließe sich das überprüfen (ohne eine Vergleichsprogrammierung mit einem µC o.ä. aufzuziehen)?
3) Habe ich irgendwas beim Ansprechen/Konfigurieren des Sensors übersehen?

Der Aufbau:
Der IMU ist ein LSM6DS3 (Datenblatt: https://cdn.sparkfun.com/assets/learn_tutorials/4/1/6/DM00133076.pdf) auf einem Breakout-Board von Sparkfun (Hookup-Guide: https://learn.sparkfun.com/tutorials/lsm6ds3-breakout-hookup-guide).

Ich möchte den Sensor mit einem FPGA (SPI-Master) ansprechen. Das IMU-Board habe ich wie folgt verdrahtet:



Sensor

"verbunden mit"



GND
GND


3,3V
3,3V


SDA/SDI
MOSI (FPGA: out)


SCL
SCLK (FPGA: out)


SDO/SA0
MISO (FPGA: in)


CS
SS (FPGA: out)



Damit müsste die Verdrahtung wie in dem Hookup-Guide vorgeschlagen sein.
Am Breakout-Board habe ich die drei Pins des ADDR und die drei des PU_EN geöffnet (Vorschlag Hookup-Guide, Kapitel Jumper).

Meine Idee ist nun, Spannung auf FPGA und IMU zu geben. Auf Knopfdruck wird über MOSI das Byte "WHO_AM_I" (B"00001111") übertragen. Wenn ich das Datenblatt (z.B. auf S.41) richtig verstehe, kommt als Antwort B"01101001". An den Ausgängen des FPGA liegt (hoffentlich) das an, was in Kapitel 6.2.1 im Datenblatt des LSM6DS3 (S.35) beschrieben wird.

Das passiert:

Spannung wird auf alle Komponenten draufgegeben
FPGA wird geflasht
ich drücke den Taster
Es sind die im Bild gezeigten Signale zu beobachten

33004
(Die Signalqualität ist besser, als es hier wirkt; z.B. Flanken binnen 50ns.)
Wie man sieht, kommt auf MISO keine Antwort des Sensors.


Da man dem FPGA das komplette SPI beibringen muss, könnte auch meine Signalvorgabe falsch sein. Ich sehe allerdings nicht wo. Ich habe auch schon versucht MOSI zu invertieren (0=high). Es kommt auch dann keine Antwort.

Woran könnte das liegen? Wo könnte ich noch suchen und was könnte ich noch ausprobieren?
Vielen Dank für eure Hilfe!

Grüß,
NRicola

021aet04
01.11.2017, 22:54
Wenn ich das richtig sehe sendest du 5 high bits, nicht 4 (Daten werden bei rising edge übernommen).

MfG Hannes

NRicola
03.11.2017, 18:10
Hallo Hannes,

ertappt... Nach reichlich Debugging-Versuchen vergisst man irgendwann das zählen. Ich habe damit tatsächlich noch einen (gar nicht mal so alten) Bug beseitigt. Jetzt stimmt das Signal (wieder). Aber das Ergebnis bleibt leider das gleiche. :(
33010
Grüß,
NRicola

021aet04
03.11.2017, 19:00
Eigentlich sollte alles passen. Du kannst es mit einem uC testen, aber auch mit Tasten, allerdings benötigst du dann eine Entprellung. Du kannst auch einen uC nehmen und den Imu simulieren (z.b. wenn das Byte erkannt wurde eine Led anschalten und bei weiteren 8Taktzyklen ein Byte zurücksenden).

MfG Hannes

NRicola
05.11.2017, 14:35
Hi!

ich habe mich nun einen Schritt in Richtung Materialschlacht bewegt und einen anderen anderen (neuen) LSM6DS3 startklar für SPI gemacht - gleiches Breakout-Board. Das Ergebnis ist das gleiche. Beim Hookup Guide wird nochmal im Besonderen betont, dass der ADDR-Jumper für SPI geöffnet sein muss, da sonst kein MISO-Signal kommt. Ich habe das jetzt auch per Foto überprüft. Sieht eigentlich gut aus.
33020
Von daher bleibt meine Ratlosigkeit leider bestehen.
Hat noch jemand Ideen/Vorschläge?

Grüß,
NRicola

021aet04
05.11.2017, 16:19
Laut DB ist der SA0 Pin nur für die I2C Adresse relevant. Der Spi Mode sollte automatisch mit dem CS Pin aktiviert werden.

MfG Hannes

NRicola
05.11.2017, 19:23
Hallo Hannes,

ich konnte das Problem lösen. Hinweis gab mir die Problemlösung hier:
https://electronics.stackexchange.com/questions/264554/no-response-from-st-lsm6ds3-imu-breakout-board-using-spi

Fazit: zwar steht im Datenblatt auf S. 41 klar, dass man 00001111 übertragen muss. Auf S. 35 (Kap. 6.2.1) steht hingegen: wenn man etwas vom Sensor lesen möchte, muss das erste Bit 1 sein.
Wenn man also 10001111 überträgt, klappt es. Tricky...:rolleyes:

Hier der erfolgreiche Signalverlauf:
33022
Hab reichlichen Dank für deine Hilfe. Das hat gut über mein Motivationstief hinweg geholfen! :)

Grüß,
NRicola

021aet04
05.11.2017, 19:33
Hauptsache es funktioniert. :)

MfG Hannes