This is a damned if you do, damned if you don't situation
The title sums it up. USB is such a layered protocol that by the time you're done with a "just the memory stick / mass storage" implimentation, you have everything you need anyway. For a simple 4-wire interface, USB has LOTS of code requirements.
A SD Flash card implimentation is another story. The flash cards in the new generation of cell phones are the size of a fingernail, and this is actually what is on the USB memory sticks. The stick has a USB client flash controller chip and a flash RAM. If you remove the USB from the picture and use one of the bigger flash devices, like in a camera (the 1.5 inch square ones so you don't loose the F^[&ing thing), you end up interfacing across a SPI bus; that protocol is much simpler from a SW perspective, but you still need to impliment a FAT32 filesystem handler, etc.
The USB code can be purchased/licensed and is a complete solution, the flash card solution is a home-brew code chunk. For a small development team, looking at time-to-market, staffing, product longevity, etc. it still seems that purchasing the USB software stack is still the better solution and offers best flexabillity. Memory sticks go obsolete, a transport protocol doesn't. |