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

 
 
> 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
 
Start new topic
Ответов
jorikdima
сообщение Sep 2 2008, 06:44
Сообщение #2


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

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 10:45
Рейтинг@Mail.ru


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