Jump to content

    
Sign in to follow this  
skyvmicro

FatFs на SAM9260

Recommended Posts

На плате с SAM9260 установил FatFs и работал с карточкой microSD 1Gb

по SPI. Исходный пример работал без проблем. Планируя использовать FatFs

в собственном проекте столкнулся с небольшим вопросом, который не понимаю.

Имею несколько физических носителей - microSD, SDRAM, dataFlash, NAND.

Могу ли я работать одновременно более, чем с одним носителем?

Если да, то как интерфейсные функции FatFs могут понять, с каким именно

носителем им работать?

 

Share this post


Link to post
Share on other sites

Во все "нижние" функции передается Drive. Вот по нему и отличайте.

DSTATUS disk_initialize (
  BYTE Drive           /* Physical drive number */
);

Учтите, что для NAND'а (и для DF желательно) Вам придется написать wear leveling прослойку.

Share this post


Link to post
Share on other sites

Вот есть функция:

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 это и есть носитель.

Share this post


Link to post
Share on other sites
Вот есть функция:

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 ?

Share this post


Link to post
Share on other sites
Мне здается, что имя файла не указывает то на каком носителе он находится.

 

Ну я вообще-то не угадать пытался, а конкретно Вам наводку дал где копать :)

Почитайте в документации на FatFS описание параметра FileName.

Параграф так и называется "Format of the path names" и в первой же строке сразу указывается где там номер драйва ставить.

 

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

 

Вопрос снимаю. Посмотрел ff.h и стало понятно, что

если FIL *fp, то fp->fs->drv это и есть носитель.

 

Верно, но это внутреннее дело библиотеки.

Если Вы ее правильно портировали, то задав FileName в ф-ции f_open в соответствии с документацией, библиотека сама поставит верно номер драйва в fp->fs->drv.

Пользователь не должен про это вообще ничего знать. Для него есть API, через него и надо работать.

Share this post


Link to post
Share on other sites

Пишу свой модуль I/O для RAM-diska. И вот остановился на реализации функции

disk_ioctl в части команды CTRL_SYNC.

Понятен первый режим работы функции для устройств имеющих какое-то время записи.

Понятно, что ничего не надо делать если только читаем из устройства.

Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать.

В примерах для I/O модулей MMC и NAND я не встретил использование write back cache.

 

 

Share this post


Link to post
Share on other sites
Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать.

Если выполняется кеширование записи - кеш (если в нем были изменения) нужно выгрузить.

Share this post


Link to post
Share on other sites

да, запоминающее устройство может иметь собственный кеш (например в DataFlash), используемый драйвером.

эта команда его должна выгрузить. FatFs дергает ее при синхронизации с накопителем

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this