Hallo
Ich muss bei einem FT232BM von FTDI unteranderem Daten programmieren und auslesen können.
Dazu benutze ich Delphi...
Beim Programmieren habe ich keine Probleme, aber dass auslesen ist etwas harziger...
Mal den Code zum Programmieren:
Die Daten zum Programmieren sind in einem Record.
Delphi-Quellcode:
ftdata : Record
VendorID : word;
ProductID : word;
Manufacturer : PChar;
ManufacturerID : PChar;
Description : PChar;
SerialNumber : PChar;
MaxPower : word;
PnP : Word;
SelfPowered : Word;
RemoteWakeup : Word;
Rev4 : boolean;
IsoIn : boolean;
IsoOut : boolean;
PullDownEnable : boolean;
SerNumEnable : boolean;
USBVersionEnable : boolean;
USBVersion : Word;
FT_EE_Program(Multi_Handle,@FtData);
Beim Auslesen habe ich das hier... aber es stürzt mir immer ab...
Delphi-Quellcode:
Function ReadEE : FT_Result;
var
ManufacturerBuf : string[8];
ManufacturerIDBuf : string[16];
DescriptionBuf : string[32];
SerialNumberBuf : String[16];
begin
ManufacturerBuf := ftData.Manufacturer;
ManufacturerIDBuf := ftData.ManufacturerID;
DescriptionBuf := ftData.Description;
SerialNumberBuf := ftData.SerialNumber;
Result := FT_EE_Read(Multi_Handle,@FtData);
if Result <> FT_OK then FT_Error_Report('FT_EE_Read',Result);
end;
Das blöde ist, dass die Beispiele in C-Sprache sind und ich nicht weiss ob ich sie richtig übertragen habe...
Code zum Programmieren
Code:
FT_PROGRAM_DATA (EEPROM Programming Interface)
typedef struct ft_program_data {
WORD VendorId; // 0x0403
WORD ProductId; // 0x6001
char *Manufacturer; // "FTDI"
char *ManufacturerId; // "FT"
char *Description; // "USB HS Serial Converter"
char *SerialNumber; // "FT000001" if fixed, or NULL
WORD MaxPower; // 0 < MaxPower <= 500
WORD PnP; // 0 = disabled, 1 = enabled
WORD SelfPowered; // 0 = bus powered, 1 = self powered
WORD RemoteWakeup; // 0 = not capable, 1 = capable
bool Rev4; // true if Rev4 chip, false otherwise
bool IsoIn; // true if in endpoint is isochronous
bool IsoOut; // true if out endpoint is isochronous
bool PullDownEnable; // true if pull down enabled
bool SerNumEnable; // true if serial number to be used
bool USBVersionEnable; // true if chip uses USBVersion
WORD USBVersion; // BCD (0x0200 => USB2)
} FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
Code zum Lesen
Code:
FT_PROGRAM_DATA ftData;char ManufacturerBuf[32];
char ManufacturerIdBuf[16];
char DescriptionBuf[64];
char SerialNumberBuf[16];
ftData.Manufacturer = ManufacturerBuf;
ftData.ManufacturerId = ManufacturerIdBuf;
ftData.Description = DescriptionBuf;
ftData.SerialNumber = SerialNumberBuf;
ftStatus = FT_EE_Read(ftHandle,&ftData);
if (ftStatus == FT_OK) {
// FT_EE_Read OK, data is available in ftData
}
else {
// FT_EE_Read FAILED!
}
vielleicht bin ich hier auch total falsch...
Aber bin trotzdem dankbar für jede Hilfe
PEACE
STW