Hallo,
ich benutze den FT232R. Baudrate ist auf 1Mbit passend zu 16MHZ
Mikrocontrollertakt gewählt.
Die Übertragung ist super. Allerdings triit ab und zu ein Fehler auf,
und dann gewaltig. Etwa 1 Sekunde Problemlose Übertragung, dann für 0.25
Sekunden nur Fehler.
Das wiederholt sich zyklisch.
Ich hab keine Ahnung wo das problem her kommen könnte.
Es geschieht auch mit langsameren Baudraten!!!!
Ich dachte schon an einen Bufferoverflow oder so...
kann das sein?
ich benutye den Befehl:
FT_GetStatus ( FT_HANDLE ftHandle, LPDWORD lpdwAmountInRxQueue, LPDWORD
lpdwAmountInTxQueue, LPDWORD lpdwEventStatus )
Für lpdwAmountInRxQueue == 1 gebe ich das Byte zurück. D.h. es dürfte
kein Overflow kommen, da ich sofort nach dem Empfang eines Bytes es
verarbeite.
aber woher kann sonst der zyklische fehler kommen???
der Mikrocontroller sendet zyklisch Daten aber nur kleine pakete. ich
empfang die pakete einige male erfolgreich nacheinander.
hier noch meine methode zum empfangen:
1 | int FTDI_COMM::receive(unsigned char* message, FT_STATUS &ftStatus, FT_HANDLE &ftHandle1, bool debuginfo){
|
2 | // receive a message
|
3 | DWORD RxBytes;
|
4 | DWORD RxBytes_man =1;
|
5 | DWORD TxBytes;
|
6 | DWORD EventDWord;
|
7 | DWORD BytesReceived;
|
8 | unsigned char RxBuffer[1];
|
9 | unsigned char var = 0;
|
10 |
|
11 | ftStatus = FT_GetStatus(ftHandle1,&RxBytes,&TxBytes,&EventDWord);
|
12 | if ( ftStatus != FT_OK ) {
|
13 | cout<<"Could not get status!";
|
14 | return -1;
|
15 | }
|
16 |
|
17 | if (RxBytes = 1) {
|
18 | ftStatus = FT_Read(ftHandle1,RxBuffer,RxBytes_man,&BytesReceived);
|
19 | if (ftStatus == FT_OK) {
|
20 |
|
21 | *message = 0x00;
|
22 | *message = RxBuffer[0];
|
23 | var= *message;
|
24 |
|
25 | if (debuginfo == 1){
|
26 | printf("Message from ftdi: %d bytes: %d\n",var,BytesReceived);
|
27 | }
|
28 |
|
29 | }
|
30 | else {
|
31 | // FT_Read Failed
|
32 | cout<<"Read Buffer Failed!";
|
33 | return -1;
|
34 | }
|
35 | }
|
36 |
|
37 | else return -1;
|
38 |
|
39 | return 1;
|
40 | }
|