Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по FatFs от мистера ChaN'а
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
kanzler
Прикрутил FatFs на ATmega128. В примерах данных от мистера ChaN'а не очень понятно вот что. В программе описываю структуру типа FATFS, но ни как не могу найти где он заносит данные в эту структуру. Прошу уважаемые коллеги, разобраться с этим вопросом.
Сергей Борщ
Цитата(kanzler @ Nov 22 2007, 21:11) *
В программе описываю структуру типа FATFS, но ни как не могу найти где он заносит данные в эту структуру.
Вы должны передать ее адрес через f_mount в начале работы. Потом он с ней будет работать сам внутри.
kanzler
Цитата(Сергей Борщ @ Nov 23 2007, 00:32) *
Вы должны передать ее адрес через f_mount в начале работы. Потом он с ней будет работать сам внутри.

Так и делаю, но после f_mount структура пустая. Значить я что то делаю не так. Что? Вопрос - в настройках используемой памяти в IAR какие значения нужно ставить? У меня Heap size 0x400, CSTACK = 256, RSTACK = 128
GDI
Cделайте map-файл и посмотрите какие размеры стеков вам требуются
Сергей Борщ
Цитата(kanzler @ Nov 23 2007, 04:31) *
Так и делаю, но после f_mount структура пустая. Значить я что то делаю не так. Что?
Как что? Не прочитали документацию. Хотя бы на f_mount:
Цитата
This function only initializes the work area and registers its address to the internal table, any access to the disk I/O layer does not occure. The actual mounting process is performed depends on requirement in any other file funcitons.
Можно было еще заглянуть в исходники, и увидеть, что f_mount только сохраняет адрес этой структуры во внутренней переменной. А заполнение произойдет потом, когда попытаетесь призвести какое-нибудь действие с файлом/директорией.
prottoss
Цитата(kanzler @ Nov 23 2007, 09:31) *
Так и делаю, но после f_mount структура пустая. Значить я что то делаю не так. Что? Вопрос - в настройках используемой памяти в IAR какие значения нужно ставить? У меня Heap size 0x400, CSTACK = 256, RSTACK = 128
А Вы описали функции disk read/write sector/ioctl? Возможно проблема в этом?
kanzler
Цитата(Сергей Борщ @ Nov 23 2007, 14:59) *
Как что? Не прочитали документацию. А заполнение произойдет потом, когда попытаетесь призвести какое-нибудь действие с файлом/директорией.

Читал, но мой англицкий оставляет желать лучшего.
Так и пытаюсь произвести чтение директории с помощью f_readdir, возвращает - FR_NO_FILESYSTEM, хотя флешка перед тем была отформатированна FAT16 и записан файл.

Цитата(prottoss @ Nov 23 2007, 18:30) *
А Вы описали функции disk read/write sector/ioctl? Возможно проблема в этом?

В этом нет проблемы драйвер был прикручен и он работает без сбоев.

Цитата(GDI @ Nov 23 2007, 12:20) *
Cделайте map-файл и посмотрите какие размеры стеков вам требуются

Честно говоря я не сильно понимаю как можно узнать в map-файле что со стеком всё впорядке. Подскажите пожайлуста.
zltigo
Цитата(kanzler @ Nov 23 2007, 18:49) *
В этом нет проблемы драйвер был прикручен и он работает без сбоев.

999 против 1, что disk_read() не смотря вышеприведенное утверждение не работает. В чем с легкостью можете убедится посмотрев что Вы получили вместо 0 сектора в fs.
kanzler
Цитата(zltigo @ Nov 24 2007, 01:52) *
999 против 1, что disk_read() не смотря вышеприведенное утверждение не работает. В чем с легкостью можете убедится посмотрев что Вы получили вместо 0 сектора в fs.

Ставка принята. Посмотрев код я не нашёл в функциях f_mount, f_opendir, f_readdir ссылок на да функцию disk_read(). Может быть я что то пропустил. Или может быть после того как произвели регистрацию fs с помощью f_mount нужно вызвать f_getfree()? Хотя и в ней нет ссылка на disk_read().

Вобщем ни одна функция f_opendir, f_readdir, f_getfree не возвращает FR_OK. Эсли это связанно с тем что функция disk_read() не работает, то я её проверю, только объясните по шагам как работать с FatFs, пожайлуста.
zltigo
Цитата(kanzler @ Nov 24 2007, 08:27) *
Посмотрев код я не нашёл в функциях...

Расстроили очень sad.gif Читаем:
Цитата
Так и пытаюсь произвести чтение директории с помощью f_readdir, возвращает - FR_NO_FILESYSTEM,

Для начала f_readdir() в принципе не может возвращать FR_NO_FILESYSTEM, ибо работает с готовой заполненной структурой DIR. Сию ошибку возвращает f_opendir() которая и пытается прочитать с диска и заполнить вышеупомянутую структуру. В свою очередь FR_NO_FILESYSTEM возвращает только фунуция auto_mount(), которая в свою очередь вызывает функцию с совершенно ожидаемым названием check_fs(), которая в свою очередь ну совсем ожидаемо
(а что ей еще остается делать?) вызывает disk_read() для разборок с содержимым диска.


P.S.
Кстати, auto_mount() очень сомнительное "удобство" введенное в V0.04, ибо узнается о проблемах с диском только при обращении к нему. Например, пришел, сменил носитель, ушел и через некоторое время узнал, что не сработало. Одно из моих изменений в собственно ff (немногих, кстати smile.gif ) касается замены auto_mount() на check_mount(), а собствено монтирование (полное, а не то, огрызок f_mount() ) осуществляется по детектированию вставления SD/MMC, ну и ручками при желании.
kanzler
Цитата(zltigo @ Nov 24 2007, 12:51) *
Расстроили очень sad.gif Читаем:

Для начала f_readdir() в принципе не может возвращать FR_NO_FILESYSTEM, ибо работает с готовой заполненной структурой DIR. Сию ошибку возвращает f_opendir() которая и пытается прочитать с диска и заполнить вышеупомянутую структуру. В свою очередь FR_NO_FILESYSTEM возвращает только фунуция auto_mount(), которая в свою очередь вызывает функцию с совершенно ожидаемым названием check_fs(), которая в свою очередь ну совсем ожидаемо
(а что ей еще остается делать?) вызывает disk_read() для разборок с содержимым диска.

Прошу прощения за то что вас расстроил. А теперь к делу. Согласен FR_NO_FILESYSTEM возвращает auto_mount(). Но в сей функции есть строки:

/* Check if the drive number is valid or not */
if (drv >= _DRIVES) return FR_INVALID_DRIVE; /* Is the drive number valid? */
if (!(fs = FatFs[drv])) return FR_NOT_ENABLED; /* Is the file system object registered? */

Если первая строка у меня проходит то вторая у меня не хочет проходить, таким образом функция f_opendir возвращает не только FR_NO_FILESYSTEM но и FR_NOT_ENABLED. Как быть в этом случае?
Сергей Борщ
Цитата(kanzler @ Nov 24 2007, 10:15) *
Если первая строка у меня проходит то вторая у меня не хочет проходить
А вот как раз f_mount() и должен был заранее прописать в FatFs[drv] адрес вашей структуры FATFS из первого вопроса.
kanzler
Цитата(Сергей Борщ @ Nov 24 2007, 13:22) *
А вот как раз f_mount() и должен был заранее прописать в FatFs[drv] адрес вашей структуры FATFS из первого вопроса.

Спасибо за разъяснения, значить где то у меня изначально было неправильно сделанно, буду искать где.
Вопрос: Структура FatFs[drv] описана как массив. Я же в начале описываю свою структуру таким образом FATFS fatfs; это может повлиять на то что у меня не заполняется fatfs. Может быть мне нужно было сделать как в примере FATFS fatfs[2]?
zltigo
Цитата(kanzler @ Nov 24 2007, 10:15) *
Как быть в этом случае?

Вы это уж... как нибудь со "случаем" определитесь для начала, а то просто какой-то свободный поток слов.
В "новом случае" начните, однако, с начала, и вызовите f_mount().
kanzler
Цитата(zltigo @ Nov 24 2007, 13:29) *
Вы это уж... как нибудь со "случаем" определитесь для начала, а то просто какой-то свободный поток слов.
В "новом случае" начните, однако, с начала, и вызовите f_mount().

Со случаем я разобрался в самом начале, а вот f_mount у меня проходит и возвращает FR_OK. А вот в остальном - я прошу у вас многоуважаемые специалисты помощи.
zltigo
Цитата(kanzler @ Nov 24 2007, 10:35) *
f_mount у меня проходит и возвращает FR_OK.

Это значит только одно - Вы его успещно ОТМОНТИРОВАЛИ, а не примонтировали.
В случае успешного монтирования в FatFs[] никоем образом не может быть NULL и соответствено
if (!(fs = FatFs[drv])) return FR_NOT_ENABLED; /* Is the file system object registered? */
никоем образом не FR_NOT_ENABLED



Цитата(kanzler @ Nov 24 2007, 10:35) *
Со случаем я разобрался в самом начале...

Опять неправда - если-бы разобрались, то вопрос о f_mount() вообще не сстоял-бы, ибо ОБЯЗАТЕЛЬНЫМ условием получения того сообщения является наличие смонтированной файловой системы.
kanzler
Цитата(zltigo @ Nov 24 2007, 13:48) *
Это значит только одно - Вы его успещно ОТМОНТИРОВАЛИ, а не примонтировали.
В случае успешного монтирования в FatFs[] никоем образом не может быть NULL и соответствено
if (!(fs = FatFs[drv])) return FR_NOT_ENABLED; /* Is the file system object registered? */
никоем образом не FR_NOT_ENABLED

f_mount возвращает только два значениния - FR_OK или FR_INVALID_DRIVE.
С FR_INVALID_DRIVE всё понятно, но не понятно тогда зачем нужна функция f_mount, если она делает только unmount?

В итоге я совсем запуталься :-( Делаю вывод - значить структуру FATFS fatfs ни когда не примонтировать и она всегда будет пустая.

Тогда просьба - дайте пример исходника как вы делаете инициализацию FATFS.
Сергей Борщ
Цитата(kanzler @ Nov 24 2007, 10:35) *
Со случаем я разобрался в самом начале, а вот f_mount у меня проходит и возвращает FR_OK.
Совсем тупой вопрос - а какой Logical drive number вы передаете в f_mount? Вообще, покажите код.
zltigo
Цитата(kanzler @ Nov 24 2007, 11:21) *
Делаю вывод - значить структуру FATFS fatfs ни когда не примонтировать и она всегда будет пустая.

С чего-бы это?
Там вообще-то пяток строчек! Так и хочется чего-нибудь спросить перефразируя классическое "Киса, скажите, как фидошник фидошнику, Вы почту качать умеете?"....

f_mount() для монтирования нужно передать указатель на РЕАЛЬНО существующую память.
Все больше ничего. Заполнять эту структуру, при условии что ЕСТЬ УКАЗАТЕЛЬ будет уже auto_mount()
А вот если этого указателя нет, то тогда получите отлуп FR_NOT_ENABLED.
Цитата
Тогда просьба - дайте пример исходника как вы делаете инициализацию FATFS.

А то примеров из документации и прилагаемых тестовых исходников УЖЕ не достаточно?
kanzler
Огромное всем спасибо!
Непомнящий Евгений
У меня тоже вопрос по FatFS.
Рассматриваю возможность прикрутить ее к DataFlash. Насколько я понял после быстрого просмотра исходников, FatFS пишет и читает данные секторами по 512 байт. А DataFlash перед записью надо стирать, причем не по 512 байт, а по блокам (для моей модели минимальный размер блока - 4 кб). Т.е. мне надо написать достаточно "толстую" прослойку, которая будет скрывать от FatFS этот механизм - или я чего-то не понял?
zltigo
Цитата(Непомнящий Евгений @ Nov 24 2007, 15:01) *
Рассматриваю возможность прикрутить ее к DataFlash.

А смысл, для несъемного носителя?
Цитата
Насколько я понял после быстрого просмотра исходников, FatFS пишет и читает данные секторами по 512 байт.

Ну так можно и увеличить, если памяти не жалко.
Цитата
А DataFlash перед записью надо стирать

Необязательно, просто можете периодически запускать процедуру освежения. Правда если делать правильно, надо счетчик перезаписей заводить для каждого сектора и где то его хранить....
Короче я для DataFlash свою простенькую системку сделал - количесво файлов ограничено, кластеры большие, но зато простая, учмтывает особенности DataFlash и памяти почти не требует - даже "FAT" в буфере DataFlash хранит.
Сергей Борщ
Цитата(Непомнящий Евгений @ Nov 24 2007, 15:01) *
А DataFlash перед записью надо стирать, причем не по 512 байт, а по блокам (для моей модели минимальный размер блока - 4 кб).
Dataflash можно стирать не только блоками, но и страницами. Для FatFS достаточно указать размер сектора = размеру страницы, и размер кластера = 512 / размер страницы, если ничего не путаю (у меня 321, указан размер сектор 512 и размер кластера 1)


Цитата(zltigo @ Nov 24 2007, 15:14) *
А смысл, для несъемного носителя?
А если нужна файловая система часто читать/очень редко писать, то вот она есть - готовая и свободно доступная. Альтернативы (кроме писать свою)?
Непомнящий Евгений
Цитата(Сергей Борщ @ Nov 24 2007, 16:34) *
Dataflash можно стирать не только блоками, но и страницами. Для FatFS достаточно указать размер сектора = размеру страницы, и размер кластера = 512 / размер страницы, если ничего не путаю (у меня 321, указан размер сектор 512 и размер кластера 1)


У меня AT26DF321. Запись у нее страницами по 256 байт, а стирание - блоками по 4, 32, 64 Кб.
Т.е. чтобы записать произвольную страницу, надо сначала перекопировать куда-нить остальные страницы блока, стереть блок, скопировать все страницы обратно и при этом записать нужную.

Смысл прикручивать - хотелось что-нибудь стандартное и отлаженное smile.gif.
Но для меня критична устойчивость к сбоям питания, а в FatFS как я понимаю с этим проблемы. Так что наверное придется писать что-то свое, заточненное под DataFlash и с примитивным журналом действий, чтобы восстановиться после сбоя.


Цитата(zltigo @ Nov 24 2007, 16:14) *
Необязательно, просто можете периодически запускать процедуру освежения.

А что за процедура такая?
Цитата
Правда если делать правильно, надо счетчик перезаписей заводить для каждого сектора и где то его хранить....

Я думал хранить очередь свободных секторов - при надобности берется первая, при освобождении - ставится в конец. По-моему, получится эквивалентно счетчику...
zltigo
Цитата(Непомнящий Евгений @ Nov 24 2007, 16:00) *
А что за процедура такая?

Смотрите команды "Rewrite Trough".
Цитата
По-моему, получится эквивалентно счетчику...

Я о счетчике записей через "Programm-Erase" (помнится порядка 10 тысяч) в сектор до проведения "Rewrite Trough".
Непомнящий Евгений
to zltigo - по моему, мы говорим о разных моделях. В моей AT26DF321 команд "Rewrite Trough" нет...
zltigo
Цитата(Непомнящий Евгений @ Nov 24 2007, 16:39) *
to zltigo - по моему, мы говорим о разных моделях.

На момент моего ответа Вы не назвали модель. И уж о нерекомендуемой в новых разработках AT26 я при поминании "DataFlash" подумал-бы в последнюю очередь. Я говорю о AT45.
Непомнящий Евгений
Цитата(zltigo @ Nov 24 2007, 17:52) *
На момент моего ответа Вы не назвали модель. И уж о нерекомендуемой в новых разработках AT26 я при поминании "DataFlash" подумал-бы в последнюю очередь. Я говорю о AT45.

Называл в сообщении 24 smile.gif
А насчет нерекомендуемой - можно поподробней?
zltigo
Цитата(Непомнящий Евгений @ Nov 24 2007, 17:00) *
Называл в сообщении 24 smile.gif

А теперь прочитайте 21 и 22 сообщения.
Цитата
А насчет нерекомендуемой - можно поподробней?

А чего подробнее - посмотрите dataseet и там на первой станице черным жирным шрифтом набрано.
http://www.atmel.com/dyn/products/product_...sp?part_id=3927
alux
В версии ff006 неправильно работает fprintf:
Код
void save_to_file(void)
{
    RTC rtc;
    const char format[] = "%u/%u/%u %02u:%02u:%02u\n";
    ds1338_gettime(&rtc);
    fprintf(&file, format, rtc.year, rtc.month, rtc.mday, rtc.hour, rtc.min, rtc.sec);
}

В файл не записывается последняя переменная и '\n'.
В то же время через printf выводит как положено:
Код

printf_P("%u/%u/%u %02u:%02u:%02u\n", rtc.year, rtc.month, rtc.mday, rtc.hour, rtc.min, rtc.sec);

Ошибка явно в функции fprintf. Помогите найти ошибку.


В версии ff006 неправильно работает fprintf:
Код
void save_to_file(void)
{
    RTC rtc;
    const char format[] = "%u/%u/%u %02u:%02u:%02u\n";
    ds1338_gettime(&rtc);
    fprintf(&file, format, rtc.year, rtc.month, rtc.mday, rtc.hour, rtc.min, rtc.sec);
}

В файл не записывается последняя переменная и '\n'.
В то же время через printf выводит как положено:
Код

printf_P("%u/%u/%u %02u:%02u:%02u\n", rtc.year, rtc.month, rtc.mday, rtc.hour, rtc.min, rtc.sec);

Ошибка явно в функции fprintf. Помогите найти ошибку.
Andy Mozzhevilov
смотрели здесь?
http://elm-chan.org/fsw/ff/patches.txt

есть исправление в том числе к fprintf()
alux
Вопрос снимается. Проблема была связана с нехваткой стека возвратов. smile.gif
Вообще, нужно написать плакат большими буквами:
"Если программа ведет не так как задумано, первым делом проверь стеки..."
alux
В симуляторе проверил fprintf , только убрал обращения к объекту file. Получилось следующее:
в пустой функции main() вызываю
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 2, 3, 4, 5, 6);
так выводит все числа.
А вот если
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 22, 333, 4444, 55555, 6666);

то на последнем аргументе (6666) va_arg() возвращает 0, и соответственно, выводит только 5 аргументов.
Видимо, это та проблема, которая описана в patches.
Сергей Борщ
Цитата(alux @ Mar 23 2009, 10:29) *
Видимо, это та проблема, которая описана в patches.
Откуда "видимо"? Аргументируйте. В описании патчей написано:
Цитата
will cause an incorrect behavior on the big-endian processor
С каких пор AVR под IARом стал big-endian?
Andy Mozzhevilov
Цитата(Сергей Борщ @ Mar 23 2009, 14:42) *
Откуда "видимо"? Аргументируйте. В описании патчей написано:С каких пор AVR под IARом стал big-endian?

Да, там действительно упоминается по то, что эта ошибка возникает для big-endian.
Но, я привык отвечать на вопросы в том объеме, в котором они заданы smile.gif
В исходном вопросе я нигде не увидел упоминание о типе процессора. И хотя я понимаю, что "вероятностно" это проц. с маленькими индейцами, тем не менее формально рекомендация верна smile.gif. А дальше уже дело автора разбираться со своими индейцами (в данном конкртеном случае) или искать причину в другом.
alux
согласен. Тогда почему 6-ой аргумент не выводит? Почему "маленькие" числа выводит, а чуть побольше - не все. Числа ведь в пределах unsigned int
И это уже не связано с нехваткой стека.
Сергей Борщ
Цитата(alux @ Mar 23 2009, 11:27) *
согласен. Тогда почему 6-ой аргумент не выводит?
У вас в руках есть симулятор. Даже два - родной ИАРовский и Студийный. Прогнать в нем программу, следя куда при вызове testfprintf были положены аргументы, откуда они достаются в va_arg() и кто их портит, если портит - дело минут, ну максимум часа-двух.
Genadi Zawidowski
Цитата(alux @ Mar 23 2009, 11:29) *
В симуляторе проверил fprintf , только убрал обращения к объекту file. Получилось следующее:
в пустой функции main() вызываю
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 2, 3, 4, 5, 6);
так выводит все числа.
А вот если
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 22, 333, 4444, 55555, 6666);

то на последнем аргументе (6666) va_arg() возвращает 0, и соответственно, выводит только 5 аргументов.
Видимо, это та проблема, которая описана в patches.


6666 это уже 32-битное число. Соответственно, надо

const char format[] = "%u/%u/%u %u:%u:%lu";
HARMHARM
Цитата(Genadi Zawidowski @ Mar 25 2009, 10:52) *
6666 это уже 32-битное число. Соответственно, надо

const char format[] = "%u/%u/%u %u:%u:%lu";

Ничего подобного. До 32-битного еще добавлять и добавлять.

Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть.
artemm
Скажите, если я пишу отак:
Цитата
FATFS fs;
FIL fdst;
FRESULT res;
f_mount(0, &fs);
res = f_open(&fdst, "test.dat", FA_CREATE_ALWAYS | FA_WRITE);
fprintf(&fdst, "%s", "This is a test");
f_close(&fdst);
f_mount(0, NULL);


файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет?
Andy Mozzhevilov
Цитата(artemm @ Mar 31 2009, 17:11) *
файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет?

Ну да. А для чего тогда иначе была бы нужна файловая система?
kostik2
Цитата(Сергей Борщ @ Nov 23 2007, 12:59) *
Как что? Не прочитали документацию. Хотя бы на f_mount:Можно было еще заглянуть в исходники, и увидеть, что f_mount только сохраняет адрес этой структуры во внутренней переменной. А заполнение произойдет потом, когда попытаетесь призвести какое-нибудь действие с файлом/директорией.

Заинтересовался этим вопросом тоже. avr и flash. Можете, если у вас есть наработки поделиться ими. Буду очень благодарен.

здравствуйте. заинтересовался этим вопросом тоже. о пока я не очень представляю механизм написания программы чтения и записи данных в flash. если не трудно, могете поделиться исходниками по работе с fat32 для avr. буду очень благодарен. kostiapan@mail.ru
Genadi Zawidowski
Цитата(HARMHARM @ Mar 25 2009, 15:10) *
Ничего подобного. До 32-битного еще добавлять и добавлять.

Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть.

Проглядел деталь... предпоследнее число было 55555 - мне показалось. что в неработающем примере было 66666. Может, человек по памяти писал?
Сергей Борщ
Цитата(kostik2 @ Apr 1 2009, 20:02) *
Можете, если у вас есть наработки поделиться ими. Буду очень благодарен.
Наработки есть на сайте автора. Их там аж несколько штук. Что вас в них не устраивает и почему вы считаете, что чьи-то еще будут лучше?
_Pasha
Цитата(kostik2 @ Apr 1 2009, 20:02) *
пока я не очень представляю механизм написания программы чтения и записи данных в flash.

Копайте уровень железа - diskio.*
Вам надо надуться на написание нескольких процедур (чтение/запись/статус/инициализация/контрол) и решить, что будете делать с таймстампом.
Akakiy
Обновилась FatFS R0.07
Цитата
R0.07, Apr 01, 2009
Merged Tiny-FatFs as a buffer configuration option.
Added long file name support.
Added multiple code page support.
Added re-entrancy for multitask operation.
Added auto cluster size selection to f_mkfs().
Added rewind option to f_readdir().
Changed result code of critical errors.
Renamed string functions to avoid name collision.
Hasky
[quote name='kanzler' date='Nov 23 2007, 20:49' post='328189']
Читал, но мой англицкий оставляет желать лучшего.
Так и пытаюсь произвести чтение директории с помощью f_readdir, возвращает - FR_NO_FILESYSTEM, хотя флешка перед тем была отформатированна FAT16 и записан файл.

В этом нет проблемы драйвер был прикручен и он работает без сбое

Была такая же проблема: все функции в diskio.cpp корректно работали (тестил каждую после портирования на MSP430), но после успешного монтирования (FR_OK) функцией f_mount при попытки открыть фаил f_open возвращал - FR_NO_FILESYSTEM.
Проблема была устранена путем коммента функции disk_initialize перед f_mount, которую вызывал для проверки ее же работоспособности.
Наверное дело в том, что мой проект не поддерживает снятия питания с карты, и при повторной внутренней инициализации в f_open, происходила ошибка.

P.S. FatFs 007, IAR 4.10, MSP430
piz2383
У меня вопрос новичка к вам. Если с помощью FATFs записывать файлы на флешку а потом подключить к компьютеру. То как она определиться по виндой? Как FAT16?

Заранее спасибо за ответ.
VDLab
Если ее не форматировать средствами fatfs, то какая была до записи файлов, такая и останется.
piz2383
Я имею ввиду, у меня есть голая флешка, отформатированная. Я на ней создаю файловую систему под средством FATFs, записываю несколько файликов и так далее... Потом подключаю её к компу, она определиться в винде или нет? И если да то как?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.