AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen/Programmieren

Ein Thema von STW · begonnen am 5. Jan 2004 · letzter Beitrag vom 7. Jan 2004
Antwort Antwort
Seite 1 von 3  1 23      
STW

Registriert seit: 19. Nov 2003
Ort: Solothurn
22 Beiträge
 
#1

Auslesen/Programmieren

  Alt 5. Jan 2004, 07:21
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
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#2

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 09:08
Hi STW,
ich hab zwar keine Ahnung von FT232BM ??
Aufgefallen ist mir aber, daß die Deklarationen nicht ganz korrekt sind.

Delphi-Quellcode:
Function ReadEE : FT_Result;
var
ManufacturerBuf : string[32];
ManufacturerIDBuf : string[16];
DescriptionBuf : string[64];
SerialNumberBuf : String[16];
myftData : ftData;
begin
  ManufacturerBuf := myftData.Manufacturer;
  ManufacturerIDBuf := myftData.ManufacturerID;
  DescriptionBuf := myftData.Description;
  SerialNumberBuf := myftData.SerialNumber;
  Result := FT_EE_Read(Multi_Handle,@myFtData);
  if Result <> FT_OK then FT_Error_Report('FT_EE_Read',Result);
end;
Vielleicht geht's so
  Mit Zitat antworten Zitat
STW

Registriert seit: 19. Nov 2003
Ort: Solothurn
22 Beiträge
 
#3

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 09:50
hy s14

hmmm...

Delphi-Quellcode:
ManufacturerBuf : string[32];
ManufacturerIDBuf : string[16];
DescriptionBuf : string[64];
SerialNumberBuf : String[16];
die länge der Strings bestimme ich ja selbst...
daher sollte es eigentlich unwichtig sein wie lang sie sind


myftData : ftData; das klappt gar nicht...
Das ist ja das selbe wie ich habe, nur dass es nicht mehr ftData sonder myFtData heisst...


PEACE
STW
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#4

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 10:03
Die Stringlängen hab ich nur aus dem C-Source übernommen, es sollten halt so viele Fehlerquellen wie möglich ausgeschaltet werden.

In der Funktion greifst Du direkt auf den Typ zu, deshalb hab ich eine Variable dieses Typs verwendet, damit die Funktion "FT_EE_Read" die Daten in der Variablen ablegen kann.

An welcher Stelle tritt eigentlich der Fehler genau auf und wie lautet die Fehlermeldung (GetLastError)?
  Mit Zitat antworten Zitat
STW

Registriert seit: 19. Nov 2003
Ort: Solothurn
22 Beiträge
 
#5

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 10:18
naja die Meldung kommt:

Project EXProgrammer.exe raised exception class EAccessViolation with message 'Access violation at address 00402C43 in Module 'EXProgrammer.EXE'. Read of Address 00000000'. Process stopped. Use Step or Run to continue.

und zwar nach der Zeile:

ManufacturerBuf := ftData.Manufacturer;
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#6

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 10:32
Das sagt eindeutig aus, das der Variablen ftdata kein Speicher zugewiesen ist.
Es wird versucht etwas auszulesen was nicht da ist
Deshalb muss eben der Record ftData erst als Variable deklariert, dann mit Inhalt gefüllt werden.
Woher kommen die Daten in der Funktion "ReadEE"??
  Mit Zitat antworten Zitat
STW

Registriert seit: 19. Nov 2003
Ort: Solothurn
22 Beiträge
 
#7

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 10:40
Die Werte von FtData sind in einem EEPROM gespeichert

Also wenn ich das Prog öffne, das EEPROM mit dem ftData programmiere und dann versuche auszulesen klappt es!
Dann bekomme ich die 4 strings.

Aber wenn ich das Prog öffne und dann gleich auslesen möchte kommt eben dieser Error...
Die Daten müssen aber doch immer noch im EEPROM gespeichert sein...
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#8

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 10:47
Naja soweit kommst Du ja gar nicht.

Ich stochere hier ziemlich im Trüben

Aber, was ist damit:

Delphi-Quellcode:
Function ReadEE : FT_Result;
var
ManufacturerBuf : string[32];
ManufacturerIDBuf : string[16];
DescriptionBuf : string[64];
SerialNumberBuf : String[16];
myftData : ftData;
begin
  Result := FT_EE_Read(Multi_Handle,@myFtData);
  if Result = FT_OK then
  begin
    ManufacturerBuf := myftData.Manufacturer;
    ManufacturerIDBuf := myftData.ManufacturerID;
    DescriptionBuf := myftData.Description;
    SerialNumberBuf := myftData.SerialNumber;
    // -- enthalten die Variablen jetzt die Werte??
  end else FT_Error_Report('FT_EE_Read',Result);
end;
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#9

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 12:12
Manche Dinge lasssen mir keine Ruhe

Wir sind von unterschiedlichen Deklarationen ausgegangen:

Delphi-Quellcode:
type
  PFT_PROGRAM_DATA = ^FT_PROGRAM_DATA;
  FT_PROGRAM_DATA = packed record //(EEPROM Programming Interface)
    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;
  end;
und dann in einer Methode folgendes:

Delphi-Quellcode:
var
  ftHandle : FT_HANDLE;
  ftData : FT_PROGRAM_DATA;
  ftstatus : FT_STATUS;
begin
  ftStatus = FT_Open(0, @ftHandle);
  if ftStatus = FT_OK then begin
    ftstatus := FT_EE_Read(ftHandle, @ftData);
    if ftstatus FT_OK then
    begin
      // FT_EE_Read OK, data is available in ftData
      // in ftData müssten nun alle Daten enthalten sein !!
    end else FT_Error_Report('FT_EE_Read', ftstatus);
  end;
Wie gesagt, ich kann es nicht testen. Sieht aber nicht schlecht aus

Gruß aus dem verschneiten München
  Mit Zitat antworten Zitat
STW

Registriert seit: 19. Nov 2003
Ort: Solothurn
22 Beiträge
 
#10

Re: Auslesen/Programmieren

  Alt 5. Jan 2004, 12:16
hmmm...
dass ganze ist wahrscheinlich ein bisschen verwirrend
hab nun mal alles reingepackt was hierfür notwendig ist...

Delphi-Quellcode:
type
 TFtData = 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;
        end;

var
  ftData : TFtData;

implementation

function FT_EE_Program(fthandle: DWord; FT_Data: Pointer) : FT_Result; stdcall ; External FT_DLL_Name name 'FT_EE_Program';
function FT_EE_Read(fthandle: DWord; FT_Data: Pointer) : FT_Result; stdcall ; External FT_DLL_Name name 'FT_EE_Read';


Function ReadEE : FT_Result;
var
ManufacturerBuf : string[32];
ManufacturerIDBuf : string[16];
DescriptionBuf : string[64];
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;


Function ProgramEE : FT_Result;
begin
  Result := FT_EE_Program(Multi_Handle,@FtData);
  if Result <> FT_OK then FT_Error_Report('FT_EE_Program',Result);
end;

die Functionen ReadEE und ProgramEE werden durch ButtonClicks aufgerufen...


das komische ist, wenn ich
Delphi-Quellcode:
  ManufacturerBuf := ftData.Manufacturer;
  ManufacturerIDBuf := ftData.ManufacturerID;
  DescriptionBuf := ftData.Description;
  SerialNumberBuf := ftData.SerialNumber;
vollkommen weglasse, stürzt das Prog nicht mehr ab.

Die anderen Werte werden alle angezeigt! ( Also boolean, word -werte vom record) ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz