XMega erste Versuche mit USB direkt..

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

XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 00:25  ·  #1
Hallo Leute,

ich habe mir mal das DEMO "xMega_USBsmart" angeschaut und will das ganze an meinem STK600 mit ATXMega256A3U zum laufen bringen, der Code ist eigentlich genauso wie in der DEMO.

Code
program USB_Test;


{$NOSHADOW}
{ $WG}                     {global Warnings off}

Device = xmega256A3U, VCC = 3.3;

Define_Fuses
  Override_Fuses;
  NoteBook               = D;
  COMport                = USB;
  LockBits0              = [];
  FuseBits0              = [];
  FuseBits1              = [];
  FuseBits2              = [];
  // Brown-out is obligatory with USB !!!
  FuseBits5              = [BODACT0, BodLevel0, BodLevel1, BodLevel2];

Import SysTick, USBsmart, BeepPort;

Define
  // XMega USB must use the internal 32MHz OSC. So the system must use the 2MHz OSC
  OSCtype                = int2MHz,
                           PLLmul = 16,
                           prescB = 1,
                           prescC = 1;
  SysTick                = 10, adj;                 // msec
  StackSize              = $0064, iData;
  FrameSize              = $0064, iData;

  USBmanufact            = 'E-Lab Computers';       // max 31 bytes
  USBprodName            = 'xMiniUSBApp';           // "     "
  USBpid                 = 30;
  USBvid                 = $1234;
  USBprodRel             = 201;
  USBcurrent             = 200;
  USBvBUS                = PortB.7;                 // port and pin

  BeepPort               = PortR, 0;

Implementation

{$IDATA}

{-----------------------------------------------------------------------------}
Const
  LED                    : byte        = 1;

{------------------------------------------------------------------------------}
{ Type Declarations }
Type
  tBuf64                 = Array[0..63] of byte;

{--------------------------------------------------------------}
{ Const Declarations }
Const

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
Var
  LedCnt                : word;
  // these two buffers must be aligned to even addresses !!
  RxBuf                 : tBuf64, align2;  // USB incomming Buffer
  TxBuf                 : tBuf64, align2;  // USB outgoing Buffer

{--------------------------------------------------------------}
  //  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);
          mDelay(100);
          HardWareReset;
        |
    $20 : // write to a Port
          PortF:= Lo(wValue);
          BeepClick;
          USB_ControlSend(nil, 0);  // ACK the request
          Return(True);
        |
    $30 : // Read a Port
          b:= PinF;
          BeepClick;
          USB_ControlSend(@b, 1);  // send back ACK and PortF status
          Return(True);
        |
    $40 : // do Beep
          BeepChirpH(2);
          USB_ControlSend(NIL, 0);  // send back ACK
          Return(True);
        |
  else
    BeepOut(2000, 4);
    USB_ControlSend(nil, 0);  // unknown vendor request, do an ACK
    Return(true);
  endcase;
end;

{--------------------------------------------------------------}
Procedure USB_CheckRxTx;
Var Count, C: byte;
begin
  if USB_RxDataAvail then
    Count:= USB_RxCount;
    // do something with RXData .....
    // fill TxBuf with data, then...
    USB_TxSend(@TxBuf,64);
    USB_RxSetBuf(@RxBuf);            // we need more data ..
  endif;
end;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  DDRR:= $FF;              // PORTR-> OUTPUT   single LED
  DDRF:= $FF;              // PORTF-> OUTPUT   LEDs
  Incl(PortR.LED);         // LED active low
  USB_SetControlCallback(@myUSB_ControlRequest); // optional, if you need it!
  USB_Init(@RxBuf);        // Attach USB and connect RxBuf for FIRST RX INT
  EnableInts($87);
  BeepOutLH;

  LedCnt:= 0;
  loop
    USB_ControlJob;        // or run in Systick every < 40ms
    USB_CheckRxTx;
    Inc(LedCnt);
    if (LedCnt = 0) then
      Toggle(PortR.LED);
    endif;
  endloop;

end USB_Test.


Aber ich vermisse das DING, wenn Windows versucht einen Treiber zu installieren, es passiert nichts.

Wenn ich richtig verstanden habe muss der PortPin B.7 auf HIGH liegen, damit der Treiber erkennt, es ist ein PC angeschlossen oder?

Zum testen habe ich Data+ an PD7 und Data- an PD6 über einen kleinen Vorwiderstand von ca. 20-22Ohm angeschlossen. Den USB-GND habe ich direkt mit dem GND des STK600 verbunden. Und den VBUS habe ich über einen PULLUP an die 3v3 angeschlossen.

Aber es passiert beim einstecken in den PC gar nichts! Habe ich einen Denkfehler?

Gruss
Thorsten
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 01:24  ·  #2
Hallo Thorsten,
bitte keine Widerlinge in die Data Leitungen legen und für spätere Layout D+- streng symetrisch halten.
Hier gibt es extra ein Atmel USB Pamphlet zu.

Gruß
miparo
chefe
Benutzer
Avatar
Gender: n/a
Age: 50
Posts: 5
Registered: 07 / 2010
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 01:27  ·  #3
und der Pin USBvBUS wird vom Treiber selbst nicht weiter beachtet.

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

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 16:58  ·  #4
Quote by miparo

Hallo Thorsten,
bitte keine Widerlinge in die Data Leitungen legen und für spätere Layout D+- streng symetrisch halten.
Hier gibt es extra ein Atmel USB Pamphlet zu.

Gruß
miparo


Hallo Miparo,

die sind eigentlich nur zum SCHUTZ da, sollten die Flanken der Signale auch eigentlich nicht großartig stören. Im Moment ist es nur auf einem Steckbrett mit STK600.

Wenn es sich an den kleinen 20R stört wundert mich das zwar, aber dann teste ich das mal ohne.
Aber ich glaube daran liegt es nicht!

>> streng symetrisch
Das ist klar, aber im Moment bin ich erst mal auf dem Steckbrett.

Gruß
Thorsten
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 18:07  ·  #5
hallo thorsten,
die widerstände machen da nichts, denke ich. symetrisch ist auf jeden fall ab usb 2.0 wichtig, bei usb 3.0 absolut.
ich hab da aus lust und laune vor monaten mal so eine funktionierende usb3.0 platine gebaut, liegt jetzt allerdings nur rum.

aber ich kann bestätigen, daß der usb-smart läuft, mit und ohne widerstände in den datenleitungen. ich hab da mal für einen kumpel unter anderem so einen signalgenerator bis 4.3 Ghz gebaut, steuerbar über rs232, lan (mit w5100) und usb-smart. und alles lauft einwandfrei mit den bisherigen avrco-treibern. da warte ich nur auf die mal irgendwann angesagten weiteren versionen mit usb-streaming oder lan mit w5300 usw....... aber als rentner hat man ja zeit genug.

also wenn du dich an die demos hälst, sollte das eigentlich funktionieren mit den libusb-treibern und dem avrco-programm.

golf
Attachments
XMega erste Versuche mit USB direkt..
Filename: BiteSLAN ohne Gehäuse.jpg
Filesize: 167.52 KB
Title:
Download counter: 215
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 18:14  ·  #6
Die Serienwiderlinge stören nur da der USB die schon On-Chip hat.

http://www.atmel.com/Images/doc8388.pdf

Schön dran halten :)

Quote
aber ich kann bestätigen, daß der usb-smart läuft,


Der läuft schon seit über einem Jahr in den neuen ISP3 und UPP2 Programmern im Bootloader.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 18:28  ·  #7
Hallo Golf,

der erweiterte USB Treiber und der neue Wiznet sind in der Pipeline.
Ist nicht vergessen, aber es kommt immer anderst als man denkt.
Gestern Abend haben Miparo und ich darüber gesprochen und die
Prioritäten festgeklopft. Als nächstes der grosse USB.....

rolf
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: XMega erste Versuche mit USB direkt..

 · 
Posted: 13.05.2013 - 18:56  ·  #8
hallo rh,

finde ich super. dann könnte ich evtl für meinen signal- /modulationsgenerator die nf über usb streamen und das ding könnte direkt fm/am.... modulieren über die über usb angelieferte nf.
datenübertragungen natürlich ebenso.....
der fmhub. baudrate. usw.usw... direkt einstellbar.


golf
Attachments
XMega erste Versuche mit USB direkt..
Filename: BiteS-USB Test Version 0.1.jpg
Filesize: 47.06 KB
Title:
Download counter: 182
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Page 1 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: 17 · Cache Hits: 15   142   157 · Page-Gen-Time: 0.033878s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI