Wenn ich das richtig sehe sendest du 5 high bits, nicht 4 (Daten werden bei rising edge übernommen).
MfG Hannes
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/lear...DM00133076.pdf) auf einem Breakout-Board von Sparkfun (Hookup-Guide: https://learn.sparkfun.com/tutorials...t-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
(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
Gurken schmecken mir nicht, wenn sie Pelz haben!
Wenn ich das richtig sehe sendest du 5 high bits, nicht 4 (Daten werden bei rising edge übernommen).
MfG Hannes
Gurken schmecken mir nicht, wenn sie Pelz haben!
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
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.
Von daher bleibt meine Ratlosigkeit leider bestehen.
Hat noch jemand Ideen/Vorschläge?
Grüß,
NRicola
Gurken schmecken mir nicht, wenn sie Pelz haben!
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
Hallo Hannes,
ich konnte das Problem lösen. Hinweis gab mir die Problemlösung hier:
https://electronics.stackexchange.co...oard-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...
Hier der erfolgreiche Signalverlauf:
Hab reichlichen Dank für deine Hilfe. Das hat gut über mein Motivationstief hinweg geholfen!
Grüß,
NRicola
Gurken schmecken mir nicht, wenn sie Pelz haben!
Hauptsache es funktioniert.
MfG Hannes
Lesezeichen