XMega erste Versuche mit USB direkt..

  • 1
  • 2
  • 3
  • 5
  • 6
  • Page 6 of 6
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 22.06.2014 - 16:52  ·  #41
Quote by miparo

Das beiliegende USB Sample, mit dem vielen Schrott darin, ist nur ein Weg wie man es machen kann. Es führen halt viele Wege nach Rom.
Im Internet wird man erschlagen mit Samples über LibUSB + Delphi.

Naja, man findet viele Beiträge die Probleme mit der Verwendung dieser DLL haben, richtig brauchbares ist nicht viel dabei.

Quote by miparo

Aber usbFindDevice ist zuerst Dein Freund.


Zu dieser Funktion habe ich aber eine Frage:
Code
function usbFindDevice(var device: TDevObj): Pusb_device;
var
  bus: Pusb_bus;
  dev: Pusb_device;
begin
  result := nil;
  usb_init;
  usb_find_busses;
  usb_find_devices;
  bus := usb_get_busses;
  while (assigned(bus)) do
  begin
    dev := bus^.devices;
    while assigned(dev) do
    begin
     // if(dev.descriptor.idVendor = VendorID) and (dev.descriptor.idProduct = ProductID) then begin
      if dev.filename = device.FileName then
      begin
        Result := dev;
        exit;
      end; //if dev descriptor
      dev := dev.next;
    end; //while assigned(dev)
    bus := bus.next;
  end;
end;


Das TDevObj kann ich ja nur zum Teil ausfüllen (VID, PID und die Daten die ich im AVRco vorgebe), so weit ich noch weiss ändert sich der Filename bei mehrmaliger Verwendung oder?

z.B. auf meinem Notebook hat das Gerät unter TDevObj.Filename "\\.\libusb0-0002-0x0200-0x0220" auf meinem Desktop-Rechner aber
"\\.\libusb0-0001-0x0200-0x0220"

Weisst Du was diese fortlaufende Nummer zu sagen hat? Ich finde nichts im Internet?

Also wäre das ausgeklammerte besser (Auswahl nach PID/VID), dann nimmt er den ersten an dem Rechner, den er mit dieser PID/VID findet.

Code
     // if(dev.descriptor.idVendor = VendorID) and (dev.descriptor.idProduct = ProductID) then 


Gruss
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 01.07.2014 - 17:41  ·  #42
Quote by miparo

Hallo pvs-deck,
zum Treiber bitte Montag das AVRco Update tesen.


Hallo miparo,

OK, getestet, USB läuft weiterhin, auch wenn das SysLEDblink benutzt wird ......ABER..... ;)

Leider funktioniert jetzt das SysLEDblink nicht mehr ??? hmm.....
Ich kann es definieren, ich kann es verwenden, aber das Flashen der LED sowie die MSG-Anzeige laufen nicht mehr.

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.07.2014 - 12:17  ·  #43
Quote by pvs-deck

Quote by miparo

Hallo pvs-deck,
zum Treiber bitte Montag das AVRco Update tesen.


Hallo miparo,

OK, getestet, USB läuft weiterhin, auch wenn das SysLEDblink benutzt wird ......ABER..... ;)

Leider funktioniert jetzt das SysLEDblink nicht mehr ??? hmm.....
Ich kann es definieren, ich kann es verwenden, aber das Flashen der LED sowie die MSG-Anzeige laufen nicht mehr.

Gruß
Thorsten

Hallo Miparo,

solange ich keine Bulk.Daten über USB Empfange/Sende scheint es zu laufen, aber sobald das erste Paket verarbeitet wird läuft es nicht mehr. Auch ein erneutes "SysLEDflashOn( 0 );" bringt das SysLedFlash nicht mehr zum leben!

Beisst sich da evtl. ein Timer?

Gruß
PVS-Deck
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 22.08.2014 - 15:03  ·  #44
Hallo pvs,
damit du etwas Aufmerksamkeit bekommst: O:)
Dein Demo pvs2014BugTest läuft auf dem 256er einwandfrei bei mir.
Ich habe dem Prog. allerdings auch nur ein paar Pakete geschickt, per USBtester.
Keine Ahnung was da sonst passieren soll.

Das einzigste was mir da auffällt ist der ControlJob, dieser sollte besser im Task laufen bei größeren Progs.

Dein Fehler liegt vermutlich an der Kommunikation zwischen deinen Delphi Prog und dem Xmega.
Wenn wir da helfen sollen, wird eine mini Delphi App und die FW gebraucht.

miparo
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 22.08.2014 - 16:45  ·  #45
Quote by miparo

Hallo pvs,
damit du etwas Aufmerksamkeit bekommst: O:)
Dein Demo pvs2014BugTest läuft auf dem 256er einwandfrei bei mir.
Ich habe dem Prog. allerdings auch nur ein paar Pakete geschickt, per USBtester.
Keine Ahnung was da sonst passieren soll.

Das einzigste was mir da auffällt ist der ControlJob, dieser sollte besser im Task laufen bei größeren Progs.

Dein Fehler liegt vermutlich an der Kommunikation zwischen deinen Delphi Prog und dem Xmega.
Wenn wir da helfen sollen, wird eine mini Delphi App und die FW gebraucht.

miparo


Hallo miparo,

blöderweise ist das nicht mein Delphi-Programm mit dem ich diese Fehler getestet habe, sondern der USB-Tester ist original von euch ;)

Aber in einen meiner anderen USB-Threads (Thema USB-Bootloader) habe ich ein ähnliches Verhalten festgestellt. Da hatte Rolf aber schon ein Update-Patch in 5.4.81 reingemacht, dann lief auch wieder die SysLed im USB-BootLoader. Evtl. ist das ja das gleiche gewesen, ich teste es am WE mal mit der 5.4.81. Vielleicht ist das der Grund wenn es jetzt bei Dir läuft.

Mittlerweile habe ich bei mir alles auf Tasks und Prozesse umgestellt, der ControlJob ist aktuell in einem Task.....schauen wir mal Heute Abend :)

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 25.08.2014 - 17:06  ·  #46
Hallo miparo,

der Fehler scheint die gleiche Ursache wie beim USB-Bootloader zu sein, seit dem Patch 5.4.81 ist dieser weg.

:)

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 30.08.2014 - 10:08  ·  #47
Hallo miparo,

ich habe da noch ein Fehlverhalten vom USBSmart.

Wenn ich mein XMEGA spannungslos schalte und wieder einschalte läuft alles wunderbar.

Aber wenn ich nur den USB-Stecker abziehe und nach ein paar Sekunden wieder aufstecke erhalte ich ab und an die Meldung vom Windows "...konnte USB Gerät nicht erkennen..." im Gerätemanager steht dann "unknownDevice".

Problem ist, das es nicht immer passiert, den USBControlJob starte ich im Task.
Code
{--------------------------------------------------------------}
{$Validate $}
  //  User function to receive EP0 ControlRequests from Host
Function myUSB_ControlRequest(bRequest : Byte; wValue : word) : boolean;
// need always answer from device
Var
  b : byte;
begin
  case (bRequest) of
    $00 : // do a real RESET
          USB_ControlSend(nil, 0);
           DebugOut('USB Befehl:'+ ByteToHex( bRequest ));
          mDelay(100);
          HardWareReset;
        |
    $20 : // write to a Port
//          PortF:= Lo(wValue);
          USB_ControlSend(nil, 0);  // ACK the request
           DebugOut('USB Befehl:'+ ByteToHex( bRequest ));
          Return(True);
        |
    $30 : // Read a Port
          b:= $F;
        //  b:= PinF;
          USB_ControlSend(@b, 1);  // send back ACK and PortF status
           DebugOut('USB Befehl:'+ ByteToHex( bRequest ));
          Return(True);
        |
    $40 : // do Beep
          USB_ControlSend(NIL, 0);  // send back ACK
           DebugOut('USB Befehl:'+ ByteToHex( bRequest ));
          Return(True);
        |
    $60 : // empfange Config
          USB_ControlSend(NIL, 0);  // send back ACK
           DebugOut('USB Befehl:'+ ByteToHex( bRequest ));
            usbAct:= $60;
          Return(True);
        |


  else
    USB_ControlSend(nil, 0);  // unknown vendor request, do an ACK
    Return(true);
  endcase;
end;
{--------------------------------------------------------------}
  // The USB_ControlJob must be repeatedly called to process common PC requests

Task ControlJob(iData, resumed);
begin
  USB_ControlJob;
end;


Kann ich im XMEGA herausfinden, ob die Verbindung unterbrochen ist und bei neuer Verbindung irgendwie ein USB_INIT ausführen?

Gruß
Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 59
Posts: 956
Registered: 09 / 2007
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 30.08.2014 - 14:05  ·  #48
hallo pvs,
da hat Atmel leider den VBUS Pin vergessen bzw. da muss man sich selber drum kümmern.

Das musst du halt mit USBvBUS.USBvBUSpin selbst managen.

Wird aber nächste Woche im ControlJob mit eingefügt, so das USBdriverConnect dann zurück gesetzt wird.



Code

// main ..
  USB_Enable;
  loop

    USB_Attach;
    SetLEDidle;
    mDelay(1000);
     // wait for Windows Setconfiguration
    while (not UsbDriverConnect) or (not USBvBUS.USBvBUSpin) do
      // noch nicht angeklemmt
    endwhile;

   
    USB_RXsetBuffer(1, @USB_Rx_Receive, @RXbuf, 512);   // Link RX Event
    SetLEDidle;
    while UsbDriverConnect and USBvBUS.USBvBUSpin do
      MainLoop;  <<<<<<<
    endwhile;
    USB_Detach;
  endloop;





miparo
  • 1
  • 2
  • 3
  • 5
  • 6
  • Page 6 of 6
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.027492s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI