USB software host controller
bifferos
Posts: 11
I'm interested in opinions on whether it is sensible to use the propeller as a USB host controller.
According to my calculations (bearing in mind I'm a complete propeller noob) the hardware is
capable of sampling a 12MHz bit stream with a few cogs and the right clock speed, so it is also
capable of 'replay' at such a rate. The cog memory seems sufficient to contain a 64-byte
USB packet, so if the transfer modes are restricted it should be possible to talk to
full-speed devices.
I'm just wondering why this hasn't been done (I can only find references to USB devices).
The overall price seems comparable to VNC1L, but with the advantage that you don't need
to use surface mount.
Any thoughts?
regds,
biff.
According to my calculations (bearing in mind I'm a complete propeller noob) the hardware is
capable of sampling a 12MHz bit stream with a few cogs and the right clock speed, so it is also
capable of 'replay' at such a rate. The cog memory seems sufficient to contain a 64-byte
USB packet, so if the transfer modes are restricted it should be possible to talk to
full-speed devices.
I'm just wondering why this hasn't been done (I can only find references to USB devices).
The overall price seems comparable to VNC1L, but with the advantage that you don't need
to use surface mount.
Any thoughts?
regds,
biff.
Comments
like me. It means I must design a PCB, becoming familiar with some CAD package (but which
one?), purchase lots of nasty chemicals, play games with my laser printer to produce aligned
artwork etc... When all this is taken into account, the software implementation doesn't seem
such a bad idea. I think I had in mind partial support for the standard, along the lines of
http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2007/blh36_cdl28_dct23/blh36_cdl28_dct23/index.html
I'm not really interested in USB storage solutions but rather bluetooth at the moment, for
communication with robotics applications. There are a few things working in my favour:
1) No support needed for (un)plugging
2) Endpoints/configs can be enumerated 'offline' perhaps using libusb on a desktop machine - no
need to enum at run-time since I'll know in advance which devices I'll be using.
3) No need for standby/sleep etc..
4) No need for any long cables, the device will be in the same box as the MCU.
5) No hub support needed (you could put extra devices on extra pins)
I think with these limitations, it shouldn't be too tricky, but then, until you've tried something you
never really know I suppose.
then I'm all ears.
There are 4 wires - +5, GND, D+, and D-. I realized that the D+ and D- looked very familiar. So I am thinking of next connecting an RS-485 driver to the D+ and D- and decoding what is actually going on. A scope would come in handy. It may be a lot simpler than the documentation leads one to believe. USB device send packets that either identify the device, pass information, or perform a third [noparse][[/noparse]forgotten] function. Since the Game Controll has no need of dialogue, I suspect it just initializes a listen and wait mode in the USB host.
If the TTL from the RS-485 can be managed directly by the Propeller, we would all benefit from a very handy user interface. I don't expect a full blown USB support. But I do feel there are possiblities of one individual 'low level' devices working very well on a case-by-case basis.
Of course, I am assuming this a simplex device, not a half-duplex.· That may be my downfall.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
PLEASE CONSIDER the following:
Do you want a quickly operational black box solution or the knowledge included therein?······
Post Edited (Kramer) : 3/28/2008 6:37:58 PM GMT
Nice idea about using RS485 to get ttl levels since it means not needing to sample two signals, but I wonder if rs485 silicon will operate at 12MHz? Also, don't forget that both lines go low to signal certain conditions (possibly ones you can ignore for your application), so you need more than just a simple push-pull driver.
Personally I'm less interested in the low speed devices since that's already been done with an AVR (see my link), but I guess you might be interested to port that code to propeller to access your controller. They have it working with a mouse at least.
EDIT: Oh, sorry. Thats high speed mode I'm looking at
I suspect pursuing 12mhz transfers from the start is a bit hairy. Can't one start with slower speed devices? The game controller is extremely central to a lot of Propeller applications. So, finding a way to support it first would be a stepping stone along the way.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
PLEASE CONSIDER the following:
Do you want a quickly operational black box solution or the knowledge included therein?······
You must also remember that there are three types of transfers, Bulk, In/Out, and Isochronous (Two for low speed devices, which don't support bulk). And remember that Isochronous has tight requirements.
It would be far, far easier to just use a MAX3421E. And easier than that to use something like a Vinculum or USBWiz
I'm not saying it'll be a 5 minute job, of course....