Forum: PC-Programmierung PC<=USB=>FT4222<=SPI=>uC // USB SPI Bridge


von Erik A. (elektronik_bastler)


Lesenswert?

Hallo Leute,

ich möchte mich gerne in die Datenübertragung über USB einarbeiten. Als 
Versuchsaufbau möchte ich Daten über USB an den Baustein FT4222 
übertragen, der die Daten dann über SPI weiter an einen Micro Controller 
sendet.

Ich versteh noch nicht so ganz wie ich mit einem C-Programm, geschrieben 
in Code::Blocks auf die USB Schnittstelle zugreifen kann.

So wie Ich das verstanden habe bietet FTDI die Möglichkeit, mit Hilfe 
der DLL und der Bibliothek(LibFT4222.h) die Daten zu schreiben/lesen. 
Das bedeutet ich müsste nur die Treiber installieren und die 
Bibliotheken in mein C-Programm einbinden und ich könnte dann schon 
Daten über USB senden/empfangen..?

nun weiß ich nicht ob das so richtig gedacht ist, kann mir bitte jemand 
weiterhelfen???

: Verschoben durch User
von Mike99 (Gast)


Lesenswert?

Hast du schon was ausprobiert und bist damit auf ein konkretes Problem 
gestoßen? Oder sitzt du vor einem Blatt Papier und theoretisierst nur 
rum?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> So wie Ich das verstanden habe bietet FTDI die Möglichkeit, mit Hilfe
> der DLL und der Bibliothek(LibFT4222.h) die Daten zu schreiben/lesen.

*.h ist keine "Bibliothek". Das ist eine "Include-Datei" oder eine 
"Header-Datei". In der stehen nur Deklarationen der Dinge drin, die in 
der tatsächlichen Bibliothek resp. Library enthalten sind.

Die Bibliothek resp. Library ist hier die DLL. Das ist bereits 
compilierter Programmcode.

Um die DLL einfach nutzen zu können, stellt FTDI eine Importlibrary 
LibFT4222.lib zur Verfügung, die enthält den nötigen Kram, um die 
Verbindung zwischen Deinem Programm und der DLL herzustellen.

Auf diese Importlibrary kannst Du verzichten, wenn Du mit den 
Win32-API-Funktionen LoadLibrary und GetProcAddress arbeiten willst. 
Das aber ist nur in bestimmten Fällen sinnvoll.

Du musst also in Deinem Programm einerseits die Headerdatei per #include 
einbinden und andererseits mit* der Library LibFT4222.lib linken.

> Das bedeutet ich müsste nur die Treiber installieren und die
> Bibliotheken in mein C-Programm einbinden und ich könnte dann schon
> Daten über USB senden/empfangen..?

Ja.


*) besonders coole Menschen sagen hier "gegen".

von Erik A. (elektronik_bastler)


Lesenswert?

ok, super danke für die schnelle Antwort

ich habe den Treiber installiert und mir von ftdi ein Beispiel Projekt 
geholt die Header Datei ftd2xx.h und Lib FT4222.h sind eingebunden. Bei 
dem ausführen des Programms kommt die Fehlermeldung das FTD2XX.dll nicht 
gefunden wurde.
Muss ich die .dll noch irgendwie einbinden? wenn ja wie?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Erik A. schrieb:
> Muss ich die .dll noch irgendwie einbinden?

Nein, die muss entweder im gleichen Verzeichnis wie Dein Programm oder 
aber im Pfad liegen (der Pfad ist eine Liste aus Verzeichnisnamen, die 
in der Environmentvariablen %PATH% drinsteht).

Üblicherweise sollte die DLL in c:\windows\system32 oder in 
c:\windows\syswow64 liegen.

Wenn es eine 64-Bit-Windows-Version ist, liegt im ersten Verzeichnis* 
die 64-Bit-DLL, und die 32-Bit-DLL liegt im zweiten Verzeichns. Auf 
32-Bit-Windows-Versionen gibt es nur das erste Verzeichnis, und in dem 
liegt dann die 32-Bit-DLL.

Das jeweilige Verzeichnis steht aber in der Verzeichnisliste in %PATH% 
standardmäßig drin, daher ist anzunehmen, daß Du nicht den richtigen 
FTDI-Treiber installiert hast.

Es gibt zwei Varianten der FTDI-Treiber, die, die einen virtuellen 
seriellen Port anbieten, und die, die die FT2xx-Programmierschnittstelle 
bieten. Vielleicht hast Du ja nur die serielle Variante installiert, 
dann fehlt die FT2xx-DLL.

http://www.ftdichip.com/Drivers/D2XX.htm


*) das klingt völlig gaga, ist aber so.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Du kannst auch im Treber den VCP (virtual COM-Port) aktivieren und dann 
ohne die FTDI-DLL über sie serielle Schnittstelle senden empfangen.

Windows API    : CreateFile , SetComState , ReadFile , WriteFile ...
oder portabel  : open , tcsetattr , read , write ...

Stefan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hier geht es um die SPI-Schnittstelle, die sich doch etwas anders 
verhält als eine asynchrone serielle Schnittstelle, insofern ist es wohl 
sinnvoll, bei der FTDI-API zu bleiben.

von Jim M. (turboj)


Lesenswert?

Rufus Τ. F. schrieb:
> Hier geht es um die SPI-Schnittstelle, die sich doch etwas anders
> verhält als eine asynchrone serielle Schnittstelle, insofern ist es wohl
> sinnvoll, bei der FTDI-API zu bleiben.

Für 95% der Leute hier ist das sicher sinvoll.

Der Rest kann sich bei OpenOCD anschauen wie man MPSSE zu Fuß bedient. 
JTAG ist ein naher Verwandter von SPI. Das hat allerdings den 
Schönheitsfehler dass man den FTDI Treiber nicht verwenden kann - 
OpenOCD will WinUSB sehen.

von Erik A. (elektronik_bastler)


Lesenswert?

also habe die .dll in c:\windows\system32 gefunden und in  das 
Verzeichnis von meinem Programm kopiert und das hat dann funktioniert.
dank für die Hilfe

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.