This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

usbmem example with LPC3131

Hi. I'm using LPC3131 demo board from embedded artists as a USB device (Full Speed or HS)

I have problem running the usbmem example

Kernel messages from linux (2.6.18) are:

"new high speed USB device using ehci_hcd and address 14
device descriptor read/64, error -110"

I have tried with modprobe -r ehci_hcd but with same result

Has anyone succeeded in running this example with same environment ?

Any other help would be appreciated. thks

Parents
  • finally found the solution for make it work in USB2.0 configuration. fyi, my host side is a linux kernel 2.6.18.

    For the archive and/or whom interested, here are the changes to apply to usbmem project:

    1. Don't forget to change the target CPU in uVision project and modifying the floating point option

    2. changes to code

    the last modification, the most important, shall be mandatory to even make it work in usb1.1.

    ------------------------------------------------------
    usbdesc.c
    
    /* USB Standard Device Descriptor */
    const UNS_8 USB_DeviceDescriptor[] =
    {
      USB_DEVICE_DESC_SIZE,              /* bLength */
      USB_DEVICE_DESCRIPTOR_TYPE,        /* bDescriptorType */
    WAS=>  WBVAL(0x0110), /* 1.10 */          /* bcdUSB */
    SHOULDBE=>  WBVAL(0x0200), /* 2.00 */
    [snip]
      WBVAL(0x1FC9),                     /* idVendor */
      WBVAL(0x0004),                     /* idProduct */
    WAS=>  WBVAL(0x0100), /* 1.00 */          /* bcdDevice */
    SHOULDBE=>  WBVAL(0x0200), /* 2.00 */
    
    [snip]
    
    /* USB Configuration Descriptor */
    /*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
    const UNS_8 USB_ConfigDescriptor[] =
    {
    
    [snip]
    
    WAS=>  WBVAL(0x0040),                     /* wMaxPacketSize */
    SHOULDBE=>  WBVAL(0x0200),
    
    [snip]
    
    USB_ENDPOINT_TYPE_BULK,            /* bmAttributes */
    WAS =>  WBVAL(0x0040),                     /* wMaxPacketSize */
    SHOULDBE=>  WBVAL(0x0200),
    
    ------------------------------------------------------
    mscuser.h
    
    /* Max In/Out Packet Size */
    WAS =>     #define MSC_MAX_PACKET  64
    SHOULDBE=> #define MSC_MAX_PACKET  512
    
    ------------------------------------------------------
    lpc313x_usbdcd.c
    
    #if 0
    #define DQH_BASE    (EXT_SDRAM_BASE)
    #define DTD_BASE    (DQH_BASE + EP_NUM_MAX * sizeof(DQH_T))
    DQH_T* const ep_QH = (DQH_T*)DQH_BASE;
    DTD_T* const ep_TD = (DTD_T*)DTD_BASE;
    #else
    WAS      => DQH_T ALIGNED(1024) ep_QH[EP_NUM_MAX];
    SHOULDBE => DQH_T ALIGNED(2048) ep_QH[EP_NUM_MAX];
    DTD_T ep_TD[EP_NUM_MAX];
    #endif
    

Reply
  • finally found the solution for make it work in USB2.0 configuration. fyi, my host side is a linux kernel 2.6.18.

    For the archive and/or whom interested, here are the changes to apply to usbmem project:

    1. Don't forget to change the target CPU in uVision project and modifying the floating point option

    2. changes to code

    the last modification, the most important, shall be mandatory to even make it work in usb1.1.

    ------------------------------------------------------
    usbdesc.c
    
    /* USB Standard Device Descriptor */
    const UNS_8 USB_DeviceDescriptor[] =
    {
      USB_DEVICE_DESC_SIZE,              /* bLength */
      USB_DEVICE_DESCRIPTOR_TYPE,        /* bDescriptorType */
    WAS=>  WBVAL(0x0110), /* 1.10 */          /* bcdUSB */
    SHOULDBE=>  WBVAL(0x0200), /* 2.00 */
    [snip]
      WBVAL(0x1FC9),                     /* idVendor */
      WBVAL(0x0004),                     /* idProduct */
    WAS=>  WBVAL(0x0100), /* 1.00 */          /* bcdDevice */
    SHOULDBE=>  WBVAL(0x0200), /* 2.00 */
    
    [snip]
    
    /* USB Configuration Descriptor */
    /*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
    const UNS_8 USB_ConfigDescriptor[] =
    {
    
    [snip]
    
    WAS=>  WBVAL(0x0040),                     /* wMaxPacketSize */
    SHOULDBE=>  WBVAL(0x0200),
    
    [snip]
    
    USB_ENDPOINT_TYPE_BULK,            /* bmAttributes */
    WAS =>  WBVAL(0x0040),                     /* wMaxPacketSize */
    SHOULDBE=>  WBVAL(0x0200),
    
    ------------------------------------------------------
    mscuser.h
    
    /* Max In/Out Packet Size */
    WAS =>     #define MSC_MAX_PACKET  64
    SHOULDBE=> #define MSC_MAX_PACKET  512
    
    ------------------------------------------------------
    lpc313x_usbdcd.c
    
    #if 0
    #define DQH_BASE    (EXT_SDRAM_BASE)
    #define DTD_BASE    (DQH_BASE + EP_NUM_MAX * sizeof(DQH_T))
    DQH_T* const ep_QH = (DQH_T*)DQH_BASE;
    DTD_T* const ep_TD = (DTD_T*)DTD_BASE;
    #else
    WAS      => DQH_T ALIGNED(1024) ep_QH[EP_NUM_MAX];
    SHOULDBE => DQH_T ALIGNED(2048) ep_QH[EP_NUM_MAX];
    DTD_T ep_TD[EP_NUM_MAX];
    #endif
    

Children
No data