Thank you all for the replies!! Awesome, very useful info as always
I can see why most of you are against the idea of having 2 MCUs. Ironically your answers actually convinced me this is the way to go
Let me give you a bit more context (for simplicity I'll call MCU 1 my main MCU and MCU 2 the MCU handling the USB):
- MCU 1 doesn't do anything complicated code-wise (like USB, WiFi, graphics, or DSP f.x.)
- Timing is very important on MCU 1 (unlike the USB-side which does not need to be as precise)
- Because of the first 2 points, the code on MCU 1 is all "bare metal": I'm not using any lib, I configure all peripherals directly and even a (small) part of the code is written in Assembly for optimisation
- Thanks to that I'm actually beating my competitors by a ton performance-wise, and I can get a small not-powerful <$1 MCU to do it
Hence my idea of having a second MCU:
- That would save me tons of work re-writing/adapting the whole code for a different MCU
- I would not have to worry about optimisation on the code of MCU 2
- I could implement USB relatively fast using a lib like TinyUSB (thanks for the tip!)
- It's so hard nowadays to find an MCU that is in stock - I know I'm very stuck with my current MCU 1 (but for now the GD32E230 series seems very available), but at least for MCU 2 I can easily change if I need to, thanks to the use of the library
Then the communication between the 2 MCUs could be very simple, f.x. UART:
- like I said above timing on the USB commands is not an issue - besides MIDI is UART so all it would add is a (tiny) bit of latency, or have I missed something?
- how is that so complicated? On MCU 1 I'll simply handle UART with an interrupt - much simpler than having to add a whole USB stack. And on MCU 2 it's just converting the MIDI messages into UART and vice-versa. Or have I missed something here as well?
And yes a standalone IC like the CH345 would be perfect, but I am also considering adding firmware update over USB. Which I think (please correct me if I am wrong) is easier when you have a second MCU handling the USB? The MCU 2's code will not need to be updated, as it will simply "forward" the commands, and then it can connect to the SWD interface of the MCU 1.
(just like most of the STM32 development boards for example, with an STM32F103 acting as an ST-Link connected to the main MCU's SWD interface)
So unless I am wrong all is left is to find a decent MCU 2!
-> RP2040 looks good - and yes that price is insane for the amount of power - but it needs a separate flash chip tho?
-> I'm trying to stay away from the xx32F103 series since this chip is so demanded... $22 for 1 sample no thanks
-> Ideally I'd like a GigaDevice to stay in the same brand, but TinyUSB does not list them as supported - so I'll probably end up with an STM32
Thank you all again - I'll keep searching and updating here. If you have anything to say about my little debate I'll happily hear it!

Simon
PS: Apologies for not giving the whole picture before - I think I needed to read your answers to get it clearer in my head