EmbeddedRelated.com
Forums

Looking for USB stack with permissive licence (mass storage)

Started by Noob April 3, 2012
Hello everyone,

I work for a small set-top box manufacturer. Our boxes have
a 450-MHz SH-4 CPU and typically 128/256 MB of RAM, running
a proprietary RTOS.

At the moment, we are using a proprietary third-party USB stack,
which is mostly a binary release. The source code I do have is
of fairly low quality... :-(

I'm looking for an open source USB stack which would be easily
ported to an SH-4 platform with an RTOS.

I've just finished integrating lwip, and it was a great experience.
The documentation is a little lacking, but they've managed to make
porting very clean, with a clear separation of arch files, and core
files.

Would such a beast exist for USB?
I only need the mass storage class.

I did stumble upon LUFA, but it seems very AVR-specific.
(Although it seems to have been ported to ARM recently.)

http://www.fourwalledcubicle.com/LUFA.php

Are there other options out there?

Regards.
On Tue, 03 Apr 2012 18:02:09 +0200, Noob wrote:

> Hello everyone, > > I work for a small set-top box manufacturer. Our boxes have a 450-MHz > SH-4 CPU and typically 128/256 MB of RAM, running a proprietary RTOS. > > At the moment, we are using a proprietary third-party USB stack, which > is mostly a binary release. The source code I do have is of fairly low > quality... :-( > > I'm looking for an open source USB stack which would be easily ported to > an SH-4 platform with an RTOS. > > I've just finished integrating lwip, and it was a great experience. The > documentation is a little lacking, but they've managed to make porting > very clean, with a clear separation of arch files, and core files. > > Would such a beast exist for USB? > I only need the mass storage class. > > I did stumble upon LUFA, but it seems very AVR-specific. (Although it > seems to have been ported to ARM recently.) > > http://www.fourwalledcubicle.com/LUFA.php > > Are there other options out there? > > Regards.
You might try these guys: http://en.wikipedia.org/wiki/File:Pietenpol.air.camper.g-buco.arp.jpg Not open source, but when I integrated uC/OS-II into a product they were very cost-effective and supplied nicely compilable source code. -- Tim Wescott Control system and signal processing consulting www.wescottdesign.com
On 03/04/2012 18:02, Noob wrote:
> Hello everyone, > > I work for a small set-top box manufacturer. Our boxes have > a 450-MHz SH-4 CPU and typically 128/256 MB of RAM, running > a proprietary RTOS. > > At the moment, we are using a proprietary third-party USB stack, > which is mostly a binary release. The source code I do have is > of fairly low quality... :-( > > I'm looking for an open source USB stack which would be easily > ported to an SH-4 platform with an RTOS. > > I've just finished integrating lwip, and it was a great experience. > The documentation is a little lacking, but they've managed to make > porting very clean, with a clear separation of arch files, and core > files. > > Would such a beast exist for USB? > I only need the mass storage class. > > I did stumble upon LUFA, but it seems very AVR-specific. > (Although it seems to have been ported to ARM recently.) > > http://www.fourwalledcubicle.com/LUFA.php > > Are there other options out there? > > Regards.
If you don't need maximal speed, then maybe you can use something like these: <http://www.ftdichip.com/Products/ICs/VNC2.htm> There is firmware available for these chips for USB mass storage device interfacing, amongst others. It would mean another chip on the board - but no royalties and probably easier development.
Tim Wescott wrote:

> Noob wrote: > >> I work for a small set-top box manufacturer. Our boxes have a 450-MHz >> SH-4 CPU and typically 128/256 MB of RAM, running a proprietary RTOS. >> >> At the moment, we are using a proprietary third-party USB stack, which >> is mostly a binary release. The source code I do have is of fairly low >> quality... :-( >> >> I'm looking for an open source USB stack which would be easily ported to >> an SH-4 platform with an RTOS. >> >> I've just finished integrating lwip, and it was a great experience. The >> documentation is a little lacking, but they've managed to make porting >> very clean, with a clear separation of arch files, and core files. >> >> Would such a beast exist for USB? >> I only need the mass storage class. >> >> I did stumble upon LUFA, but it seems very AVR-specific. (Although it >> seems to have been ported to ARM recently.) >> >> http://www.fourwalledcubicle.com/LUFA.php >> >> Are there other options out there? > > You might try these guys: > > http://en.wikipedia.org/wiki/File:Pietenpol.air.camper.g-buco.arp.jpg
[Picture of a home-built aircraft] I don't understand.
> Not open source, but when I integrated uC/OS-II into a product they were > very cost-effective and supplied nicely compilable source code.
Do you have a link? How long have they been selling their USB stack? Regards.
David Brown wrote:

> Noob wrote: > >> I work for a small set-top box manufacturer. Our boxes have >> a 450-MHz SH-4 CPU and typically 128/256 MB of RAM, running >> a proprietary RTOS. >> >> At the moment, we are using a proprietary third-party USB stack, >> which is mostly a binary release. The source code I do have is >> of fairly low quality... :-( >> >> I'm looking for an open source USB stack which would be easily >> ported to an SH-4 platform with an RTOS. >> >> I've just finished integrating lwip, and it was a great experience. >> The documentation is a little lacking, but they've managed to make >> porting very clean, with a clear separation of arch files, and core >> files. >> >> Would such a beast exist for USB? >> I only need the mass storage class. >> >> I did stumble upon LUFA, but it seems very AVR-specific. >> (Although it seems to have been ported to ARM recently.) >> >> http://www.fourwalledcubicle.com/LUFA.php >> >> Are there other options out there? > > If you don't need maximal speed,
USB 2.0 "Hi-Speed" mode is 480 Mbit/s. My goal is 30 MB/s (240 Mbit/s) of "useful" bandwidth (i.e. considering actual data transferred only). IIUC, the overhead in the USB protocol is fairly significant.
> then maybe you can use something like these: > > <http://www.ftdichip.com/Products/ICs/VNC2.htm> > > There is firmware available for these chips for USB mass storage device > interfacing, amongst others. > > It would mean another chip on the board - but no royalties and probably > easier development.
Hmmm... The chipset we use provides its own USB controller, and the board layout has already been validated. I don't think it is an option, at this point, to add a new chip. Which is why I'm only looking for a software (USB2) stack. I only need support for the mass storage class and bulk transfers (don't know if the other transfer modes are required for normal operation). I find it strange that there are very good TCP/IP open source libraries, but that I can't find a portable, open source USB stack for embedded systems with "powerful" CPUs (powerful compared to micro-controllers, i.e. roughly equivalent to the first Pentium III variant Katmai.) I'll try looking harder. I encourage everyone to jump in the fray if you know something that might prove useful. Regards.
On Wed, 04 Apr 2012 10:20:23 +0200, Noob wrote:

> Tim Wescott wrote: > >> Noob wrote: >> >>> I work for a small set-top box manufacturer. Our boxes have a 450-MHz >>> SH-4 CPU and typically 128/256 MB of RAM, running a proprietary RTOS. >>> >>> At the moment, we are using a proprietary third-party USB stack, which >>> is mostly a binary release. The source code I do have is of fairly low >>> quality... :-( >>> >>> I'm looking for an open source USB stack which would be easily ported >>> to an SH-4 platform with an RTOS. >>> >>> I've just finished integrating lwip, and it was a great experience. >>> The documentation is a little lacking, but they've managed to make >>> porting very clean, with a clear separation of arch files, and core >>> files. >>> >>> Would such a beast exist for USB? >>> I only need the mass storage class. >>> >>> I did stumble upon LUFA, but it seems very AVR-specific. (Although it >>> seems to have been ported to ARM recently.) >>> >>> http://www.fourwalledcubicle.com/LUFA.php >>> >>> Are there other options out there? >> >> You might try these guys: >> >> http://en.wikipedia.org/wiki/File:Pietenpol.air.camper.g-buco.arp.jpg > > [Picture of a home-built aircraft] > > I don't understand. > >> Not open source, but when I integrated uC/OS-II into a product they >> were very cost-effective and supplied nicely compilable source code. > > Do you have a link? How long have they been selling their USB stack? > > Regards.
Whoops! That was supposed to be a link to the Micrium website -- they're the folks that do Micro-C/OS-II (and -III). http://micrium.com/page/products/rtos/usb As I said, I had good experiences with them 10 years ago; it's a nice little OS, but we didn't use any of their add-on stuff. Should you decide to build a plane in your spare time, the Piet is certainly popular (if slow), and you can still get rebuildable Model A engines fairly cheap if you want to be nostalgic -- but that has nothing to do with what you asked. -- Tim Wescott Control system and signal processing consulting www.wescottdesign.com
On Wed, 04 Apr 2012 10:46:04 +0200
Noob <root@127.0.0.1> wrote:

> David Brown wrote: > > > Noob wrote: > > > >> I work for a small set-top box manufacturer. Our boxes have > >> a 450-MHz SH-4 CPU and typically 128/256 MB of RAM, running > >> a proprietary RTOS. > >>
[snip]
> > Hmmm... The chipset we use provides its own USB controller, and the > board layout has already been validated. I don't think it is an option, > at this point, to add a new chip. Which is why I'm only looking for a > software (USB2) stack. I only need support for the mass storage class > and bulk transfers (don't know if the other transfer modes are required > for normal operation). > > I find it strange that there are very good TCP/IP open source libraries, > but that I can't find a portable, open source USB stack for embedded > systems with "powerful" CPUs (powerful compared to micro-controllers, > i.e. roughly equivalent to the first Pentium III variant Katmai.) > > I'll try looking harder. I encourage everyone to jump in the fray > if you know something that might prove useful. > > Regards.
Have you tried pinging your local Renesas FAE? They might have app notey sorts of things with already working code. -- Rob Gaddi, Highland Technology -- www.highlandtechnology.com Email address domain is currently out of order. See above to fix.
On Wed, 04 Apr 2012 10:46:04 +0200, Noob wrote:

> David Brown wrote: > >> Noob wrote: >> >>> I work for a small set-top box manufacturer. Our boxes have a 450-MHz >>> SH-4 CPU and typically 128/256 MB of RAM, running a proprietary RTOS. >>> >>> At the moment, we are using a proprietary third-party USB stack, which >>> is mostly a binary release. The source code I do have is of fairly low >>> quality... :-( >>> >>> I'm looking for an open source USB stack which would be easily ported >>> to an SH-4 platform with an RTOS. >>> >>> I've just finished integrating lwip, and it was a great experience. >>> The documentation is a little lacking, but they've managed to make >>> porting very clean, with a clear separation of arch files, and core >>> files. >>> >>> Would such a beast exist for USB? >>> I only need the mass storage class. >>> >>> I did stumble upon LUFA, but it seems very AVR-specific. (Although it >>> seems to have been ported to ARM recently.) >>> >>> http://www.fourwalledcubicle.com/LUFA.php >>> >>> Are there other options out there? >> >> If you don't need maximal speed, > > USB 2.0 "Hi-Speed" mode is 480 Mbit/s. My goal is 30 MB/s (240 Mbit/s) > of "useful" bandwidth (i.e. considering actual data transferred only). > IIUC, the overhead in the USB protocol is fairly significant. > >> then maybe you can use something like these: >> >> <http://www.ftdichip.com/Products/ICs/VNC2.htm> >> >> There is firmware available for these chips for USB mass storage device >> interfacing, amongst others. >> >> It would mean another chip on the board - but no royalties and probably >> easier development. > > Hmmm... The chipset we use provides its own USB controller, and the > board layout has already been validated. I don't think it is an option, > at this point, to add a new chip. Which is why I'm only looking for a > software (USB2) stack. I only need support for the mass storage class > and bulk transfers (don't know if the other transfer modes are required > for normal operation). > > I find it strange that there are very good TCP/IP open source libraries, > but that I can't find a portable, open source USB stack for embedded > systems with "powerful" CPUs (powerful compared to micro-controllers, > i.e. roughly equivalent to the first Pentium III variant Katmai.) > > I'll try looking harder. I encourage everyone to jump in the fray if you > know something that might prove useful. > > Regards.
Have you checked with your chipset vendor to see if they've got support? I see more and more chips coming out with on-board IP to run their Ethernet or USB ports stashed away in ROM someplace. Of course, you're then depending on code that's written by a group of people who are viewed as an "expense" by company bean-counters. But you might luck out. -- My liberal friends think I'm a conservative kook. My conservative friends think I'm a liberal kook. Why am I not happy that they have found common ground? Tim Wescott, Communications, Control, Circuits & Software http://www.wescottdesign.com
In article <jlh1o9$h7l$2@dont-email.me>, root@127.0.0.1 says...
> > David Brown wrote: > > > Noob wrote: > > > >> I work for a small set-top box manufacturer. Our boxes have > >> a 450-MHz SH-4 CPU and typically 128/256 MB of RAM, running > >> a proprietary RTOS. > >> > >> At the moment, we are using a proprietary third-party USB stack, > >> which is mostly a binary release. The source code I do have is > >> of fairly low quality... :-( > >> > >> I'm looking for an open source USB stack which would be easily > >> ported to an SH-4 platform with an RTOS. > >> > >> I've just finished integrating lwip, and it was a great experience. > >> The documentation is a little lacking, but they've managed to make > >> porting very clean, with a clear separation of arch files, and core > >> files. > >> > >> Would such a beast exist for USB? > >> I only need the mass storage class. > >> > >> I did stumble upon LUFA, but it seems very AVR-specific. > >> (Although it seems to have been ported to ARM recently.) > >> > >> http://www.fourwalledcubicle.com/LUFA.php > >> > >> Are there other options out there? > > > > If you don't need maximal speed, > > USB 2.0 "Hi-Speed" mode is 480 Mbit/s. My goal is 30 MB/s (240 Mbit/s) > of "useful" bandwidth (i.e. considering actual data transferred only). > IIUC, the overhead in the USB protocol is fairly significant.
That seems to be a pretty ambitious target. Where is all that data going to go (or come from)? Do you want that rate in continuous transfer, or only in bursts? Given the overhead and the possibility of other USB traffic, that seems a lot to ask.
> > > then maybe you can use something like these: > > > > <http://www.ftdichip.com/Products/ICs/VNC2.htm> > > > > There is firmware available for these chips for USB mass storage device > > interfacing, amongst others. > > > > It would mean another chip on the board - but no royalties and probably > > easier development. > > Hmmm... The chipset we use provides its own USB controller, and the > board layout has already been validated. I don't think it is an option, > at this point, to add a new chip. Which is why I'm only looking for a > software (USB2) stack. I only need support for the mass storage class > and bulk transfers (don't know if the other transfer modes are required > for normal operation).
Are you doing high-speed transfers now? Do you get anything like 30MB/second?
> > I find it strange that there are very good TCP/IP open source libraries, > but that I can't find a portable, open source USB stack for embedded > systems with "powerful" CPUs (powerful compared to micro-controllers, > i.e. roughly equivalent to the first Pentium III variant Katmai.)
The variations in USB peripherals may be larger than that for Ethernet controllers. In addition, Ethernet and TCP/IP are ancient when compared to USB 2.0.
> > I'll try looking harder. I encourage everyone to jump in the fray > if you know something that might prove useful. > > Regards.
Mark Borgerson
Mark Borgerson wrote:

> Noob wrote: > >> USB 2.0 "Hi-Speed" mode is 480 Mbit/s. My goal is 30 MB/s (240 Mbit/s) >> of "useful" bandwidth (i.e. considering actual data transferred only). >> IIUC, the overhead in the USB protocol is fairly significant. > > That seems to be a pretty ambitious target.
I can live with 20-25 MB/s ;-)
> Where is all that data going to go (or come from)?
A recent 3.5" HDD in a USB2 enclosure (nowadays, 3.5" HDDs sport 64 MB of cache, and can sustain 50 MB/s over SATA)
> Do you want that rate in continuous transfer, or only in bursts?
The worst-case scenario (in terms of required performance) recording (writing) 4 HD programs (say 4x20 Mb/s) while playing one back (20 Mbit/s). I.e. 100 Mbit/s (12.5 MB/s) of continuous bandwidth. Being able to sustain bursts at 30 MB/s would minimize time spent waiting for the bus.
> Given the overhead and the possibility > of other USB traffic, that seems a lot to ask.
What other USB traffic?
>> Hmmm... The chipset we use provides its own USB controller, and the >> board layout has already been validated. I don't think it is an option, >> at this point, to add a new chip. Which is why I'm only looking for a >> software (USB2) stack. I only need support for the mass storage class >> and bulk transfers (don't know if the other transfer modes are required >> for normal operation). > > Are you doing high-speed transfers now? Do you get anything like > 30MB/second?
With the current stack, I've measured 18-20 MB/s sustained. But there are a lot of unnecessary copies because whoever ported the library was clueless about cached/uncached memory zones and DMA.
>> I find it strange that there are very good TCP/IP open source libraries, >> but that I can't find a portable, open source USB stack for embedded >> systems with "powerful" CPUs (powerful compared to micro-controllers, >> i.e. roughly equivalent to the first Pentium III variant Katmai.) > > The variations in USB peripherals may be larger than that for Ethernet > controllers. In addition, Ethernet and TCP/IP are ancient when > compared to USB 2.0.
:-(