Hi,
I know MIDI 1 quite well. But I'm new to MIDI 2.0. And I know a little but about USB. But I have no clue how to get USB MIDI 2.0 running on a MCU like:
NXP: iMXRT 10xx or 11xx
MicroChip: SAM S7x or E7x
I search the internet and this forum. I learned a lot from that. But still I have no idea what would be the best way to get this working.
First learn USB and get MIDI 1.0 working over MIDI? Then work on MIDI 2.0?
Searching for examples and try to port to the correct MCU?
Search for a library that has the MCU already supported?
Any advise is welcome!
Implementing USB is not easy. If you do not have experience with this, you should indeed start with USB MIDI 1.0.
Note that such libraries always depend on the specific USB implementation in the MCU. As far as I know, libraries exist for Teensy, some Arduinos, and STM32.
You should start with the open-source libraries from leading MIDI Association members which are available at www.midi2.dev. You will find a USB MIDI 2.0 device implementation which runs on the AmeNote ProtoZOA development platform, using a Raspberry Pico. It supports USB MIDI 2.0 with a fallback to USB MIDI 1.0 when connected to a legacy system which is not MIDI 2.0 ready. That reasonably is ported to other MCUs. USB Descriptors are easy to get wrong, even for USB experts, so also use the USB MIDI 2.0 Descriptor Builder at the same site. It integrates directly with the code for the ProtoZOA.
Chair of MIDI 2.0 Working Group
Implementing USB is not easy. If you do not have experience with this, you should indeed start with USB MIDI 1.0. . It integrates directly with the code for the ProtoZOA.
1. Buy a $2 Pico.
2. Build/Load the Protozoa code.
3. Read the MIDI UMP spec
4. Experiment (and learn).
5. Understand USB low level code of another platform (USB requests)
6. Port the legacy code with MIDI 2.0 support (you may need still support legacy MIDI USB packets as well)
Join discord for MIDI 2.0, such the one for Microsoft MIDI and (link) as such for a lot of good discussions that may help you understand more of the details.
Hi @Muzak, What do you mean by number 5?
Beside the protozoa code, a reference can be other platforms MIDI implementations to understand USB transactions, that may help to understand how to implement UMP .
Without understanding USB requests, descriptor etc.. it will be a steep learning curve to implement UMP. UMP is not that different from MIDI 1.0 just the packet format is different.
There is a bunch of open source MIDI 1.0 code on the web for several MCU's from Microchip, NXP, and STM.