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

 
 
 
Reply to this topicStart new topic
> MSP430 и FatFs, есть глюки
jorikdima
сообщение Aug 24 2008, 18:38
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Приветствую.
Нужна поддержка файловой системы в проекте. Решил использовать Tiny FatFs последней 006 версии. Нашел в инете порт для sd-card yeah.gif и вроде сразу заработало, чему я удивился. Но со временем начали вылезать проблемы. В итоге обнаружил пару мест в софте, которые пришлось править. Например функция get_cluster в коде имела такую строчку
Код
if (clust >= 2 && clust < fs->max_clust) {        /* Valid cluster# */

что ИАРом V4.10A воспринялось неправильно без скобок 07.gif ну и т.д.
А вопрос собственно про другое biggrin.gif .
Это баг или фича, что я не могу записать файл размером более 2048 байт??? Кстати использую микроСД если это важно.
Спасибо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 24 2008, 19:04
Сообщение #2


Гуру
******

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



Цитата(jorikdima @ Aug 24 2008, 20:38) *
что ИАРом V4.10A воспринялось неправильно без скобок...

Я Вас умоляю, не надо обвинять IAR в потрясении основ приорететов операций в языке "C".
Цитата
ну и т.д.

??? FatFs вполне аккуратно писанная система. Закос под 8bit слегка убрать и вообще хорошо становится. Ну разве только из мелочевочку с лишними переменными подправить, да умножения и деления поубирать не надеясь на оптимизацию.
Цитата
не могу записать файл размером более 2048 байт???

Файлы, естественно, пишутся любых размеров - это относится к FatFs, а к неведомым ее модификациям "из интернета".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Aug 24 2008, 19:12
Сообщение #3


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(zltigo @ Aug 24 2008, 23:04) *
Я Вас умоляю, не надо обвинять IAR в потрясении основ приорететов операций в языке "C".
Файлы, естественно, пишутся любых размеров - это относится к FatFs а к неведомым ее модификациям "из интернета".

тем не менее глюк в дебаггере я видел. Переменная clust была в нужном диапазоне, а условие не выполнялось. Я использую не
Цитата
неведомым ее модификациям "из интернета"
, а скачаную с сайта автора. Из интернета реализация записи/чтения с карты. Сейчас в дебуггере выяснил что неработает как надо ветка streach cluster chain в функции f_write . Точнее пока сказать не могу, сам понимаю, что описание мной проблемы недостаточно. Буду копать, чтоб выяснить что не работает, тогда и спрошу конкретнее. Пока главное что я узнал от вас, что файлы все же пишуться любых размеров smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 24 2008, 20:02
Сообщение #4


Гуру
******

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



Цитата(jorikdima @ Aug 24 2008, 21:12) *
тем не менее глюк в дебаггере я видел....

Ну нет такой проблемы и быть не может, ибо это практически "святое" smile.gif
Цитата
Сейчас в дебуггере выяснил....

Начните с простейших действий, которые требуются при портировании с 8-бит. Сразу не думая особо - паковка структур, размер int, байтовые переменные под int(опционально), а то сразу дебагер smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 2 2008, 06:44
Сообщение #5


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



в итоге проблема решилась заменой флешки smile.gif вместо 128 меговой микро взял 1 Гб. Насколько я увидел там другой размер кластера и как-то все заработало, хотя так толком и не понял в чем была проблема, ибо деталей файловой системы не знаю.

Но появилась проблема №2. У меня ведется логирование на флешку с АЦП. Я поступаю следующим образом: создаю в памяти кольцевой буфер, внего в прерывании от АЦП кладу намерянные данные по 8 байт 512 раз в секунду. Затем в фоне когда данных в буфере, скажем, половина от размера буфера или более, я вычитываю их и делаю f_write() на флешку. При этом длительность функции записи не должна превышать время в течении которого весь мой кольцевой буфер заполнится данными в прерываниях. То есть я должен гарантировать длительность работы функции f_write() не более чем сколько то. Так вот я решил померить сколько занимает запись и получилось следующее:
Пока мы запимали данных менее чем 512 байт запись почти мгновенна, ибо пишется в локальный массив ФС вОЗУ и флешь не используется. Если количество уже записанных данных переваливает за 512 байт, то это переписывается на флешь и занимает где-то 10 тиков ОС (я все в тиках меряю, а они равны почти 2 мс). Если количество уже записанных данных переваливает за 4к (размер кластера), то длительность около 45 тиков. Все это приемлемо и относительно стабильно (+- пара тиков).
Но, если логировать около пары-тройки минут, то на графике видно, что случаются ситуации, причем совершенно не ожиданно, когда запись длится заметно больше, вплоть до 120 тиков. Случается это не с какой-то периодичностью, а случайно. Поэтому поставить брейкпоинт и пройти по шагам не представляется возможным, ибо узнаешь о длительной записи только постфактум. Писал я данные с постоянной длинной, один раз 110*8 байт, один раз 64*8 байт. В аттаче результаты, первая колонка длительность в тиках, вторая скалько данных писалось. Почему так? Флешка периодически тормозит? smile.gif Кстати тактируется она частотой около 800 кГц.
Прикрепленные файлы
Прикрепленный файл  fs.rar ( 109.91 килобайт ) Кол-во скачиваний: 131
 
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 2 2008, 07:09
Сообщение #6


Гуру
******

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



Цитата(jorikdima @ Sep 2 2008, 08:44) *
в итоге проблема решилась заменой флешки smile.gif вместо 128 меговой микро взял 1 Гб. Насколько я увидел там другой размер кластера и как-то все заработало, хотя так толком и не понял в чем была проблема...

Работает с любым размером флешки и кластеров на ней. Проверялось "электроникой" в диапазоне от 16M до 4G и разным форматированием. Сдается мне, что Вы небрежно с собственно железом работаете sad.gif
Цитата
совершенно не ожиданно, когда запись длится заметно больше, вплоть до 120 тиков. Случается это не с какой-то периодичностью, а случайно.

Флешка немножко живет своей жизнью sad.gif. Просто поставьте контроль за заметным превышением времени ожидания готовности - увидите. Естественно и переходы другому кластеру за пределами фрагмента FAT таблицы загруженной в текущий 512B буфер, тоже задержку (записали текущий-загрузили новый фрагмент FAT) вызывают. При дефрагментации - может происходить при записи каждого кластера sad.gif
Цитата
Кстати тактируется она частотой около 800 кГц.

Ну оооочень медленно, а зачем??? Это ведь не только скорость передачи по SPI - при ожидании готовности Вы на самом деле тактируете контролер флешки, а он получая вместо обычных (точнее спрашивайте у самой SD) 25MHz килогерцы еле шевелится...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 2 2008, 10:34
Сообщение #7


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(zltigo @ Sep 2 2008, 11:09) *
Работает с любым размером флешки и кластеров на ней. Проверялось "электроникой" в диапазоне от 16M до 4G и разным форматированием. Сдается мне, что Вы небрежно с собственно железом работаете sad.gif

C этим еще буду разбираться.
Цитата(zltigo @ Sep 2 2008, 11:09) *
Флешка немножко живет своей жизнью sad.gif. Просто поставьте контроль за заметным превышением времени ожидания готовности - увидите. Естественно и переходы другому кластеру за пределами фрагмента FAT таблицы загруженной в текущий 512B буфер, тоже задержку (записали текущий-загрузили новый фрагмент FAT) вызывают. При дефрагментации - может происходить при записи каждого кластера sad.gif

Ясно. Жаль это не предсказать перед собственно записью.
Цитата(zltigo @ Sep 2 2008, 11:09) *
Ну оооочень медленно, а зачем??? Это ведь не только скорость передачи по SPI - при ожидании готовности Вы на самом деле тактируете контролер флешки, а он получая вместо обычных (точнее спрашивайте у самой SD) 25MHz килогерцы еле шевелится...

Да у меня и микроконтроллер 3.2 МГц тактируется ибо больше не надо, ну а флешку решил тактировать от SMCLK, который у меня изначально был MCLK/4. Собственно я просто-напросто не подумал о том, что выделено жирным unsure.gif Попробую флешь побыстрее тактировать, но предсказуемости я чувствую не получу. crying.gif crying.gif Спасибо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 2 2008, 10:58
Сообщение #8


Гуру
******

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



Цитата(jorikdima @ Sep 2 2008, 12:34) *
.. но предсказуемости я чувствую не получу. crying.gif crying.gif Спасибо.

Не получите sad.gif. Тут и свой контроллер флешки, и внутренняя организация собственно Flash и ремапинг бэдов и уже поминаемое запись/чтение фрагмента FAT...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
LCD
сообщение Sep 14 2008, 16:28
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



А существует ли модификация FatFs с поддеркой LFN?
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Dec 3 2009, 19:21
Сообщение #10


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Спустя больше года разобрался smile.gif smile.gif smile.gif
Неправильно тип данных определил для WORD. Заработало и на той самой 128 Меговой флешке.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 05:37
Рейтинг@Mail.ru


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