USB Host controller

I want to port Maxim MAX3421E USB host controller code to Arduino. The code is [censored] here; in addition to that there is some short description on my site( and link to the code). The code is being developed for Microchip 8-bitters, however, the only hardware-specific part of it is SPI peripheral initialization, the rest is written in plain C. I have the following questions:

  1. Does it make sense? The MAX3421E is very nice controller for small micros - it does all the timing, acknowledgements, etc., even I/O buffers are not necessary since it has its own. However, it's 3.3V part and as far as I can see, there is not too many 3.3V Arduinos.
  2. What 3.3V Arduinos are available? So far I can only find one called Pro from Sparkfun. I need something full-size to be able to wear a protoshield.

Thank you,
Oleg.

seeeduinos 5V/3.3V selectable by a switch

Could you use a 5V to 3.3V level shifter chip such as the MAX3370?

There is quite a bit of signals to level shift, about 10. It's not a big deal by itself since there will be plenty of space left on the shield board anyway. However, I'd like to avoid extra soldering during prototyping and use 3.3V, at least for now.

I'd guess (since I couldn't find the datasheet) only 5 are required (4 for SPI plus the interrupt).

One of the 3.3V arduinos should do nicely.

Looks like a nice way to add a USB keyboard to an arduino. Be sure to let us know when you succeed!

-j

Be sure to let us know when you succeed!

I'm soldering a shield already. It pays to live close to Sparkfun :-).

It pays to live close to Sparkfun .

No, it would cost me a fortune if I lived close to Sparkgap :wink:

Lefty

Made MAX3421E talk. Wondering if pins that I use are right?

http://www.circuitsathome.com/mcu/programming/arduino-usb-host

Got low-level functions working. The code is here -> GitHub - felis/ArduinoUSBhost: Arduino firmware to provide USB host functionality using MAX3421E USB host controller, the quick demo here ->http://www.circuitsathome.com/mcu/programming/arduino-usb-host-part-2-classes.

I may have to stand on your shoulders pretty soon, have been kicking around an idea for a while. Lots of cameras can be controlled over USB using PTP, including most Nikon DSLRs, many Canons, etc. The USB interface allows you to control pretty much every aspect of the shot. End goal is very portable device (instead of a laptop) that allows you to make fine-tuned bracketed exposures with no limits on number of shots or adjustment, interval shots, etc. The libgphoto2 project has done most of the work figuring out what cameras support which functions.

What is "standing on my shoulders"? I am from Russia originally and have difficulties understanding idioms:-). Is it good or bad?

It means that I would use your work (which you have been so kind as to document thoroughly) as a foundation to build up a higher level application.

You are standing on the shoulders of the Arduino development team, who are standing on the shoulders of the Wiring team, who are standing on the shoulders of AVR-GCC team, and so on. :wink:

What is "standing on my shoulders"?

It's a compliment and an acknowledgement.

These may shed some light...

http://www.aerospaceweb.org/question/history/q0162b.shtml

  • Brian

It means that I would use your work

Please do. I'll be glad to help; hoping to have some time on a weekend to continue porting the code. My biggest problem is lack of C++ knowledge, but I'm working on it.

I finished porting USB transfers. There is a new code in the repository and an article http://www.circuitsathome.com/mcu/programming/arduino-usb-host-part-3-descriptors

It took a while but I'm getting there:-). Next one will be describing talking to USB keyboard. Also, I started studying Nikon SDK to see how they implement camera control - doesn't seem too difficult.

Not quite software related, but still - I recently routed a shield for MAX3421E and just received first prototype of a PCB from a boardhouse. Take a look -> http://www.circuitsathome.com/mcu/usb-host-shield-for-arduino-first-prototype

Limping along, slowly but surely :-). I posted an example, demonstrating how to poll USB keyboard, take a look -> http://www.circuitsathome.com/mcu/programming/arduino-usb-host-part-4-peripherals I'm now cobbling together a "LCD via GPIO" code so that I can actually see what I'm typing.

Cool... I have been using the PS2 library currently but I have a mini USB keboard that I would like to use...

What capabilities does the shield have? Can it in theory read text from USB flash drives like the microSD card shield can do?

Mowcius

This is standard USB host. It supports all USB 2.0 transfers, even isochronous (if device is slow enough). So in theory, working with anything that talks USB is possible - flash drives, webcams, audio, printers, etc.; limiting factor would be Arduino's program memory size.

The shield also have 16 general purpose lines - 8 inputs and 8 outputs, where inputs can also be programmed as interrupt lines. Can be used to control LCD, buttons, and such.