Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: KEIL FlashFS и USB Mass Storage: слишком просто и... неправильно
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
KnightIgor
Привет, коллеги.

Имеется:
    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, которые должны и дальше работать, даже если карта удалена из слота).

Есть какие идеи из опыта работы с указанными библиотеками?

Заранее благодарю.
KnightIgor
Цитата(KnightIgor @ Dec 14 2011, 10:55) *
Привет, коллеги.

Имеется:
    STM32F103RC;
    SD карта через SPI;
    KEIL 4.22a;
    RL FlashFS и RL USB, версии 4.2x;
    Композитное USB устройство (HID, CDC, MSC).

После нанайских танцев должен кое-что скорректировать: заработало все устройство с HID, CDC и MSC, но лишь после того, как CDC bulk "свелись" в одну endpoint (то есть, одинаковые номера для in и out).
На мысль сделать так навело поведение устройства, когда похоже было на порчу буферов. Хотя в документации на STM32F10x стоит, что USB имеет 512 байт выделенной памяти, а использовалось только 7 endpoints с максимумом в 64 байта на endpoint (при этом EP0 вообще только 8 байт, а EP4 - ctrl для CDC - только 16), тем не менее явно буферы как-то накладывались друг на друга. Может мы чего в доке не дочитали?

И еще, касаемо скорости SPI - все там правильно в оригинальном файле, только путано было: определены две константы __FPCLK как 72000000 и FPCLK как __FPCLK/1000, и проверка kbaud в оригинальном коде ведется конечно с FPCLK. Мда... Надо посоветовать KEIL поаккуратнее выбирать имена: как корабль назовешь, так он и поплывет...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.