mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FT245BM


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Gerät hier vor mir liegen, dass ich mit einer eigenen
Software ansteuern möchte. Das Gerät hat intern einen FT245BM Chip und
vom Hersteller sind alle Demoprogramme mit dem VCP Driver geschrieben.

Ich würde das Gerät aber gerne über die DLL für den FTDIO Chip
ansteuern. Das funktioniert insoweit auch schon gut, als ich das Gerät
öffnen kann und auch Daten schreiben kann.

Gelesen werden allerdings keine - hier stürzt das Programm (ohne
Timeout) ab.

Ich vermute nun, dass die Daten zwar am FTDI Chip ankommen, aber der
Controller im Gerät diese nicht lesen kann (weil das ganze ja auf den
VCP Driver ausgerichtet war). Ich kenn mich mit den Chips leider nicht
aus - kann mir jemand evtl. Tipps geben, mit welchen Befehlen ich über
die DLL dem Gerät die serielle Schnittstelle vorspielen kann?

Ich verwende bisher nur FT_Open, FT_Close, FT_Write und FT_Read.

Vielen Dank!

Liebe Grüße
Steffen

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

Bewertung
0 lesenswert
nicht lesenswert
Hi

AFAIK ist es für den µC nicht erkennbar ob die Daten dem FT245BM über
den VCP oder den DLL-Treiber gesendet wurden. Ich vermute eher eine
fehlerhafte Ansteuerung der DLL von deinem Programm. Wie stürzt es den
ab? Segmentation Fault?

Matthias

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey - danke für deine Antwort:

int handle=0;
int bytesWritten=0;
char* buffer = stackalloc char[5];
char* in_buffer = stackalloc char[9];

buffer[0] = (char)0x7E;
buffer[1] = (char)10;
buffer[2] = (char)0;
buffer[3] = (char)0;
buffer[4] = (char)0xE7;

int c = FDTI.FT_Open(0,&handle);
c = FDTI.FT_SetBaudRate(handle, 9600);
c = FDTI.FT_Write(handle,buffer,5,&bytesWritten);
c = FDTI.FT_Read(handle,in_buffer,9,&bytesRead);
FDTI.FT_Close(handle);

Das Programm liefert für c = 0 - also FT_OK. Erst beim Read kommt das
Problem. Er hängt einfach nur. Es passiert gar nichts. Programmiert ist
es in C#.

Eigentlich sollte das Device 9 Bytes zurückliefern. Ich habe es auch
schon mit 1 probiert - das Device antwortet nicht.

Über den VCP Treiber hat es mit diesen gesendeten Daten geantwortet
...

Viele Grüße
Steffen

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

Bewertung
0 lesenswert
nicht lesenswert
Hi

In C# hab ich noch nicht mit native-DLLs gearbeitet. Ich bin da bisher
immer in der .net Welt geblieben. IIRC muss man alles was irgendwie an
der VM vorbei operieren soll in einen unsafe-Block packen.

Matthias

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

ja - da hast du Recht. Aber die Funktioen gehen ja eigentlich. Ich
wunder mich nur, warum ich von dem Device keine Antwort erhalte. Sende
ich die selben Daten über den VCP, so erhalte ich die Antwort...

Die Funktionen geben alle ein FT_OK zurück, also gehe ich davon aus,
dass sie auch erfolgreich ausgeführt wurden. Leider antwortet das
Device aber nicht. Also gehe ich davon aus, dass der Controller im
Device nicht merkt, dass die Daten da sind und daher auch keine
zurückschickt.

Viele Grüße
Steffen

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.