реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> KEIL FlashFS и USB Mass Storage: слишком просто и... неправильно, Портятся данные на SD карте
KnightIgor
сообщение Dec 14 2011, 08:55
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Привет, коллеги.

Имеется:
    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 - Dec 14 2011, 08:57
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Dec 16 2011, 14:04
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(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 поаккуратнее выбирать имена: как корабль назовешь, так он и поплывет...

Сообщение отредактировал KnightIgor - Dec 17 2011, 09:55
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 22:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01767 секунд с 7
ELECTRONIX ©2004-2016