mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik suche FTDI Projekt mit D2XX Treiber


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bjoern Buettner (tishima)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wo hast du das denn her das du mit dem VCP-Treiber auf maximal
300kbit/s kommst? Ich komme hier mit einem FT245MB und dem VCP-Treiber
auf 6MBit/s.

Matthias

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Wolf (mictronics) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johannes

Ich habe schon mit dem D2XX Treiber unter VS6 C++ programmiert.
Das Projekt ist allerdings nicht Open Source, aber ich kann Dir helfen
bzw. Tips geben wenn Du willst.

Kontakt: michael AT mictronics DOT de

/Michael

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag: Die maximale Datenrate des FT232R ist auf 3MBit/s
begrenzt, da die internen 48MHz mindestens durch 16 geteilt werden.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.