Downloads
release
dev builds
extras
themes
Documentation
manual
wiki
device status
Support
forums
mailing lists
IRC
Development
bugs
patches
dev guide
Search
Donate
Search
| Go
Wiki
>
Main
>
SummerOfCode
>
SummerOfCode2007
>
UsbSoftwareStack
---+!! USB software stack ---++!! %RED% *WARNING* %ENDCOLOR% the information on this page is obsolete! See PortalPlayerUsb %TOC% ---++ About In the area of “System-On-Chip” microprocessors, which have everything from power management over audio hardware (DAC and ADC) to USB (Device/Host/OTG) in one chip, the processing power is big enough to move from hardware based components to software based ones. A very good example is the Archos Jukebox units [1], which have used chips to handle mp3 decoding and USB2ATA-Bridge. In contrast to it there is the SanDisk Sansa player [2], which makes use of software codec’s to de/encode audio and needs a software based USB Stack. Always new hardware targets are big challenges for software developers, in this case the RockBox community [3], because you need to design new subsystems in a very portable way and keep every time in mind that you are working on an embedded device. The goal for this [[SummerOfCode2007][Summer of Code 2007]] project will be to write a portable USB stack, with the main focus on the Sansa e2xx players. I'd rather have this formulated as 'first test platform on sansa e2xx, but to be used on all targets that do not have an USB/ATA bridge' -- PeterDHoye What should the usb stack support: * USB device mode - use RockBox as mass storage device to copy music, pictures,... Optional if time permits: * USB host mode/OTG - allow RockBox to be an USB host -> connect an usb stick to the dap and copy data (if there is enough time). OTG should be the least of our concerns as iriver engineers disabled this on h300 and I don't know if other targets have this possibility (X5 maybe?). In any case, HOST mode will be a separate stack as we do not have a target that needs both host and device SW stacks -- PeterDHoye ---++ The plan As writing an USB stack is not an easy task I will look at existing open-source solutions and port one of them to RockBox or I will use the best fitting one as "place to look" when I do the coding work of an usb stack from scratch. Here is a list of candidates found: * Linux Gadget API * http://developer.berlios.de/projects/usb4rt * http://porus.berlios.de/ * http://sourceforge.net/projects/lpcusb * UsbOnTheGoSupport has a demo stack of philips attached at the bottom ---++ Current Stuff * IRQ handler: OK * Include Gadget include-files and modify them to fit into RockBox: OK * get modified arotg_udc driver compiling: work in progress * include gadget driver for file storage: todo ---++ Evaluation In the evaluation process I looked at every usb stack to see if the following requirements are fulfilled. * Layer based architecture? * How easy is it to add support for a new hardware * How easy is it to add support for new classes? * Source code quality.. is a brutal hack or a easy-going design * Dependencies (kernel, runtime enviroment) * How much is already done (classes,...) * <nop>UsbOTG ---++ *usb4rt* USB for Real-Time aims at providing a hard real-time capable implementation of an USB stack on top of Linux/Xenomai. It comes with a stack core and an UHCI host controller drivers. Future work will deal with a EHCI (2.0) and various high-layer drivers. Pros : * The design of this usb stack is inspired by the "normal" linux usb stack. * It should be quite easy to add new hardware, because of its good design. At the moment this stack supports uhci usb controllers * easy-going Cons : * The sourcode of this stack does not include any single line for class stuff. Maybe the stack uses classes provided by "normal" linux kernel. * Depends heavily on "normal" linux kernel, so if this stack will be used we need to clean it up. * Core and uhci are done. Provides a simple usb ping utilitiy for testing %NO% ---++ *porus* PORUS is a portable USB stack for USB peripherals. It handles enumeration and many standard control requests, and provides a portable API for performing USB transactions. Pros : * This stack offers a layer from usb core to usb hardware. * The usb-hw interface needs to be implemented. * In the sourcecode you can find a lot of documentation and its easy to read/understand * No deps Cons : * Does only the very very basic usb stuff and so there isnt anything class realated. * Only the usb core and a port to a usb chip %NO% ---++ *lpcusb* lpcusb is a small usb stack for the built-in USB controller in LPC214x microcontrollers. Pros : * small and easy to read code * No deps Cons : * the layer design is not finished, the class part exists only in example folder to show how to work with this usb stack * to support new devices some work is needed, as this usb stack is wirrten for LPC214X controllers only * There exits only some examples, but there are no classes * core and some examples %NO% ---++ *WASABI-h* Pros : * Offers also a layer based design. * There is no need to add extra classes * Looks okay, but i dont like tabs :) * No deps * core, driver for ISP1362/ISP1363 and _host_ classes for storage, printer, audio, hid, hub Cons : * No standard _device_ classes like UMS * To support more devices a lot of work needs to be done, as the whole stack was written for ISP1362/ISP1363 %NO% ---++ Architecture <img src="%ATTACHURLPATH%/usb_stack_design.jpg" alt="usb_stack_design.jpg" /> ---++ Documentation List of documentation that may be usefull: * http://en.wikipedia.org/wiki/USB_On-The-Go ---++ Progress [[http://austriancoder.blogspot.com/search/label/SoC][Blog of ChristianGmeiner]] [[http://www.christian-gmeiner.info/soc/][Code progress]] [[%ATTACHURL%/usb_dump1.zip][usb_dump1.zip]]: dump of sansa usb registers inside manufacturer mode (thanks webguest83 whoever you are) [[%ATTACHURL%/usb_0.txt][usb_0.txt]]: reg dump in manufacturer mode (some more regs than in the zip) [[%ATTACHURL%/20070829_command_verification.txt][20070829_command_verification.txt]]: result of usb test suite as on 29/08/2007
I
Attachment
Action
Size
Date
Who
Comment
txt
20070829_command_verification.txt
manage
9.7 K
29 Aug 2007 - 22:41
PeterDHoye
result of usb test suite as on 29/08/2007
txt
usb_0.txt
manage
2.5 K
16 Aug 2007 - 00:03
PeterDHoye
reg dump in manufacturer mode (some more regs than in the zip)
zip
usb_dump1.zip
manage
3.4 K
15 Aug 2007 - 20:51
PeterDHoye
dump of sansa usb registers inside manufacturer mode
jpg
usb_stack_design.jpg
manage
42.3 K
24 May 2007 - 12:43
ChristianGmeiner
usb stack design
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r25
<
r24
<
r23
<
r22
|
B
acklinks
|
V
iew topic
|
M
ore topic actions
r25 - 28 Mar 2008 - 17:38:27 -
JustinHannigan
Parents:
SummerOfCode
>
SummerOfCode2007
Copyright © by the contributing authors.