A note on the above -- I now include the RP2040 chip on the Raspberry Pi Pico as an excellent candidate for learning USB.
I intended (back in 2020) to write my own USB device driver for an STM32 family chip, probably the STM32F411 and/or some other F4 chip in the STM32 family. These are ARM based microcontrollers, not that the CPU architecture particularly matters for the purpose of learning USB details.
So, I will unavoidably end up discussing specific aspects of the STM32 USB subsystem. And I will be writing a driver for a slave device, not a host driver as might be used in a linux or windows system.
Tom's Computer Info / [email protected]