suche FTDI Projekt mit D2XX Treiber

Gast #340187
Lesenswert?

Hallo zusammen,

ich habe ein bord mit einem FTDI232R gebaut: PC <-> FTDI <-> USART
eines uC. Den Treiber hab ich installiert (D2XX). Windows erkennt das
device, alles scheint zu ok zu sein.

Was ich nicht gefunden habe ist ein einfaches Tutorial, in dem
beschrieben wird, wie man mit dem Chip Daten austauscht. Die Programme
auf der FTDI Internetseite sind immer gleich so umfangreich und
modular, dass es fuer Anfaenger schwierig ist. Es muss doch ein
einfaches C Programm geben, in dem der Chip initialisiert wird,
baudrate angeben (evtl.), 2byte schreiben und 2byte lesen... Wer so
etwas kennt und bereit ist es zB hier im Forum oder in der Codesammlung
zu veroeffentlichen, wuerde sicher nicht nur mir sehr helfen.

Vielen dank fuer Links, Tips oder sogar Code im Voraus.
macht's gut,
Johannes
#340188
Lesenswert?

Hallo!

Warum möchtest Du dafuer unbedingt den Direct Treiber verwenden, diesen
Treiber verwenden macht doch nur Sinn wenn Du den FTDI nicht als Com
Port verwenden willst, sondern z.B. nur im Bit Bang Modus.
Mit dem VCP Treiber kannst Du einfach mit jedem Terminel PRG oder RS232
Komponente aus deiner Software drauf zugreifen.

mfg,
Bjoern
#340189
Lesenswert?

Ja, so ist es. Du installierst einfach den VCP-Preiber am PC und
bekommst einen neuen COM-Port, z.B. COM5 oder so. Damit steuerst Du den
FT232R an (etwa mit einem Terminalprogramm, HyperTerm, oder HTerm von
Tobias Hammer (www.der-hammer.info), als ob er ein UART im PC wäre; am
Chip selbst erscheinen diese Daten so, als wäre deine uC-Platine über
einen MAX232 mit dem PC verbunden; daß Du es mit USB zu tun hast, kommt
dabei fast nicht zum Vorschein (außer durch ein etwas verändertes
Timing).

Viel Erfolg
Günter
Gast #340190
Lesenswert?

Der VCP ist aber langsam. Beim FTDI245 (den darf ich grad verwenden)
kommt man damit kaum über 300kbit/s ... wenn das zu wenig ist
braucht's den D2XX Treiber.
Bei meiner Anwenung ginge es darum Daten über den FTDI möglichst
schnell (3-4Mbit/s) in den PC zu pumpen...also nur unidirektional, aber
selbst da braucht man dann ja ein Programm was den Datenstrom
entgegennimmt.
Hat jemand solch ein Prog schonmal geschrieben? Die uC Seite ist kein
Problem...

Gruß
Fabian
Gast #340192
Lesenswert?

Datenblatt FT245BM Seite eins unter Features:

- Transfer Data rate to 1M Byte / Sec - D2XX Drivers
- Transfer Data rate to 300 Kilobyte / Sec - VCP Drivers

stimmt... sind kbyte/s nicht kbit/s ... ist aber für meine Anwenung zu
langsam; ich brauch eigentlich min 500kbyte/s! Darum muss es wohl mit
dem D2XX gehen.

Gruß
Fabian
Gast #340194
Lesenswert?

#include "FTD2XX.h"

class Serial {
protected:
 FT_HANDLE mFTHandle;
 FTDCB mFTDCB;
 FTTIMEOUTS mFTTimeouts;

public:
 bool openFTDI(DWORD devID);
};

bool Serial::openFTDI(DWORD devID) {
 FT_DEVICE_LIST_INFO_NODE* nodesP;

 DWORD flags, type, id, loc;
 char serial[256], desc[256];

 mFTHandle = INVALID_HANDLE_VALUE;
 if (FT_CreateDeviceInfoList(&numDevs) == FT_OK) {
    nodesP = new FT_DEVICE_LIST_INFO_NODE[numDevs];
    if (FT_GetDeviceInfoList(nodesP, &numDevs) == FT_OK) {
       for (DWORD i = 0; i < numDevs; i++) {
           // add type, serial number checks if required
           if (nodesP[i].ID == devID) {
              FT_GetDeviceInfoDetail(i, &flags, &type, &id, &loc,

                                     &serial, &desc, &mFTHandle);
              FT_Open(i, &mFTHandle);
              break;
           }
        }
    }
 }
 if (mFTHandle == INVALID_HANDLE_VALUE) return false;
 FT_W32_SetupComm(mFTHandle, 1024, 1024);
 if (FT_W32_GetCommState(mFTHandle, &mFTDCB)) {
    if (BuildCommDCB(parameter.c_str(), &mFTDCB)) {
       mFTDCB.BaudRate = 4800;
       // ... restliche Einstellungen im DCB
       FT_W32_SetCommTimeouts(mFTHandle, &mFTTimeouts);

       return FT_W32_SetCommState(mFTHandle, &mFTDCB);
    }
 }
 return false;
}

Das Einlesen/Schreiben läuft z.B. über die, dem Win32-API
nachgebildeten, Funktionen in etwa so:
DWORD bytesInQueue = 0, bytesRead = 0;
FT_GetQueueStatus(mFTHandle, &bytesInQueue);
if (FT_W32_ReadFile(mFTHandle, bufferP, bytesInQueue,
                    &bytesRead, NULL)) {
...
}

Die Übertragungsraten sollten beim FT232R bis zu 3MBit/s betragen, egal
welcher Treiber benutzt wird.
Beim FT245R gibt FTDI 300kByte/s für VCP und 1MByte/s für den D2XX an.
Gast #340196
Lesenswert?

Hallo,

herzlichen Dank an alle fuer die Antworten.

ehrlich gesagt, wollte ich den D2XX Treiber nur hernehmen um etwas
Neues zu lernen. Dabei entdeckt man ja oft Sachen die einfacher oder
besser (oder beides) sind als das was man bisher gemacht hat. In diesem
Fall scheint es nicht ganz so zu sein :)... Jedenfalls mit dem
"einfacher" ists scheinbar nicht so.

@arc: vielen Dank fuer den Sourcecode. Ich werd ihn gleich mal
ausprobieren.

mg,
Johannes

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren