Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FatFs на SAM9260
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
skyv
На плате с SAM9260 установил FatFs и работал с карточкой microSD 1Gb
по SPI. Исходный пример работал без проблем. Планируя использовать FatFs
в собственном проекте столкнулся с небольшим вопросом, который не понимаю.
Имею несколько физических носителей - microSD, SDRAM, dataFlash, NAND.
Могу ли я работать одновременно более, чем с одним носителем?
Если да, то как интерфейсные функции FatFs могут понять, с каким именно
носителем им работать?
Dron_Gus
Во все "нижние" функции передается Drive. Вот по нему и отличайте.
Код
DSTATUS disk_initialize (
  BYTE Drive           /* Physical drive number */
);

Учтите, что для NAND'а (и для DF желательно) Вам придется написать wear leveling прослойку.
skyv
Вот есть функция:
FRESULT f_open (
FIL* FileObject, /* Pointer to the blank file object structure */
const TCHAR* FileName, /* Pointer to the file neme */
BYTE ModeFlags /* Mode flags */
);

Я просто не пойму где тут параметр указывающий принадлежность к носителю.
С вашим примером для низкоуровневых функций я согласен.


Вопрос снимаю. Посмотрел ff.h и стало понятно, что
если FIL *fp, то fp->fs->drv это и есть носитель.
zuy
Цитата(skyv @ Oct 5 2010, 12:57) *
Вот есть функция:
FRESULT f_open (
FIL* FileObject, /* Pointer to the blank file object structure */
const TCHAR* FileName, /* Pointer to the file neme */
BYTE ModeFlags /* Mode flags */
);

Я просто не пойму где тут параметр указывающий принадлежность к носителю.
С вашим примером для низкоуровневых функций я согласен.



А разве не в FileName ?
skyv
Мне здается, что имя файла не указывает то на каком носителе он находится.
zuy
Цитата(skyv @ Oct 5 2010, 13:26) *
Мне здается, что имя файла не указывает то на каком носителе он находится.


Ну я вообще-то не угадать пытался, а конкретно Вам наводку дал где копать smile.gif
Почитайте в документации на FatFS описание параметра FileName.
Параграф так и называется "Format of the path names" и в первой же строке сразу указывается где там номер драйва ставить.

Кстати схема не такая уж редкая, в Win API имя драйва тоже в строке имени файла задается.

Цитата(skyv @ Oct 5 2010, 13:22) *
Вопрос снимаю. Посмотрел ff.h и стало понятно, что
если FIL *fp, то fp->fs->drv это и есть носитель.


Верно, но это внутреннее дело библиотеки.
Если Вы ее правильно портировали, то задав FileName в ф-ции f_open в соответствии с документацией, библиотека сама поставит верно номер драйва в fp->fs->drv.
Пользователь не должен про это вообще ничего знать. Для него есть API, через него и надо работать.
skyv
Спасибо за конкретный ответ. Посмотрю внимательнее описание.
skyv
Пишу свой модуль I/O для RAM-diska. И вот остановился на реализации функции
disk_ioctl в части команды CTRL_SYNC.
Понятен первый режим работы функции для устройств имеющих какое-то время записи.
Понятно, что ничего не надо делать если только читаем из устройства.
Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать.
В примерах для I/O модулей MMC и NAND я не встретил использование write back cache.

Bulya
Цитата(skyv @ Oct 7 2010, 16:21) *
Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать.

Если выполняется кеширование записи - кеш (если в нем были изменения) нужно выгрузить.
skyv
Насколько я понимаю запись кэшируется в самой FatFs.
Теперь плюс к этому я могу делать или нет кэш в своем модуле I/O.
Понятно.
Bulya
да, запоминающее устройство может иметь собственный кеш (например в DataFlash), используемый драйвером.
эта команда его должна выгрузить. FatFs дергает ее при синхронизации с накопителем
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.