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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Вопрос по FatFs от мистера ChaN'а
zltigo
сообщение Nov 24 2007, 08:48
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(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() вообще не сстоял-бы, ибо ОБЯЗАТЕЛЬНЫМ условием получения того сообщения является наличие смонтированной файловой системы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
kanzler
сообщение Nov 24 2007, 09:21
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Цитата(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.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2007, 09:36
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(kanzler @ Nov 24 2007, 10:35) *
Со случаем я разобрался в самом начале, а вот f_mount у меня проходит и возвращает FR_OK.
Совсем тупой вопрос - а какой Logical drive number вы передаете в f_mount? Вообще, покажите код.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 24 2007, 09:37
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(kanzler @ Nov 24 2007, 11:21) *
Делаю вывод - значить структуру FATFS fatfs ни когда не примонтировать и она всегда будет пустая.

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

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

А то примеров из документации и прилагаемых тестовых исходников УЖЕ не достаточно?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
kanzler
сообщение Nov 24 2007, 09:58
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Огромное всем спасибо!
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 24 2007, 13:01
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



У меня тоже вопрос по FatFS.
Рассматриваю возможность прикрутить ее к DataFlash. Насколько я понял после быстрого просмотра исходников, FatFS пишет и читает данные секторами по 512 байт. А DataFlash перед записью надо стирать, причем не по 512 байт, а по блокам (для моей модели минимальный размер блока - 4 кб). Т.е. мне надо написать достаточно "толстую" прослойку, которая будет скрывать от FatFS этот механизм - или я чего-то не понял?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 24 2007, 13:14
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Непомнящий Евгений @ Nov 24 2007, 15:01) *
Рассматриваю возможность прикрутить ее к DataFlash.

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

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

Необязательно, просто можете периодически запускать процедуру освежения. Правда если делать правильно, надо счетчик перезаписей заводить для каждого сектора и где то его хранить....
Короче я для DataFlash свою простенькую системку сделал - количесво файлов ограничено, кластеры большие, но зато простая, учмтывает особенности DataFlash и памяти почти не требует - даже "FAT" в буфере DataFlash хранит.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 24 2007, 13:34
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


Цитата(zltigo @ Nov 24 2007, 15:14) *
А смысл, для несъемного носителя?
А если нужна файловая система часто читать/очень редко писать, то вот она есть - готовая и свободно доступная. Альтернативы (кроме писать свою)?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 24 2007, 14:00
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Сергей Борщ @ 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) *
Необязательно, просто можете периодически запускать процедуру освежения.

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

Я думал хранить очередь свободных секторов - при надобности берется первая, при освобождении - ставится в конец. По-моему, получится эквивалентно счетчику...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 24 2007, 14:35
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Непомнящий Евгений @ Nov 24 2007, 16:00) *
А что за процедура такая?

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

Я о счетчике записей через "Programm-Erase" (помнится порядка 10 тысяч) в сектор до проведения "Rewrite Trough".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 24 2007, 14:39
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



to zltigo - по моему, мы говорим о разных моделях. В моей AT26DF321 команд "Rewrite Trough" нет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 24 2007, 14:52
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Непомнящий Евгений @ Nov 24 2007, 16:39) *
to zltigo - по моему, мы говорим о разных моделях.

На момент моего ответа Вы не назвали модель. И уж о нерекомендуемой в новых разработках AT26 я при поминании "DataFlash" подумал-бы в последнюю очередь. Я говорю о AT45.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 24 2007, 15:00
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



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

Называл в сообщении 24 smile.gif
А насчет нерекомендуемой - можно поподробней?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 24 2007, 15:12
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Непомнящий Евгений @ Nov 24 2007, 17:00) *
Называл в сообщении 24 smile.gif

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

А чего подробнее - посмотрите dataseet и там на первой станице черным жирным шрифтом набрано.
http://www.atmel.com/dyn/products/product_...sp?part_id=3927


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 20 2009, 09:46
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



В версии 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. Помогите найти ошибку.
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 08:14
Рейтинг@Mail.ru


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