Hallo,
auf meiner Platine soll ein FT2232D einen SPI Bautein ansprechen. Leider
klappt des nicht so recht. Die Knowledge-Dingsbums-Webseite von FTDI
gibt es zwar jede Menge Beispiele zur SPI-Lib, die sind jedoch sehr
wenig bis gar nicht kommentiert und es bleiben viele offene Fragen
übrig.
Mein Beispiel Programm soll den SPI-Baustein vom FT2232 beschreiben. Auf
dem Logic Analyzer sieht man aber nix zappeln, nicht mal einen CS.
Das Oszi meldet einen nur knapp 3V Pegel am CS Signal, sollte es nicht
wenigstens 5V sein, wenn der high/passiv ist?
Die ganzen Pinzustände wie z.B. "WriteStartCondition.bClockPinState"
verstehe ich auch noch nicht so ganz. Wie initialisiert man denn nun den
Baustein richtig?
Hier noch der Code von der Write-Funktion
Mit der SPI_INITDEVICE-Funktion im Konstruktor (neben SPI_OPEN) sieht
die Sache schon viel besser aus.
Nun ist mir die Initialisierung der CS-Leitungen und der Clk-Leitungen
noch nicht so ganz klar (siehe Kommentare im Code).
1
WriteStartCondition.bClockPinState=true;//ist das high?
Nun hab ich noch eine Frage: es scheint, dass die Daten immer mit der
negativen Clockflanke rausgetaktet werden.
In der SPI_Write-Fkt. kann man beim Parameter "bClockOutDataBitsPosEdge"
eintragen, ob's mit der positiven oder mit der negativen Flanke
rausgehen soll. Mit meinem Eintrag "true" sollte es eigentlich so sein.
Aber er taktet mit der negativen Flanke raus, ändert man was an dem
Parameter so ändert sich aber nichts am Clock.
Da fehlt doch noch irgendwas?
Hi,
wie prüfst du denn, mit welcher Flanke die Daten rausgepustet werden?
Oszi? Kannst du ein Bild machen, jeweils mit bClockOutDataBitsPosEdge =
false/true?
Die FTDI Libs sind ein Schrott, und die Doku auch, ich muss mir bei
Gelegenheit eigene basteln, bei denen von FTDI ist gleichzeitig
lesen/schreiben nicht möglich, die sind echt nur "demo".
Ralf
Mein Problem stellt sich nun wie folgt da, ich konnte den Clk
invertieren (auf positiveEgded). (Siehe Screenshot)
Doch nun will der olle Baustein keinen high Initialclockvalue
akzeptieren (also das Clk-Signal darf aus irgendwelchen Gründen nur low
sein). Die Funktion "SPI_GetErrorCodeString" spuckt dann einfach: "Read
Device: Invalid initial clock state ie for clocking data in/out on
positive edge, clock initial state must be low." aus, wenn man schreibt:
denReadStartCondition.bClockPinState = true; und damit eigentlich nur
den Anfangszustand auf high setzen möchte.
Hm, eigentlich sollte es gehen, prüfen kann ich's aber nicht. Steht in
der Anleitung zu den Libs nix drin, welche Beschränkungen es gibt?
Die Libs haben für mich sowieso eher "Demo"-Feeling, die taugen nur zum
Demonstrieren (sonst könnte man gleichzeitig Lesen/Schreiben auf SPI).
Warum schreibst du dir nicht ne eigene Ansteuerung? Der MPSSE-Prozessor
ist ebenfalls dokumentiert, und du kannst dir dann das ganze Geraffel
mit den tausenden Parametern sparen, die sowieso nur spärlich(wenn
überhaupt) dokumentiert sind, dreiviertel der Parameter braucht man m.E.
nicht.
Ich denke nicht, dass eine direkte MPSSE-Ansteuerung komplizierter ist,
als der Versuch die FTDI-Libs zu verstehen.
Ralf
Irgendwie ist das auch nicht der Wahrheit letzter Schluss. Wir haben in
der IsClockCorrectInitialOutputState-Funktion die Sperre für den
Initial-Clock-State auskommentiert. Der Clock schaut nun sauber aus.
Allerdings kommt nun nichts mehr auf dem Data-Out raus.
Wie soll man sich denn nur in diesem Chaoscode zurechtfinden?