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

 
 
> Библиотека файловой системы EFSL
kashey
сообщение Oct 24 2006, 06:45
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 6-12-05
Пользователь №: 11 887



Доброго времени суток!

Вот скачав и написав соответствующий драйвер, для имеющегося процессора, удалось запустить EFSL. Но результаты чтения оставляют желать лучшего: ~300 КБ за 15 секунд, и это при максимальной скорости работы SPI на 20МГЦ контроллере.

Фрагмент кода чтения файла, взято из примера идущего с библиотекой.
Код
while ((e = file_read(&file_w, 16, buf)))
    {
        for (i = 0; i < e; i++)
        {
            /*TODO:*/
        }
    }


Кто может подсказать в чем может быть загвоздка?

Заранее благодарен!
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 37)
umup
сообщение Feb 15 2007, 19:40
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720



Цитата
Интересно будет посмотреть как это у вас получится.В MMC/SD запись всегда выровнена по границе сектора, т.е. буфер сектора в 512 байт в RAM иметь надо всегда!

всей функциональности ФАТ и не нужно. нужно только писать потоком в один файл в читабельном на компьютере виде, при включении устройства можно стирать всю карточку и формировать файловую систему с нуля, еще разбираюсь с ММС
Go to the top of the page
 
+Quote Post
gladov
сообщение Feb 16 2007, 10:35
Сообщение #32


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

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(umup @ Feb 15 2007, 19:40) *
Цитата
Интересно будет посмотреть как это у вас получится.В MMC/SD запись всегда выровнена по границе сектора, т.е. буфер сектора в 512 байт в RAM иметь надо всегда!

всей функциональности ФАТ и не нужно. нужно только писать потоком в один файл в читабельном на компьютере виде, при включении устройства можно стирать всю карточку и формировать файловую систему с нуля, еще разбираюсь с ММС


Была примерно такая же задачка (правда, только чтение) с карточками SmartMedia. Реализовывал на AT89C52. Всего 256 байт ОЗУ. Ессно, контроллер еще и обрабатывал считываемые данные. Так что все реально, вопрос лишь в скорости работы - как сами понимаете она была мягко говоря низкая. Но для моих задач хватило. Вычитывал 16-20кб/с "чистых" данных с FAT12 (или FAT16 - не помню уже).
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Feb 19 2007, 14:01
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(jorikdima @ Feb 13 2007, 09:19) *
Цитата(AlexBoy @ Feb 13 2007, 02:35) *

Можно поставить внешнюю SRAM с spi или i2c интерфейсом.

А вы не могли бы ткнуть пальцем в SRAM с последовательным итерфейсом, а то мне только параллельный встречался.
ЗЫ Но мне (для иных применений) надо хотя бы 32 Мбита

Ну в Мбитах послед. память не меряется, максимум 256кбит. Например fram FM25L16 ... FM25L256 колич. перезаписей - трилионы раз, держит без питания.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 19 2007, 22:45
Сообщение #34


Профессионал
*****

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



Коллеги!

Занимаюсь портированием efsl на at91rm9200. На карту на PC записал в корневую директорию несколько мелких файлов. Делаю:

printf("CARD init...\n");
if ((res = efs_init( &efs, 0 ) ) != 0) {
printf("failed with %i\n",res);
}
else {
printf("ok\n");
printf("Directory of 'root':\n");
ls_openDir( &list, &(efs.myFs), "/");
while (ls_getNext(&list) == 0 ) {
list.currentEntry.FileName[LIST_MAXLENFILENAME-1] = '\0';
printf( "%s ( %li bytes )\n" ,
list.currentEntry.FileName,
list.currentEntry.FileSize) ;
}
}
Не получаю никакого списка файлов. Хотя инициализация прошла успешно.

Есть идеи в какую сторону копать?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 20 2007, 15:21
Сообщение #35


Профессионал
*****

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



Все заработало. Причин было две:
1. Посматривать надо в errata (DMA шлет данные в инверсном порядке (big_endian, если сам процессор работает в little_endian).
2. В фукции memCpy (plibc.c) в отличие от библиотечной memcpy другой порядок *from, *to, size.

Теперь надо все почистить и померять скорости.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 22 2007, 18:12
Сообщение #36


Профессионал
*****

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



Коллеги!

Борюсь с efsl на at91rm9200. Читаю файл в 6 Mb со скоростью 1560 Kb/s без проблем. Пробую писать этот же файл обратно (с другим именем, естественно), записывается только 24 сектора по 512 байт, т.е. 12288 байт. И ни в какую больше.

Не сталкивался ли кто с аналогичными проблемами?
Go to the top of the page
 
+Quote Post
Denisvak
сообщение Feb 27 2007, 16:30
Сообщение #37


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

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



Добрый день!
А вот по http://elm-chan.org/fsw/ff/00index_e.html может кто-нить объяснить как её настроить под свой проектик? У меня английским не очень. Понял что надо написать свои функции disk_initialize, disk_read, get_fattime, disk_write, disk_status. вроде написал.
Дальше пишу:

f_mount(0, &fs);
res = f_open(&fsrc, "config.txt", FA_OPEN_EXISTING | FA_READ);
if (res)
{
send_char_uart0(res); //debug
}

возвращает 0x01, в чем может быть причина? "config.txt" - лежит в корне
Go to the top of the page
 
+Quote Post
Denisvak
сообщение Feb 27 2007, 22:47
Сообщение #38


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

Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038



Сам разобрался!
Спасибо
Go to the top of the page
 
+Quote Post

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

 


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


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