Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как скрестить FatFS и Mass Storage Device ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Salamander
Господа, есть у меня пример проекта, где устройство на STM32F103 превращается в USB флешку. Причем вариантов 3 - с использованием SPI-flash, SD-карты и с использованием собственной флеш памяти контроллера. Последний вариант я даже попробовал, получил отлично работающую флешку на 256 килобайт.

Проект прилагаю. Так вот проект не предусматривает доступ к файловой системе средствами самого контроллера. Реально ли прикрутить к нему FatFS?
Я понимаю, что надо в файл diskio прописать функции, с помощью которых идет работа с SPI-flash в режиме Mass Storage Device, но будет ли это работать? Или придется городить еще что-то?
Может кто-то уже делал Mass Storage c FATFs?

P.S. C другой стороны, проект ведь фактически работает с FAT-системой, но что-то я в нем не видел функций, отвечающих за FAT...
Tahoe
Цитата(Salamander @ Nov 10 2013, 10:58) *
P.S. C другой стороны, проект ведь фактически работает с FAT-системой

Нет.

Цитата(Salamander @ Nov 10 2013, 10:58) *
но что-то я в нем не видел функций, отвечающих за FAT...

Потому и не видел, что не работает. wink.gif

Если на пальцах, то функции FAT реализованы в ОС на ББ. А этот или любой подобный проект, просто транслятор - "прочитай блок номер X", "запиши блок номер Y". Так что придется не только FAT прикрутить, но и предусмотреть одновременное обращение к media от, как минимум, двух источников - USB и MCU.
Salamander
Цитата
но и предусмотреть одновременное обращение к media от, как минимум, двух источников - USB и MCU.

В работе этого точно не будет. Но, спасибо за совет, ситуацию предусмотрю.

Цитата
просто транслятор - "прочитай блок номер X", "запиши блок номер Y

Изучил проект с FATFs на SD - в принципе, действительно ничего сложного - все те функции, которые отвечают за работу с SPI flash в проекте Mass Storage, прекрасно лягут в файл diskio.c . То, что в этом файле уже записано, достаточно лишь слегка переименовать.
Все таки Чен молодец, очень хорошо реализовал контроллеронезависимость своей библиотеки.
kan35
Прикрутить fatfs к этому проекту не проблема. Вопрос только в том, что mass storage не предусматривает обмен информацией о том, что с той или иной стороны произошло изменение в памяти. Поясню: если вы например создадите или удалите файл через Fatfs, то компьютер, подключенный по USB не узнает об этом (потребуется переподключение) - и это чревато непредвиденными косяками. Именно поэтому всякие гаджеты работают через свой драйвер.
Salamander
Цитата
Поясню: если вы например создадите или удалите файл через Fatfs,

Сам контроллер ничего писать не будет. Он будет только читать. Причем, во время сеанса связи с компьютером основная функция устройства не требуется.
Mikron
Продолжу тему по скрещению

в main.c мой проект для fatfs и nand (функции которые в diskio.c .h)
в архиве чужой проект для mass storage sd карты

Правильно ли я понимаю, что нужно лишь функции из проекта для sd из usbd_storage_msd.c

Код
int8_t STORAGE_Init (uint8_t lun);

int8_t STORAGE_GetCapacity (uint8_t lun,
                           uint32_t *block_num,
                           uint32_t *block_size);

int8_t  STORAGE_IsReady (uint8_t lun);

int8_t  STORAGE_IsWriteProtected (uint8_t lun);

int8_t STORAGE_Read (uint8_t lun,
                        uint8_t *buf,
                        uint32_t blk_addr,
                        uint32_t blk_len); // needs to be 32-bit to avoid unnecessary casting

int8_t STORAGE_Write (uint8_t lun,
                        uint8_t *buf,
                        uint32_t blk_addr,
                        uint32_t blk_len); // needs to be 32-bit to avoid unnecessary casting

int8_t STORAGE_GetMaxLun (void);


заменить на функции из diskio.c ?

Спасибо за помощь

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.