In recent years, USB flash drives have become very popular. They can plug into almost any PC and they're automatically recognized. Why not try to interface one to a microcontroller based project, so it can the USB flash drive's memory? The short answer: USB is a complex and difficult protocol to implement. Compact Flash (used in most digial cameras) is much better suited for interface to a microcontroller. However, for hobbists and students who already own and use a USB flash drive, this advise is rarely appealing. Switching to Compact Flash and buying a USB-based reader for CF just doesn't seem the same as directly supporting a USB flash drive. Having said USB is complex and difficult, it's very easy on high-end systems (like PCs) which include all the hardware and software needed to communicate with USB devices, because the chipset vendor and operating system programmers have done a lot of work. To implement USB on some other system that doesn't already have all the work done, the first source of information is the USB specification. Fortunately, it is a free download from www.usb.org http://www.usb.org/developers/docs/usb_20.zip The main PDF file is 650 pages. However, chapters 3, 4 and 5 (titled "Background", "Architectural overview" and "USB Data Flow Model") span only about 70 pages with a very good overview of the most important concepts. After reading those 70 pages, you should have a very clear that USB has only one "host", possibly many "devices" and maybe some "hubs" in between them. The important point is that USB is not a peer to peer protocol. In USB, there is only 1 "host" which is a much more complex design that is responsible for controlling all communication on the bus. The "devices" are much simpler and only need to respond to queries from the "host". USB flash drives are USB devices, so to communicate with one, you will need to implement the complex host functionality. Once you can control the bus and query the endpoints, you will then need the USB Mass Storage specification to learn how to read and write sectors. The good news is that only "control" and "bulk" endpoints are used (the USB Mass Storage 1.1 spec, which uses "interrupt" transfers, was never adopted by Microsoft and as a result almost all USB key drives only really support the 1.0 bulk-only protocol). Once you can read sectors from the drive, you will need to learn about the FAT16 filesystem. A difficult-to-understand specification is available from Microsoft. I have written a page that attempts to explain FAT32 (very similar) for beginners: http://www.pjrc.com/tech/8051/ide/fat32.html If you managed to read the 70 pages in chapters 3, 4 and 5 of the USB specification, you should understand that implementing the USB host functionality is a large and complex project. In the mid-90s, USB was often called the "useless serial bus", because it took Microsoft YEARS to finally include a quality USB implementation in the latter OSR2 versions of windows 95 and finally windows 98. Implementing USB host functionality is not a simple project to be taken lightly, and certainly not something most students could be expected to accomplish within the scope of a 1 year project. If you must interface to a USB flash drive or other USB device, seek out a chip that implements USB host features and comes with the OHCI or EHCI code that implements the complex management of the USB bus. Or simply switch to Compact Flash, which is fairly easy to interface to most microcontrollers.