EmbeddedRelated.com
Forums

AT91SAM7S USB Mass Storage

Started by Dennis Greenwood September 8, 2006
Hi,

(There is quite a long background to my question, so I apologies in
advance for a longish post.)

I'm building an Atmel AT91SAM7S128/256 based product that needs to
support the USB Mass Storage Device class. My project is currently
compiled under WinARM (but can be GNUARM), GCC 4.1.0.

I have taken the Atmel CDC example code, changed the descriptors and a
few other minor things; pieced it together with the msc_bot and msc_scsi
layers of the USBLPC (wiki.sikken.nl - this is for the LPC214x micros -
thanks Bertrik for a very useful site!)library and got a few things to
happen. Windows XP sees my device, enumerates it happily and even
requests sector 0 from the media successfully. But then things don't go
too well. Also, I've had no success with the USBIF mass storage
compliance tool.

The short of it is that I'm not comfortable with my "solution" so far
and don't really see that I'm going to become comfortable without
spending a *lot* of time digging into the poorly documented UDP (The
AT91SAM7's USB peripheral). I know that my port of the CDC example is
not up to scratch but I'm not sure if I should persevere and sort it out
or go a different route altogether.

Commercial USB device stacks all seem very expensive (>$3K). I could
handle $1K maybe even $2K, but the budget is tight. Another option I
have is to port the Atmel Mass Storage Demo code to GCC. I have the
source code for V1.7 which I think will be fairly robust by now (I
hope). The code itself looks awful but, in principal, I don't think it
would be too difficult or risky to port it to GCC. (It is written for IAR.)

My question at last: can anyone comment on the wisdom of porting the
Atmel demo? Or, can anyone suggest a better alternative (or an existing
port)?

Any pointers would be greatly appreciated!

Regards,
Dennis.