kovigor, ну не нзаю.. по началу да, глаза разбегаются при виде кувой кучи регистров, но со временем вроде не все так муторно

я сам не помню на чем начинал, но точно помню, что на каком-то ARM7 делал CDC. После прочтения документа usb_20.pdf и даташита все более-менее стало понятно. примеры реализации смотрел, если что не получалось. точно помню, что не под тот чип,а под какой-то вообще Пик.
В самой USB главное хорошо вкурить в стейт-машины ендпоинтов, а там и назначение регистров контроллера станет более-менее понятно.
MSC - отдельная история, тоже в ее стейт-машинах надо разобратся, ну а далее просто набить поддержку необходимых scsi-команд. тут готовый пример может помочь, вроде на кейле под lpc есть, переделать под что-либо другое труда не составит.
С STM32 проблем не возникло(за исключением вызванных моей невнимательностью чтения даташита на СТМ). Библиотек не использовал, все вручную. Да, кода много, где-то 1500 строк на чистом C, но код не сложный, в основном "набивка" дескрипторов и стейт-машин.
Могу дать свою реализацию как пример, только сомневаюсь,что чем-то помогут мои 45кб непонятного гавнокода

Мож оно от части и велосипед, зато дает много знаний в теме. Тогда без проблем можно будет реализовать свой кастомный интерфейс и вообще дает понятие об асинхронных последовательных интерфейсах.