Liebes Forum,
zur Zeit hänge ich an einem Problem mit einem FTDI VA800A-spi Board und
bräuchte ein paar Tipps von Euch:
Ich möchte den Motion-Sensor ICM-20602 über eine FTDI USB-Spi Brücke mit
einem Python-Skript unter Debian-Linux auslesen. Den gleichen Sensor
kann ich bereits mit einem Labview-Programm und einer NI-Breakoutbox
über I2C und Spi gut auslesen. Es funktioniert also - ist definitiv kein
Problem des Sensors.
Als Hobbyprojekt würde ich gerne auch mit Python und über ein FTDI-SPI
Schnittstelle das gleiche bewerkstelligen.
Ich habe alle Treiber richtig installiert und kann das FTDI Board über
python ansteuern. Ich habe mit dem Osci auch kontrolliert, ob das
Clocksignal rausgeschickt wird bzw. ob auch CS beim senden auf low
gezogen wird bzw. über MOSI auch wirklich das gesendet wird, was ich
programmiert habe: ja das ist wirklich der Fall. Nur über MISO kommt
nicht das an was ich will: Es sollte beim auslesen des Registers mit der
Adresse 0x75 die ID 0xAF gesendet werden. Statt dessen kommt entweder
nichts(0x00) oder wenn ich eine willkürliche Bytereihenfolge an die
Adresse sende kommt etwas in der folgenden Form:
"\x11\x9c\x9e\xb5\x00\x00\x00\x00\x00\x00\x00a\x15\x00f\x93\x0b\x00\x00\
x06\"
Der Sensor sollte Mode 0 oder Mode 3 können. Nun sollte es nach dem
Forum hier:
https://electronics.stackexchange.com/questions/360086/make-ftdi-2232d-do-spi-mode-1-properly-data-seems-1-2-clock-cycle-off
wenn dann nur mit Mode 1 Probleme geben. Anmerkung Mode 2 kann ich zum
Beispiel gar nicht setzen mit der pyftdi.spi lib.
Das ist mein Python-Code dazu:
1 | from pyftdi.spi import SpiController, SpiIOError
|
2 | from struct import *
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | ctrl= SpiController()#spi
|
9 | ctrl.configure('ftdi://ftdi:232h/0')
|
10 | spi = ctrl.get_port(cs=0, freq=1E6, mode=0)
|
11 | #spi.set_frequency(1000000)
|
12 | #spi.configure('ftdi://0x403:0x6014/1')
|
13 | #slave = spi.get_port(cs=0, freq=1E6, mode=1)
|
14 | write_buf = b'\x75\0x10'
|
15 | #write_buf = b'\x75\0xdf'
|
16 | #write_buf = b'\xD0\0xff'
|
17 |
|
18 |
|
19 | spi.write(write_buf,True,False)
|
20 |
|
21 | read_1= spi.read(200, start=False, stop=True).tobytes()
|
22 |
|
23 | #id = spi.exchange([0x43,0x11,0x00,0x00,0x00],8).tobytes()
|
24 | id = spi.exchange([0x75,0x00],200).tobytes()
|
25 | #ctrl.get_port(cs=1, freq=1E6, mode=1)
|
26 | print(read_1)
|
27 | print(id)
|
Hat einer eine Idee was ich noch ausprobieren könnte? Ich habe alles
versucht - Bytereihenfolge, anderer Mode, ein Versuch mit ftd2xx statt
pylibftdi, aber es scheint als würde der Controller nicht richtig die
Flanken des Signals erkennen - also das wäre meine Erklärung dazu - aber
da muss es doch ein Lösung geben. Ich wäre sehr dankbar, wenn jemand
eine Idee hätte - vielen Dank schon mal im Voraus.