skyvmicro 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба На плате с SAM9260 установил FatFs и работал с карточкой microSD 1Gb по SPI. Исходный пример работал без проблем. Планируя использовать FatFs в собственном проекте столкнулся с небольшим вопросом, который не понимаю. Имею несколько физических носителей - microSD, SDRAM, dataFlash, NAND. Могу ли я работать одновременно более, чем с одним носителем? Если да, то как интерфейсные функции FatFs могут понять, с каким именно носителем им работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Во все "нижние" функции передается Drive. Вот по нему и отличайте. DSTATUS disk_initialize ( BYTE Drive /* Physical drive number */ ); Учтите, что для NAND'а (и для DF желательно) Вам придется написать wear leveling прослойку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Вот есть функция: 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 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Вот есть функция: 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 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Мне здается, что имя файла не указывает то на каком носителе он находится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zuy 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Мне здается, что имя файла не указывает то на каком носителе он находится. Ну я вообще-то не угадать пытался, а конкретно Вам наводку дал где копать :) Почитайте в документации на FatFS описание параметра FileName. Параграф так и называется "Format of the path names" и в первой же строке сразу указывается где там номер драйва ставить. Кстати схема не такая уж редкая, в Win API имя драйва тоже в строке имени файла задается. Вопрос снимаю. Посмотрел ff.h и стало понятно, что если FIL *fp, то fp->fs->drv это и есть носитель. Верно, но это внутреннее дело библиотеки. Если Вы ее правильно портировали, то задав FileName в ф-ции f_open в соответствии с документацией, библиотека сама поставит верно номер драйва в fp->fs->drv. Пользователь не должен про это вообще ничего знать. Для него есть API, через него и надо работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 5 октября, 2010 Опубликовано 5 октября, 2010 · Жалоба Спасибо за конкретный ответ. Посмотрю внимательнее описание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 7 октября, 2010 Опубликовано 7 октября, 2010 · Жалоба Пишу свой модуль I/O для RAM-diska. И вот остановился на реализации функции disk_ioctl в части команды CTRL_SYNC. Понятен первый режим работы функции для устройств имеющих какое-то время записи. Понятно, что ничего не надо делать если только читаем из устройства. Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать. В примерах для I/O модулей MMC и NAND я не встретил использование write back cache. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bulya 0 7 октября, 2010 Опубликовано 7 октября, 2010 · Жалоба Не понимаю когда необходим в модуле I/O write back cache и как при этом функционировать. Если выполняется кеширование записи - кеш (если в нем были изменения) нужно выгрузить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 7 октября, 2010 Опубликовано 7 октября, 2010 · Жалоба Насколько я понимаю запись кэшируется в самой FatFs. Теперь плюс к этому я могу делать или нет кэш в своем модуле I/O. Понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bulya 0 7 октября, 2010 Опубликовано 7 октября, 2010 · Жалоба да, запоминающее устройство может иметь собственный кеш (например в DataFlash), используемый драйвером. эта команда его должна выгрузить. FatFs дергает ее при синхронизации с накопителем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться