Имеется:
- STM32F103RC;
SD карта через SPI;
KEIL 4.22a;
RL FlashFS и RL USB, версии 4.2x;
Композитное USB устройство (HID, CDC, MSC).
Предыстория: на устройстве, похожем на MCBSTM32 карту от KEIL, успешно работает программа с файловой системой RL FlashFS от KEIL с поддержкой SD карты через SPI (кстати, в процессе обнаружилась ошибка в "драйвере" SPI_STM32F103.c версии 4.20 касаемо установки скорости SPI, о которой я писал в ветке, если кому интересно). Кроме того, было реализовано композитное USB устройство с HID и CDC (виртуальный COM-порт). Все гладко.
Решили добавить поддержку Mass Storage (MSC). Все распозналось, Винда открыла каталог карты, все показала правильно, можно читать. HID и CDC работали по-прежнему.
И тут началось: попробовали записать файл из PC через MSC на карту. С точки зрения Винды записалось все успешно, каталог обновился, да и встроенный в устройство терминал показал тот же правильный каталог карты. Затем устройство "размонтировали", переткнули по-новой, и... карта уже содержала чушь:
- многие файлы имели длину 0;
файлы с длиными именами стали отображаться в формате 8.3 (то есть, с "~");
SD карта, будучи проверена на вшивость в PC, содержала множественные ошибки файловой системы.
Короче, полная фигня.
Очевидно, где-то не происходит запись буфера/кэша на карту даже после размонтирования устройства, но тут возник вопрос, а поддерживается ли такое в FlashFS: MSC согласно примеру, взятому за основу, реализуется двумя функциями, которые даже результата не возвращают, если что пошло не так. К тому же, не нашел возможности сообщить Винде удаление карты из слота (я не могу сделать disconnect USB, т.к. есть еще HID и CDC, которые должны и дальше работать, даже если карта удалена из слота).
Есть какие идеи из опыта работы с указанными библиотеками?
Заранее благодарю.