Gast
#3173871
Hallo Leute,
ich habe vor kurzem mit dem ftdi v2eval Board (VNC2 Chip) eine Arbeit
angefangen und stoße momentan auf ein kleines Problem an.
Die Situation ist wie folgt:
-Ich möchte einen Datenlogger simulieren
-Dabei arbeitet der vnc2 chip der USB-Kontroller
-SPI-Daten sende ich via DLN-4s (Atmel Chip). Die dafür nötige
Plattforme habe ich mit c++Builder selber geschrieben
Das Problem ist daß der Empfangspuffer (vnc2 chip) überläuft und man hat
keine Möglichkeit zu wissen, ob der Puffer leer oder halb leer ist.
Schließlich will ich ja kontinuierlich Daten schicken.
Dazu noch das Problem,dass man nicht wissen kann, ob z.b die 128 Bytes
(129 plus Command Byte)alle schon aus dem Puffer vom vnc2 geholt wurden.
Deswegen mien Ansatz: -Nach jedem Schreibzugriff, RxBuffer auswerten.
Möglich da SPI voll duplex
-Falls RxBuffer < 129 , die restlichen Byte erst vor dem nächsten 129
Byts-Packet schicken
-Wenn nicht, dann einfach mal weiter schreiben.
Wenn ich jetzt die Funktion überprüfe, funktioniert es nicht ganz.
Hat jemand hier vielleicht eine Idee was ich übersehe??
Es wäre wirklich dankbar.
Gruß. Martin
Und so sieht meine Funktion aus:
bool Write(HDLN DeviceHandle, unsigned char * Buffer, unsigned long
BufferSize){
if(BufferSize % 128) return false;
unsigned long pByte = 0;
unsigned long ByteToWrite;
unsigned char TxBuffer[129];
unsigned char RxBuffer[129];
TxBuffer[0] = 0x00; //!!!!!
for(int Loop=0; Loop <BufferSize/128; Loop++){
for(int i=0; i<128; i++){
TxBuffer[i+1] = Buffer[pByte++];
}
//Diesen TxBuffer mit 128 Bytes (129 Achtung wegen CommandoByte)
//senden
DlnSpiMasterReadWrite(DeviceHandle, 0, 129, TxBuffer, RxBuffer);
// Ermittelt der Restlänge des RxBuffers
strlen(RxBuffer);
//Vergleich mit Sendepacket und Statusflag Prüfen
if((strlen(RxBuffer) < 129) & (0x04 == 0))
{ //Falss Daten noch im Puffer, diesen Rerst erst senden,
//dann ein ganzes Packet
TxBuffer[1] = (129 - strlen(RxBuffer));
DlnSpiMasterReadWrite(DeviceHandle, 0, strlen(RxBuffer),
TxBuffer, RxBuffer);
Sleep(10);
}
else{
continue;
}
}