|
Библиотека файловой системы EFSL |
|
|
|
Oct 24 2006, 06:45
|
Группа: Новичок
Сообщений: 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:*/ } } Кто может подсказать в чем может быть загвоздка? Заранее благодарен!
|
|
|
|
|
Oct 24 2006, 08:54
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-12-05
Пользователь №: 11 887

|
Цитата(dm_mur @ Oct 24 2006, 10:48)  20 МГц - это тактовая частота контроллера? У филипков к примеру макс. частота клоков SPI - одна восьмая периферийных клоков, которые меньше или равны тактовой. Кроме того, кроме чтения собственно данных из файла, постоянно читается ФАТ (сектор данных - фат, сектор данных - фат и.т.д.) Так что результат неудивителен. Код ... long clk = 20000000;
ssp_set_bits_per_word(8); ssp_set_speed(clk / 2); ... Исходя из этого можно предположить, что частота клоков SPI 1/2 Реально если посмотреть осцилографом, то получим ~3МБ/c, но даже если скорость чтения такова и чтение происходит (сектор - фат, ... ), то все равно как то медленно получается... Исходя из вашего ответа, то про эффективное использование EFSL(загрузка полноэкранных картинок 640x480, и т.д.) можно забыть?
|
|
|
|
|
Oct 24 2006, 09:46
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-12-05
Пользователь №: 11 887

|
Использую Sharp LH75401.
- Увеличить частоту наврятли получится - SD-карты в качестве носителя - Переписывать библиотеку не хотелось бы, но если другого выхода нет, то придеться.
|
|
|
|
|
Oct 24 2006, 09:47
|
Участник

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

|
Я пробовал на 2148 на SPI0, читал с SD, получалось около 3сек на 1 мегабайт правда читал по 512, да и ссылка была несколько другая (но думаю не принципиально) http://gandalf.arubi.uni-kl.de/avr_project..._arm/index.html
|
|
|
|
|
Oct 24 2006, 13:48
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-12-05
Пользователь №: 11 887

|
Сделал простой тест на время записи/чтения, получилось ~30 КБ/с.
Неужели потери на чтение служебной информации FAT такие объемные?
Полагая что чтение служебной информации FAT, занимает столько же времени сколько и чтение данных, даже переписав функцию чтения не получим значительных изменений.
|
|
|
|
|
Oct 25 2006, 03:51
|

Местный
  
Группа: Свой
Сообщений: 255
Регистрация: 10-03-05
Из: Омск
Пользователь №: 3 195

|
Цитата(kashey @ Oct 24 2006, 16:48)  Сделал простой тест на время записи/чтения, получилось ~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);
|
|
|
|
|
Oct 25 2006, 07:10
|
Местный
  
Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034

|
Цитата(dm_mur @ Oct 25 2006, 09:51)  хм. щас протестировал на скорость свою систему. у меня получилось через 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); съедается.
|
|
|
|
|
Oct 30 2006, 12:03
|
Группа: Новичок
Сообщений: 10
Регистрация: 6-12-05
Пользователь №: 11 887

|
Цитата(dm_mur @ Oct 25 2006, 07:51)  хм. щас протестировал на скорость свою систему. у меня получилось через 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) на kashey@monada.ks.ua ?
|
|
|
|
|
Nov 3 2006, 03:10
|

Местный
  
Группа: Свой
Сообщений: 255
Регистрация: 10-03-05
Из: Омск
Пользователь №: 3 195

|
Цитата(AVR @ Nov 3 2006, 00:46)  Каков минимальный объём служебной информации, который пишется на SD карту системой EFSL? Можно ли настроить на работу не с SD картой, а например с какой-нибудь другой памятью вроде AT25 и т.п.? Служебная информация: MBR (master boot-record 512байт), 1 или 2 таблицы ФАТ (объем зависит от объема флешки), корневой каталог (на запись об 1 файле 32 байта). Да, еще резервированные сектора. К примеру, на SD капрте объемом 512 мбайт на это все уходит 270 кбайт... Можно настроить на работу с любой памятью. Я работал с использованием файловой системы (PRLLC правда а не EFSL) с флешкой AT45DB321 (4МБ) и даже с линейкой из 8 микросхем 24С512 (общий объем 512 кБ). Переписываются функции записи-чтения сектора и иничиализации переменных фвйловой системы.
|
|
|
|
|
Feb 5 2007, 19:12
|

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

|
Я портировал FatFs http://elm-chan.org/fsw/ff/00index_e.html на SAM7, получалось 1,2Мб/с, а без использования FAT 1,8Мб/с
|
|
|
|
|
Feb 6 2007, 10:35
|
Участник

Группа: Свой
Сообщений: 36
Регистрация: 27-09-05
Из: Украина, г. Херсон
Пользователь №: 8 994

|
Возник следующий вопрос: Кто как борется с отключением питания во время записи на карту? Я в схемотехнике не силен, но подозреваю, что можно сделать так, чтобы на на один из входов внешнего прерывания контроллера подавался сигнал пропадания питания, а контроллер продолжал питаться еще некоторое время от конденсаторов на плате. За это время надо успеть сделать flush(). Может быть есть другие варианты? Варианты без изменений в аппаратной части (программные)?
PS: Подразумевается использование FAT.
|
|
|
|
|
Feb 7 2007, 19:57
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Игра со схемотехникой мало чем поможет. Да и не логично. Это типа к исходникам fail safe файловой системы должна идти инструкция по организации питания? Нет, просто EFSL не транзакционная файловая система и надежности от нее ждать не стоит. Проще всего на мой взгляд сделать энергонезависимый буфер. Цитата(ArtemK @ Feb 6 2007, 12:05)  Возник следующий вопрос: Кто как борется с отключением питания во время записи на карту? Я в схемотехнике не силен, но подозреваю, что можно сделать так, чтобы на на один из входов внешнего прерывания контроллера подавался сигнал пропадания питания, а контроллер продолжал питаться еще некоторое время от конденсаторов на плате. За это время надо успеть сделать flush(). Может быть есть другие варианты? Варианты без изменений в аппаратной части (программные)?
PS: Подразумевается использование FAT. Там же указатель на файловую систему идет аргументом при открытии файла. Никто не мешает инициализировать несколько файловых систем на разных носителях, для того там этот аргумент и идет. Цитата(Dron_Gus @ Feb 5 2007, 19:11)  Кто-нить перекраивал efsl для одновременной работы с двумя носителями? Как я понял, копаясь в исходниках, количество носителей строго 1.
|
|
|
|
|
Feb 7 2007, 23:30
|

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

|
Цитата Alex B._ Видел уже. Вы посмотрите на требуемые объемы ROM (4К) и RAM (540) А нужно реализовать в объеме 2К ROM и 128 RAM Ладно, напишу сам
|
|
|
|
|
Feb 8 2007, 06:47
|

Местный
  
Группа: Свой
Сообщений: 255
Регистрация: 10-03-05
Из: Омск
Пользователь №: 3 195

|
Цитата(AlexBoy @ Feb 5 2007, 19:12)  Я портировал FatFs http://elm-chan.org/fsw/ff/00index_e.html на SAM7, получалось 1,2Мб/с, а без использования FAT 1,8Мб/с Вот мои изыскания/наблюдения о скорости записи в SD: Итак, SD-карта A-Data 150x. Подключена по SPI, частота клоков 7.5 МГц. DMA в проце нет. Запись идет в режиме WRITE_MULTIPLE_BLOCK. При записи до 512 секторов подряд (около 250 кБ) информация в SD улетает со скоростью ~500 кб/сек. На 513-м секторе карточка тормозит и "держит" бизи какое-то время. Дальше процесс повторяется. Таким образом, "средняя" скорость при записи в реальном времени нескольких мегабайт подряд получилась около 250 кб/сек.  Карточка той же фирмы, но 60х "спотыкается" на 256-м секторе...
|
|
|
|
|
Feb 8 2007, 15:59
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(AlexBoy @ Feb 5 2007, 19:12)  Я портировал FatFs http://elm-chan.org/fsw/ff/00index_e.html на SAM7, получалось 1,2Мб/с, а без использования FAT 1,8Мб/с А где там собственно порт-та?
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Feb 10 2007, 23:38
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Интересно будет посмотреть как это у вас получится. В MMC/SD запись всегда выровнена по границе сектора, т.е. буфер сектора в 512 байт в RAM иметь надо всегда! Можете посмотреть по ссылке какие ресурсы требуют некоторые решения для файловой системы: http://aly.projektas.lt/Projects/STR91_Start/STR91.htm#4Цитата(umup @ Feb 8 2007, 01:00)  Цитата Alex B._ Видел уже. Вы посмотрите на требуемые объемы ROM (4К) и RAM (540) А нужно реализовать в объеме 2К ROM и 128 RAM Ладно, напишу сам
|
|
|
|
|
Feb 15 2007, 19:40
|

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

|
Цитата Интересно будет посмотреть как это у вас получится.В MMC/SD запись всегда выровнена по границе сектора, т.е. буфер сектора в 512 байт в RAM иметь надо всегда! всей функциональности ФАТ и не нужно. нужно только писать потоком в один файл в читабельном на компьютере виде, при включении устройства можно стирать всю карточку и формировать файловую систему с нуля, еще разбираюсь с ММС
|
|
|
|
|
Feb 16 2007, 10:35
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(umup @ Feb 15 2007, 19:40)  Цитата Интересно будет посмотреть как это у вас получится.В MMC/SD запись всегда выровнена по границе сектора, т.е. буфер сектора в 512 байт в RAM иметь надо всегда! всей функциональности ФАТ и не нужно. нужно только писать потоком в один файл в читабельном на компьютере виде, при включении устройства можно стирать всю карточку и формировать файловую систему с нуля, еще разбираюсь с ММС Была примерно такая же задачка (правда, только чтение) с карточками SmartMedia. Реализовывал на AT89C52. Всего 256 байт ОЗУ. Ессно, контроллер еще и обрабатывал считываемые данные. Так что все реально, вопрос лишь в скорости работы - как сами понимаете она была мягко говоря низкая. Но для моих задач хватило. Вычитывал 16-20кб/с "чистых" данных с FAT12 (или FAT16 - не помню уже).
|
|
|
|
|
Feb 19 2007, 14:01
|

Местный
  
Группа: Свой
Сообщений: 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 колич. перезаписей - трилионы раз, держит без питания.
|
|
|
|
|
Feb 27 2007, 16:30
|
Частый гость
 
Группа: Участник
Сообщений: 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" - лежит в корне
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|