I want to develop mass storage device using LPC2148.I am just referring code from Keil for USBMem. My problem is - I get Get_descriptor command from PC to which I respond with device descriptor. On receiving 8th byte it generates Reset. Then I get Set_address command. On response to it, I execute Set Address command in protocol engine. Then again I get Get_descriptor command (It should actually have index field of 18 but I receive with 64). Again after 8th byte it generates Reset and again gives Set_address command instead of Get_descriptor command for Configuration descriptor. What can be the problem?
I was realizing bulk endpoints one after the other. i.e. USBReEp=0x00000010 USBReEp=0x00000020 That i changed to USBReEp=0x00000030. And i got bulk OUT interrupt.
Could not save the bus hound file but details are - GetMaxLun(2) stall pid CLEARFEATURE(2) -> data - 02 01 00 00 00 00 00 00 canceled -> data - c0010000 no response -> data - c0000005 RESET(2) ok USBCBW
This is bus hound file
Bus Hound 6.01 capture on Windows XP Service Pack 2 (x86). Complements of http://www.perisoft.net bulkoutint Device - Device ID (followed by the endpoint for USB devices) (28) USB Mass Storage Device Phase - Phase Type CTL USB control transfer RESET bus reset IN Data in transfer USTS USB status NTSTS NTSTATUS value ok command complete OUT Data out transfer Data - Hex dump of the data transferred Descr - Description of the phase Delta - Elapsed time from the previous phase to the current phase Cmd... - Position in the captured data Device Phase Data Description Delta Cmd.Phase.Ofs(rep) ------ ----- -------------------------------------------------- ---------------- ----- ------------------ 28.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 26sc 1.1.0 28.0 IN 12 01 00 02 00 00 00 40 .......@ 3.6ms 1.2.0 28.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 36us 2.1.0 28.0 IN 09 02 20 00 01 01 01 60 .. ....' 3.9ms 2.2.0 28.0 CTL 80 06 00 02 00 00 20 00 GET DESCRIPTOR 32us 3.1.0 28.0 IN 09 02 20 00 01 01 01 60 .. ....' 3.9ms 3.2.0 28.0 CTL 80 06 00 03 00 00 02 00 GET DESCRIPTOR 28us 4.1.0 28.0 IN 04 03 .. 3.9ms 4.2.0 28.0 CTL 80 06 00 03 00 00 04 00 GET DESCRIPTOR 28us 5.1.0 28.0 IN 04 03 09 04 .... 3.9ms 5.2.0 28.0 CTL 80 06 0c 03 09 04 02 00 GET DESCRIPTOR 25us 6.1.0 28.0 IN 1a 03 .. 3.9ms 6.2.0 28.0 CTL 80 06 0c 03 09 04 1a 00 GET DESCRIPTOR 27us 7.1.0 28.0 IN 1a 03 41 00 42 00 43 00 ..A.B.C. 3.9ms 7.2.0 28.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 34us 8.1.0 28.0 CTL 01 0b 00 00 00 00 00 00 SET INTERFACE 38ms 9.1.0 28.0 CTL a1 fe 00 00 00 00 01 00 GET MAX LUN 39ms 10.1.0(3) 28.0 USTS c0000004 stall pid 4.3ms 10.2.0 28.0 CTL 02 01 00 00 00 00 00 00 CLEAR FEATURE 27us 11.1.0(3) 28.0 USTS c0010000 canceled 5.0sc 11.2.0 28.2 USTS c0000005 no response 10sc 16.1.0 28 RESET 68us 17.1.0 28 ok 188ms 17.2.0 28.2 OUT 55 53 42 43 08 e0 6f 89 USBC..o. 1.9ms 18.1.0 28 RESET 19sc 19.1.0(3) 28 NTSTS c000009c device data err 5.1sc 19.2.0
We are studying SCSI commands. Now our device appears as removable disk in my computer. Thank you!!! Having problem in answering Read capacity command.
What can be the cause of delay betweem Get_Max_LUN and next command? It is 5sec and then 10 sec.
We were successful in removing that delay. But still not able to respond READ CAPACITY. It gives error 'Time out'. What is meaning of this error? We have written handler for it.
Current status -> I am stuck at same position. This is bus hound file -
Device Phase Data Description Delta Cmd.Phase.Ofs(rep) ------ ----- -------------------------------------------------- ---------------- ----- ------------------ 28.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 6.7mn 1.1.0 28.0 IN 12 01 00 02 00 00 00 40 .......@ 3.2ms 1.2.0 28.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 30us 2.1.0 28.0 IN 09 02 20 00 01 01 01 60 .. ....' 3.9ms 2.2.0 28.0 CTL 80 06 00 02 00 00 20 00 GET DESCRIPTOR 27us 3.1.0 28.0 IN 09 02 20 00 01 01 01 60 .. ....' 3.9ms 3.2.0 28.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 34us 4.1.0 28.0 CTL 01 0b 00 00 00 00 00 00 SET INTERFACE 40ms 5.1.0 28.0 CTL a1 fe 00 00 00 00 01 00 GET MAX LUN 39ms 6.1.0 28.0 IN 00 . 3.8ms 6.2.0 28.2 OUT 55 53 42 43 08 50 67 89 /* CBW without RESET * USBC.Pg. 1.9ms 7.1.0(2) 28.2 IN 00 80 00 02 1f 80 00 00 ........ 1.9ms 8.1.0(2) 28.2 IN 55 53 42 53 08 50 67 89 USBS.Pg. 2.0ms 9.1.0(2) 29 CMD 12 00 00 00 24 00 INQUIRY 68ms 13.1.0 29 IN 00 80 00 02 1f 80 00 00 ........ 5us 13.2.0 29 CMD 25 00 00 00 00 00 00 00 READ CAPACITY 6.0ms 14.1.0 29 SSTS 09 timeout 9.0sc 14.2.0 28 RESET 68us 15.1.0 28 ok 186ms 15.2.0 29 CMD 25 00 00 00 00 00 00 00 READ CAPACITY 810ms 16.1.0 28.2 OUT 55 53 42 43 c0 92 3b 89 USBC..;. 1.8ms 17.1.0 28.2 IN 00 00 00 1f 00 00 02 00 ........ 1.9ms 18.1.0 28.2 IN 55 53 42 53 c0 92 3b 89 USBS..;. 1.9ms 19.1.0 29 IN 00 00 00 1f 00 00 02 00 ........ 7us 16.2.0 29 CMD 28 00 00 00 00 00 00 00 READ 20us 20.1.0 28.2 OUT 55 53 42 43 c0 92 3b 89 USBC..;. 1.9ms 21.1.0 28.2 IN 00 00 00 1f 00 00 02 00 ........ 2.0ms 22.1.0 28.2 IN 55 53 42 53 c0 92 3b 89 USBS..;. 999us 23.1.0 29 IN 00 00 00 1f 00 00 02 00 ........ 6us 20.2.0 29 SSTS 52 data overrun 3us 20.3.0 29 CMD 28 00 00 00 00 00 00 00 READ 496ms 24.1.0 29 SSTS 49 timeout 9.4sc 24.2.0
I am not getting mass storage class reset at all. Even before 1st CBW, there is no reset. SCSI commands continue to come. So i don't get whether i have answered command properly or not.
Now, when i connect my LPC2148 board to PC, i get 'Disk in drive is not formatted. Do you want to format it now?'. And if i say, yes. Then it says, 'Disk in drive can't be formatted'. What is its meaning?
> Now, when i connect my LPC2148 board to PC, i get 'Disk in drive is not formatted. Do you want to format it now?'. And if i say, yes. Then it says, 'Disk in drive can't be formatted'. What is its meaning?
It means no partition structure (Master Boot Record, boot sector etc.) is assigned on your "disk". For "RAM" (SD card) based disk, make partition(s) on the disk before formatting. DOS command, FDISK, or Windows disk management does the job. www.vistarewired.com/.../how-to-resize-a-partition-in-windows-vista
For "ROM" based disk, you have to give the contents of the disk with your program code.
You'll find such a file in many USB examples
Keil "LPC2148 USB Mass Storage Device Example" - DiskImg.c http://www.keil.com/download/files/lpc2148_usbmem.zip
Microchip USB examples - Microchip Application Libraries v2010-02-09 ww1.microchip.com/.../MCHP_App_ Lib v2010_02_09_Installer.zip C:\MicrochipSolutions\USB Device - Mass Storage - Internal Flash\Firmware\Files.c
Microchip one is better than Keil's, because it has many comments.
To realize the FAT format, this MS FAT spec is required. "Microsoft Extensible Firmware Initiative FAT32 File System Specification" www.microsoft.com/.../fatgen.mspx
Tsuneo