Перейти к содержанию
    

Библиотека файловой системы EFSL

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

 

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

 

Фрагмент кода чтения файла, взято из примера идущего с библиотекой.

while ((e = file_read(&file_w, 16, buf)))
    {
        for (i = 0; i < e; i++)
        {
            /*TODO:*/
        }
    }

 

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

 

Заранее благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 МГц - это тактовая частота контроллера? У филипков к примеру макс. частота клоков SPI - одна восьмая периферийных клоков, которые меньше или равны тактовой. Кроме того, кроме чтения собственно данных из файла, постоянно читается ФАТ (сектор данных - фат, сектор данных - фат и.т.д.) Так что результат неудивителен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 МГц - это тактовая частота контроллера? У филипков к примеру макс. частота клоков SPI - одна восьмая периферийных клоков, которые меньше или равны тактовой. Кроме того, кроме чтения собственно данных из файла, постоянно читается ФАТ (сектор данных - фат, сектор данных - фат и.т.д.) Так что результат неудивителен.

 

...
long clk = 20000000;

ssp_set_bits_per_word(8);
ssp_set_speed(clk / 2);
...

 

Исходя из этого можно предположить, что частота клоков SPI 1/2

 

Реально если посмотреть осцилографом, то получим ~3МБ/c, но даже если скорость чтения такова и чтение происходит (сектор - фат, ... ), то все равно как то медленно получается...

 

Исходя из вашего ответа, то про эффективное использование EFSL(загрузка полноэкранных картинок 640x480, и т.д.) можно забыть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки какой контроллер вы используете?

 

для увеличения скорости можно:

 

- Само собой, увеличить частоту процессора

- Использовать не СПИ, а 4-битную шину (если вы пользуете СД-карту)

- Не пользовать имеющуюся в файловой системе функцию чтения из файла, а написать более эффективную. Сначала запоминать цепочку кластеров файла и дальше читать уже не обращаясь к фат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Использую Sharp LH75401.

 

- Увеличить частоту наврятли получится

- SD-карты в качестве носителя

- Переписывать библиотеку не хотелось бы, но если другого выхода нет, то придеться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пробовал на 2148 на SPI0, читал с SD, получалось около 3сек на 1 мегабайт

правда читал по 512, да и ссылка была несколько другая (но думаю не принципиально)

http://gandalf.arubi.uni-kl.de/avr_project..._arm/index.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал простой тест на время записи/чтения, получилось ~30 КБ/с.

 

Неужели потери на чтение служебной информации FAT такие объемные?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал простой тест на время записи/чтения, получилось ~30 КБ/с.

 

Неужели потери на чтение служебной информации FAT такие объемные?

 

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

 

хм. щас протестировал на скорость свою систему. у меня получилось через SPI на LPC2292 порядка 170 кб/сек. Исходники ФАТ у меня от PRLLC. Тест такой:

 

fp = fopen("work.tmp", READ);

printf ("\r\nначел\r\n");

do

{

i = fgetc(fp);

} while (i != EOF);

printf ("\r\nкончел\r\n");

fclose(fp);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хм. щас протестировал на скорость свою систему. у меня получилось через SPI на LPC2292 порядка 170 кб/сек. Исходники ФАТ у меня от PRLLC. Тест такой:

 

fp = fopen("work.tmp", READ);

printf ("\r\nначел\r\n");

do

{

i = fgetc(fp);

} while (i != EOF);

printf ("\r\nкончел\r\n");

fclose(fp);

 

Так оно поди всё строчкой

i = fgetc(fp);

съедается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Портировал свою файловую систему на SD карточку, основные задержки - в цикле ожидания, те когда записываешь слово по SPI и ждешь его окончания. Выход в использовании DMA или хотя бы использовать весь буфер FIFO.

Изменено пользователем КонстантинТ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Портировал свою файловую систему на SD карточку, основные задержки - в цикле ожидания, те когда записываешь слово по SPI и ждешь его окончания. Выход в использовании DMA или хотя бы использовать весь буфер FIFO.

 

А как в данной ситуации FIFO или DMA могут ускорить работу с картой? Если частота СПИ предельная, то выход в "утолщении" канала связи с картой, т.е. использование не последовательной, а 4-х битной шины СД карты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хм. щас протестировал на скорость свою систему. у меня получилось через SPI на LPC2292 порядка 170 кб/сек. Исходники ФАТ у меня от PRLLC. Тест такой:

 

fp = fopen("work.tmp", READ);

printf ("\r\nначел\r\n");

do

{

i = fgetc(fp);

} while (i != EOF);

printf ("\r\nкончел\r\n");

fclose(fp);

 

А можно скинуть исходники FAT (PRLCC) на [email protected] ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Многое ещё зависит от карточки, из того что было под рукой самые лучшие результаты показал трансценд, самые тормозные - кингстон.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каков минимальный объём служебной информации, который пишется на SD карту системой EFSL? Можно ли настроить на работу не с SD картой, а например с какой-нибудь другой памятью вроде AT25 и т.п.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каков минимальный объём служебной информации, который пишется на SD карту системой EFSL? Можно ли настроить на работу не с SD картой, а например с какой-нибудь другой памятью вроде AT25 и т.п.?

 

Служебная информация: MBR (master boot-record 512байт), 1 или 2 таблицы ФАТ (объем зависит от объема флешки), корневой каталог (на запись об 1 файле 32 байта). Да, еще резервированные сектора. К примеру, на SD капрте объемом 512 мбайт на это все уходит 270 кбайт...

 

Можно настроить на работу с любой памятью. Я работал с использованием файловой системы (PRLLC правда а не EFSL) с флешкой AT45DB321 (4МБ) и даже с линейкой из 8 микросхем 24С512 (общий объем 512 кБ). Переписываются функции записи-чтения сектора и иничиализации переменных фвйловой системы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...