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

 
 
> Как скрестить FatFS и Mass Storage Device ?
Salamander
сообщение Nov 10 2013, 06:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Господа, есть у меня пример проекта, где устройство на STM32F103 превращается в USB флешку. Причем вариантов 3 - с использованием SPI-flash, SD-карты и с использованием собственной флеш памяти контроллера. Последний вариант я даже попробовал, получил отлично работающую флешку на 256 килобайт.

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

P.S. C другой стороны, проект ведь фактически работает с FAT-системой, но что-то я в нем не видел функций, отвечающих за FAT...

Сообщение отредактировал Salamander - Nov 10 2013, 07:24
Прикрепленные файлы
Прикрепленный файл  USB_Mass_Storage_SPI_Flash_SST25VF016B_.rar ( 2.73 мегабайт ) Кол-во скачиваний: 51
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Tahoe
сообщение Nov 10 2013, 09:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(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.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Nov 10 2013, 09:41
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата
но и предусмотреть одновременное обращение к media от, как минимум, двух источников - USB и MCU.

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

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

Изучил проект с FATFs на SD - в принципе, действительно ничего сложного - все те функции, которые отвечают за работу с SPI flash в проекте Mass Storage, прекрасно лягут в файл diskio.c . То, что в этом файле уже записано, достаточно лишь слегка переименовать.
Все таки Чен молодец, очень хорошо реализовал контроллеронезависимость своей библиотеки.

Сообщение отредактировал Salamander - Nov 10 2013, 09:41
Go to the top of the page
 
+Quote Post
kan35
сообщение Nov 10 2013, 10:58
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Прикрутить fatfs к этому проекту не проблема. Вопрос только в том, что mass storage не предусматривает обмен информацией о том, что с той или иной стороны произошло изменение в памяти. Поясню: если вы например создадите или удалите файл через Fatfs, то компьютер, подключенный по USB не узнает об этом (потребуется переподключение) - и это чревато непредвиденными косяками. Именно поэтому всякие гаджеты работают через свой драйвер.
Go to the top of the page
 
+Quote Post
Salamander
сообщение Nov 10 2013, 12:19
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Цитата
Поясню: если вы например создадите или удалите файл через Fatfs,

Сам контроллер ничего писать не будет. Он будет только читать. Причем, во время сеанса связи с компьютером основная функция устройства не требуется.
Go to the top of the page
 
+Quote Post
Mikron
сообщение Nov 12 2013, 08:43
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Продолжу тему по скрещению

в 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 ?

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


Прикрепленные файлы
Прикрепленный файл  main.rar ( 5.62 килобайт ) Кол-во скачиваний: 25
Прикрепленный файл  stm32f4_discovery_msc_sdhc_release_3.zip ( 592.16 килобайт ) Кол-во скачиваний: 39
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 04:12
Рейтинг@Mail.ru


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