December 5, 2020

USB

My goal in writing this is to understand (and perhaps also explain) the low level details of USB. I have poked at this on and off over several years.

I did some work in 2020 with the F411 in the context of my "Hydra" framework.

Then in 2023 I got fairly serious writing code for the F103.

A note on the above -- I now consider the RP2040 chip on the Raspberry Pi Pico as an excellent candidate for learning USB, although I have yet to explore it.

All this USB stuff has been just one aspect (but a major one) of work I have done on the STM32 microcontrollers:

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.

Here are some notes, mostly from back around 2020:


Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org