Для stm32f103, stm32l151
https://habr.com/ru/articles/549016/ Ну и теории немножко рассказываю.
А вот про fat16:
https://habr.com/ru/articles/654853/Ну и учтите, что вам ведь наверное понадобится файловая система (хотя при желании можно и через dd копировать, но зачем тогда именно MSD). А файловая система хранит отдельные куски файлов в разных местах, а в других местах - связи между ними. Например, компьютер может передать сначала 10-й блок, потом 8, потом 14, потом 1, и только потом рассказать в каком порядке они должны идти.
Как результат, вам придется выделить во флеш-памяти кучу места, куда сначала набросать фрагменты прошивки, и только потом отсортировать их и склеить воедино. Причем обратите внимание, что даже для fat16 надо флешку не менее 30, кажется, килобайт, иначе комп захочет ей пользоваться как fat12. Да, там такой дурацкий способ определения файловых систем.
Возможно, решением будет MTP - извратный протокол, использующийся в смартфонах. Вроде как там сразу указывается какой части файла принадлежит транзакция. А еще он медленный (для прошивки контроллера это не критично) и нестабильный. Но о внутреннем устройстве я сказать ничего не могу - не ковырял.