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
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