Forum: PC-Programmierung FTDI libMPSSE SPI-Problem


von Ralf G. (dl5eu)


Lesenswert?

Moin zusammen,

ich möchte in einem PC-Programm (Qt 6.8.3 und GCC) mit der von FTDI zur 
Verfügung gestellten libMPSSE die MPSSE eines FT232H (UM232H-Modul) 
nutzen, um einen über SPI angeschlossenen MCP3008 auszulesen. Hat jemand 
von Euch so etwas schon einmal erfolgreich gemacht? Es geht mir 
wohlgemerkt um genau diese Hardware und die libMPSSE.

Grundsätzlich funktioniert das Programm. Allerdings habe ich das 
Problem, dass beim Aufruf der Funktion SPI_ReadWrite() Daten zum ADC 
geschickt werden, die nicht aus meinem TX-Puffer stammen und dadurch die 
Funktion stören.

Wenn ich 3 Bytes mit 0x00 im Puffer habe erwarte ich, dass während der 
24 Takte die MOSI-Leitung auf 0 bleibt. Das ist jedoch nicht der Fall. 
Wie ich mit meinem MSO sehen kann wird während der ersten 8 Bits z.B. 
0x79 oder etwas anderes anstatt 0x00 gesendet. Der Aufruf von 
SPI_Write() (und SPI_Read()) funktioniert hingegen korrekt; hier bleibt 
die MOSI Leitung wie erwartet auf 0.

Hat jemand eine Idee, wo diese (für mich willkürlich aussehenden) Daten 
herkommen? Vielleicht ein Bug in der Funktion SPI_ReadWrite()? Falsche 
Initialisierung? Oder muss ich in dem UM232H mit FT_PROG etwas 
umprogrammieren?

Ich habe jetzt schon mehrere Tage damit verbracht den Fehler zu suchen, 
bisher leider ohne Erfolg und die Informationen aus dem Netz haben mir 
dabei leider auch nicht geholfen.

Vielen Dank für Eure Hilfe!

Freundliche Güße,

Ralf

von Oliver S. (oliverso)


Lesenswert?

Ralf G. schrieb:
> Hat jemand eine Idee, wo diese (für mich willkürlich aussehenden) Daten
> herkommen?

Die lib kommt ja nun mit source Code. Man könnte nachschauen…

Oliver

von Frank O. (frank_o)


Lesenswert?

Aktuelle Treiber verwendet?

von Ralf G. (dl5eu)


Lesenswert?

Die Bibkiothek kommt zwar mit Sourcecode, aber leider ist es mir bisher 
nicht gelungen, sie als statisch gelinkte Bibliothek in mein Projekt 
einzubinden und zu kompilieren um sie debuggen zu können. Alles wird 
ohne Fehlermeldungen kompiliert aber kein Code erzeugt. Wahrscheinlich 
habe ich da irgendwo ein #define vergessen oder falsch gesetzt. Auch 
damit habe ich bereits viele Stunden verbracht und das letztendlich auf 
später verschoben.

Die aktuellen Treiber sind installiert.

Grüße,

Ralf

von Harald K. (kirnbichler)


Lesenswert?

Ralf G. schrieb:
> Allerdings habe ich das
> Problem, dass beim Aufruf der Funktion SPI_ReadWrite() Daten zum ADC
> geschickt werden, die nicht aus meinem TX-Puffer stammen und dadurch die
> Funktion stören.

Dann zeig' doch mal Deinen eigenen Quelltext. Daß die Library selbst 
einen so eklatanten Fehler hat, wie Du beschreibst, halte ich für wenig 
wahrscheinlich, dafür gibt es die schon zu lange und zu viele Leute 
nutzen die.

von Ralf G. (dl5eu)


Angehängte Dateien:

Lesenswert?

Bitteschön. Den relevanten Teil meines Testcodes habe ich angehängt.

Im Hauptprogramm wird noch das hier gemacht:
1
quint32 index;
2
int value;
3
4
SpiDevice::getIndexByDescription(ID_STR, index);
5
m_device = new SpiDevice(index, this);
6
m_adc0 = MCP300X::create(*m_device, 8);
7
m_adc0->init();
8
m_adc0->readChannel(0, value);

Falls Du den Fehler findest kläre mich bitte auf.

Grüße,

Ralf

von Harald K. (kirnbichler)


Lesenswert?

Ralf G. schrieb:
> Bitteschön. Den relevanten Teil meines Testcodes habe ich angehängt.

OK, danke. (Einfacher wäre es gewesen, das Ding einfach *.cpp zu nennen 
und nicht als Zip anzuhängen, dann hätte die Forensoftware das selbst 
anzeigen können, aber egal, ich hab's auch so ansehen können)


Tja, das sieht auf den ersten Blick unverdächtig aus.

von Jens B. (dasjens)


Lesenswert?

Ralf G. schrieb:

> Grundsätzlich funktioniert das Programm. Allerdings habe ich das
> Problem, dass beim Aufruf der Funktion SPI_ReadWrite() Daten zum ADC
> geschickt werden, die nicht aus meinem TX-Puffer stammen und dadurch die
> Funktion stören.
>

Und wie hast Du das festgestellt?

von Harald K. (kirnbichler)


Lesenswert?

Jens B. schrieb:
> Und wie hast Du das festgestellt?

Hat er doch geschrieben:

Ralf G. schrieb:
> Wie ich mit meinem MSO sehen kann

von Ralf G. (dl5eu)


Lesenswert?

Harald K. schrieb:
> Einfacher wäre es gewesen, das Ding einfach *.cpp zu nennen
> und nicht als Zip anzuhängen, dann hätte die Forensoftware das selbst
> anzeigen können, aber egal, ich hab's auch so ansehen können

Beim nächsten Mal kann ich das ja machen. Ich wollte das Posting nicht 
mit aufgeblähtem Code unleserlich machen. Die Forensoftware und wie sie 
arbeitet kenne ich ja nicht.

Jens B. schrieb:
> Und wie hast Du das festgestellt?

Wie bereits früher geschrieben mit meinem MSO (Mixed Signal 
Oscilloscope), das auch Digitaleingänge hat. Die habe ich an CS, SCK, 
MOSI und MISO geklemmt und mit CS getriggert. Wenn ich RX- und TX-Puffer 
vollständig mit 0 initialisiere sollte an MOSI auch nur 0 erscheinen. 
SPI_Write() macht es ja korrekt.

Vielleicht gelingt es mir ja noch, die libMPSSE mit cmake so zu bauen 
oder den Code so in mein Projekt einzubinden, dass ich ihn debuggen 
kann. FTDI liefert nur ein VS-Projekt mit.

Ralf

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Ralf G. schrieb:
> Ich wollte das Posting nicht
> mit aufgeblähtem Code unleserlich machen.

Anhang ist schon richtig, nicht in den Text reinkopieren. Wenn der 
Anhang nicht komprimiert ist und *.c, *.cpp oder auch *.ino heißt, dann 
bietet die Forensoftware eine "Quelltext-Angucken-Funktion" an, mit 
Zeilennummer, Syntaxhighlighting.

Hier Beitrag "Tasten in C unter Linux" kannst Du 
sehen, wie das dann aussieht.

von Dieter S. (ds1)


Lesenswert?

Wenn man sich SPI_ReadWrite() in "\release\source\ftdi_spi.c" von 
libmpsse-windows-1.0.8.zip (vermutlich die aktuelle Version) anschaut 
dann sieht das schon ein wenig nach "Baustelle" aus...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.