USB Host/OTG support

I’m looking at the schematics of the Seed and Pod, and am a bit confused about USB Host and OTG support. For OTG support there should be a switched Vbus line, while on the seed the Vbus is connected through a diode so can never supply voltage to the USB device.

On the Pod the Vbus is connected only to the protection circuit U7, so no power can be supplied there either.

Am I missing something, or is OTG support only meant for self powered devices or so? For bus powered devices even powered USB-hubs are not a solution as the STM32 usb host library apparently doesn’t support hubs.

@Piers good question, was wondering the same thing. Boards like the Teensy 3.6 and 4.1 break out a second USB bus from the processor, so you can power the board from USB at the same time as host and power a MIDI controller from a second bus …

https://www.pjrc.com/store/teensy41.html

Something like that would have been great on the Daisy as well - no sure that is intended? Maybe somebody has already whipped up a smart workaround but I think it would require using some additional circuitry.

On the Kickstarter page it says

With full OTG-support as host and device on the built-in micro USB port, along with additional pins for a second port …

So I’d expect it to be able to supply power to bus powered USB MIDI devices, which also sounds like a very common use case. Also in the comments there are some questions asked about USB host support.

I’m very enthusiastic about the Daisy ecosystem, but a 5V pin is quite a big omission I feel. I hope the next hardware revision will have a 5V pin and a power supply implemented more like the Axoloti,
with a STMPS2161 power switch or similar instead of some diodes. For details see the Axoloti schematics.

Also for a DIN/TRS MIDI out shield the easiest/safest option is to use 5V, since that is not available 3.3V should be used instead with 10 and 33 Ohm protection resistors, which don’t really provide enough protection against short circuit. Is that why there is no MIDI out on the Pod?

@piers would be interesting to see how Electro Smith suggests to hook things up then.

If you wanted to use the USB port for hosting you would have to power the Daisy Seed via the VIN pin, and then it wouldn’t be a problem to add a regulator if you wanted one for 5V.

You could also come up with a way to power the VBUS then I suppose?

For hardware MIDI I/O we’ve alway used the circuit on the Teensy site found here https://www.pjrc.com/teensy/td_libs_MIDI.html

That one has worked well for us in a number of projects and hasn’t failed us yet.

@MakingSoundMachines 2 x 47 Ohm is more protection than 10 and 33 Ohm, but still drawing 35mA from the MCU pin when there is a short, while the specs say max. 20mA per pin. Did you test what happens on a short circuit? Especially with TRS MIDI there can be many things plugged in accidentally and it would be nice if the pins don’t break.

I’m too looking forward to an Electro Smith answer about the USB host.

1 Like

@andrewikenberry @mikenkeys (or who more is part of the Electro Smith crew?) Can you elaborate on this? Did USB OTG/Host support not make it in the end?

@Piers Host/OTG isn’t fully supported on the built-in USB due to complexity of the power (additional ICs, etc.) that would have been introduced to accommodate it.

However, Host support is possible with the external USB pins, though the current breakout boards only use it as a device. Software support for USB Host still has to be added as well.

There are plans for making additional breakout boards in the future. Some of which would include USB Host hardware.

Hope that answers your questions!

Hi @shensley, thanks for your answer. I see on the Daisy Seed page it now correctly says

Micro USB port along with additional USB pins for full OTG-support as host and device.

A little mistake on the Kickstarter page can happen. I’m not too sad not having OTG on the main USB port. The people that specifically asked about this in the Kickstarter comments might feel misleaded though.

What worried me most is that there is no 5V break out pin, so such a breakout board with USB host would need external power. So a Patch like board with USB host would need for example an extra micro-USB port for power, so the whole thing will have two micro-USB ports which could power the Daisy, but only one of them also powers the USB host.

Also since two USB device ports don’t seem very useful (do you have some usage in mind?), I think a lot of people expect USB OTG to be working on the Pod, Petal, Patch and Field.

1 Like

Hi @shensley and @piers,

I guess I’m one such user that expected host mode on the Pod. Can I just make sure that I understand correctly:

(1) USB host most is not support on Pod, due to hardware limitations.
(2) USB host isn’t implemented in software, so atm one couldn’t build a new board with USB host?

The breakout pin issue, I don’t fully understand. I get that because of the lack of the 5V breakout pin, you could not power a board through the daisy-board itself (by plugging USB into the daisy). However, given that it’s a breakout board anyway, could you not power the breakout board via USB and the power the daisy from the board? Sorry if I’ve misunderstood.

Any clarifications would be really welcome!

  1. Correct, we wanted the pod to be an example of a self-powered device using the built-in USB connector.

  2. The current libdaisy code does not support Host USB, but as soon as we get through a few features (I’ll be posting a roadmap for planned features on the repo, and on the forum in the next week or so).

We do have plans down the road for creating other break out boards that can act as examples of other hardware people can make, a device featuring USB host is near the top of that list, but the timeline for those is quite far out. (We’d like to support the hardware we’ve made by filling out the software as much as possible first.)

If you want to DIY some host hardware, you can absolutely power the Daisy Seed from the VBUS pin, and then wire the datalines to the external USB pins on the daisy. As for software, STM32CubeMX can dump out generic class initialization code for the various Host Classes. (The existing CDC device class in libdaisy is a small wrapper around this generated code.)

I’ll be posting a road map of planned features on the various repos, and here on the forum some time in the next week or so.

1 Like