Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.787 Beiträge
 
Delphi 12 Athens
 
#12

AW: Delphi 7, mit USB auf Cypress CY7C68013 FX2 zugreifen

  Alt 14. Feb 2025, 01:20
Das Problem ist, dass es die Software für das Board offenbar nirgends mehr gibt. Das war die "Cypress Suite USB", die oben ja auch schon erwähnt wurde. Darin lag eine CyUSB.dll, die exportierte Funktionen hat, mit denen man Daten lesen und schreiben kann.

Eventuell bekommst du die Software noch hier:
https://gitcode.com/open-source-tool...top&type=card&

Wenn du die Software noch auftreiben kannst, könnte es so ca. gehen:
Delphi-Quellcode:
unit CyUSB;

interface

uses
  Windows, SysUtils;

const
  CyUSB_DLL = 'CyUSB.dll';

type
  // Funktionsdefinitionen aus der CyUSB.dll
  TOpenDevice = function(VendorID, ProductID: Word): Pointer; stdcall;
  TCloseDevice = procedure(Device: Pointer); stdcall;
  TWriteUSB = function(Device: Pointer; Endpoint: Byte; Buffer: Pointer; BufferSize: DWord): DWord; stdcall;
  TReadUSB = function(Device: Pointer; Endpoint: Byte; Buffer: Pointer; BufferSize: DWord): DWord; stdcall;

var
  OpenDevice: TOpenDevice;
  CloseDevice: TCloseDevice;
  WriteUSB: TWriteUSB;
  ReadUSB: TReadUSB;

procedure LoadCyUSB;
procedure UnloadCyUSB;

implementation

var
  DLLHandle: THandle;

procedure LoadCyUSB;
begin
  DLLHandle := LoadLibrary(CyUSB_DLL);
  if DLLHandle <> 0 then
  begin
    @OpenDevice := GetProcAddress(DLLHandle, 'OpenDevice');
    @CloseDevice := GetProcAddress(DLLHandle, 'CloseDevice');
    @WriteUSB := GetProcAddress(DLLHandle, 'WriteUSB');
    @ReadUSB := GetProcAddress(DLLHandle, 'ReadUSB');
  end;
end;

procedure UnloadCyUSB;
begin
  if DLLHandle <> 0 then
  begin
    FreeLibrary(DLLHandle);
    DLLHandle := 0;
  end;
end;

initialization
  LoadCyUSB;

finalization
  UnloadCyUSB;

end.
Verwenden:
Delphi-Quellcode:
program TestFX2USB;

uses
  Windows, SysUtils, CyUSB;

var
  FX2Device: Pointer;
  DataOut: array[0..63] of Byte;
  DataIn: array[0..63] of Byte;
  BytesWritten, BytesRead: DWord;

begin
  // 1. Gerät mit Vendor-ID und Product-ID öffnen
  FX2Device := OpenDevice($04B4, $1004); // Beispiel: Cypress Vendor-ID
  if FX2Device = nil then
  begin
    Writeln('FX2-Gerät nicht gefunden!');
    Exit;
  end;

  Writeln('FX2-Gerät verbunden!');

  // 2. Daten an FX2 senden (Bulk OUT auf Endpoint 0x02)
  FillChar(DataOut, SizeOf(DataOut), $A5); // Beispiel-Daten füllen
  BytesWritten := WriteUSB(FX2Device, $02, @DataOut, SizeOf(DataOut));
  Writeln('Bytes gesendet: ', BytesWritten);

  // 3. Daten vom FX2 lesen (Bulk IN von Endpoint 0x86)
  BytesRead := ReadUSB(FX2Device, $86, @DataIn, SizeOf(DataIn));
  Writeln('Bytes empfangen: ', BytesRead);

  // 4. Gerät schließen
  CloseDevice(FX2Device);
  Writeln('Verbindung geschlossen.');
end.
Es gibt noch das EZ-USB™ FX3 Software Development Kit, aber ob diese aktuellere Software mit der alten Hardware funktioniert und genauso ansteuerbar ist, weiß ich nicht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat