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

Выбор файловой системы для LPC2378

Это дорого.

Я не понимаю -- 150-200 баксов за штуку дорого, а оплачивать работу инженера за один а то и два месяца -- недорого? Не считая расходов на изготовление этих трех...

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


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

500кБайт в секунду можно писать без каких-либо ухищрений, просто по одному сектору.

 

Хорошая скорость. USB+FatFS никак быстрее 70 кБайт не вышло :( . Правдо записывал по 150 байт, но файл был всё время открыт.

А вот FatFS+MCI вышло быстрее, раза в два. Правдо тестировал на древней SD-шке.

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


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

Да вот меня и удивляет, откуда берутся настолько плохие цифры - ~150кБ/с. Тут в консерватории что-то править надо.

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


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

Да вот меня и удивляет, откуда берутся настолько плохие цифры - ~150кБ/с. Тут в консерватории что-то править надо.

 

SD на 256 метров, FAT16, пишу по 512 байт 10000 раз ,MCLCLK frequency=6МГц - время минута. Меняю делитель на 12МГц - и один чёрт 40 секунд. Вставляю в ноут 12,8 метра за 110 секунд :)

Флэха старая, но не думал что на столько.

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


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

Вставляю в ноут 12,8 метра за 110 секунд :)

12.8 одним куском? Просто удивительные тормоза.

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


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

Гость MALLOY2
Я не понимаю -- 150-200 баксов за штуку дорого, а оплачивать работу инженера за один а то и два месяца -- недорого? Не считая расходов на изготовление этих трех...

 

Ну как я понял здесь инженер и программист одно лицо, да и купив платы надо все равно оплачивать работу программиста. А изготовление 3 таких образцов может быть дешевле 200$.

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


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

Попробовал настроить тактовую на 25Мбит в примере Mci в папке яра. Получил ~22кБита/c по четырехбитной шине с использованием DMA. :smile3046:

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


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

Протестировал FatFS на LPC2478

Исходные данные:

FatFS 0.07 + uCOS-II

LPC2478: Core CLK 72МГц, MCI CLK - 18МГц, трансфер данных между картой и памятью по DMA.

 

При тестировании производилась запись и чтение файла целиком, и для сравнения - в цикле блоками по 512 байт.

При чтении/записи целого файла драйвер использует команды SD карты WRITE_MULTIPLE_BLOCK (CMD25) и READ_MULTIPLE_BLOCK (CMD18).

FatFS пишет последовательно столько блоков, сколько их содержится в кластере.

При чтении/записи блоками по 512 байт драйвер использует команды WRITE_SINGLE_BLOCK (CMD24) и READ_SINGLE_BLOCK (CMD17).

 

SD Card - 16 MB (размер кластера 4096 байт):

Test for read/write speed whole file.                                          
File size       = 262144 bytes                                                 
File write time = 770152 mks                                                   
Write speed     = 340425 bytes/sec                                             
File read time  = 87600 mks                                                    
Read speed      = 3011764 bytes/sec                                            

Test for read/write speed with blocks.                                         
File size       = 262144 bytes                                                 
Block size      = 512 bytes                                                    
File write time = 5824609 mks                                                  
Block write time= 11375 mks                                                    
Write speed     = 45007 bytes/sec                                              
File read time  = 270855 mks                                                   
Block read time = 528 mks                                                      
Read speed      = 969696 bytes/sec

Комментарий. Карта старая, запись длится примерно 10 мс.

В Windows для этой же карты разультат на запись 650 кБ/сек, на чтение - 6 МБ/сек.

 

SD Card - 2 GB (размер кластера 32768 байт):

Test for read/write speed whole file.                                          
File size       = 262144 bytes                                                 
File write time = 290314 mks                                                   
Write speed     = 904593 bytes/sec                                             
File read time  = 39776 mks                                                    
Read speed      = 6736842 bytes/sec                                            

Test for read/write speed with blocks.                                         
File size       = 262144 bytes                                                 
Block size      = 512 bytes                                                    
File write time = 1438077 mks                                                  
Block write time= 2808 mks                                                     
Write speed     = 182336 bytes/sec                                             
File read time  = 268885 mks                                                   
Block read time = 524 mks                                                      
Read speed      = 977099 bytes/sec

В Windows для этой карты разультат на запись 2200 кБ/сек, на чтение - 12 МБ/сек.

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


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

Если интересно, я попробовал чтение на LPC2888/D1. DMA, 4-bit width, 6 MHz clock (больше на на соплях не вышло - CRC ERROR)

порлучил чтение сектора за время 0.7 mc. Ядро на частоте 60 MHz.

 

Из-за багов в чипе (DMA останавливается раньше, чем вычитает весь FIFO) пришлось читать 120 двойных слов через DMA и потом остатки из FIFO выгребать вручную. Затем перемещать считанный сектор в буфер, если изначально буфер не выровнен по границе 4 байта. Мало того, перед запуском DMA необходимо сбрасывать data cache, если используется.

 

Если интересуют малые размеры, высокая производительность и не пугает пайка BGA корпусов с шагом 0.5, то рекомендую этот чип. Правда, насколько он хорош, настолько же плохая документация (что характерно для NXP) и велико количество багов самого чипа.

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


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

Из-за багов в чипе (DMA останавливается раньше, чем вычитает весь FIFO) пришлось читать 120 двойных слов через DMA и потом остатки из FIFO выгребать вручную. Затем перемещать считанный сектор в буфер, если изначально буфер не выровнен по границе 4 байта. Мало того, перед запуском DMA необходимо сбрасывать data cache, если используется.

Можно ли об этом поподробнее. На 2478 столкнулся с непонятным поведением DMA, если адрес в памяти не выровнен на границу 4.

Буфер находится во внешней SDRAM, забирается напрямую по DMA в MCI при записи. Иногда DMA просто останавливается, и в MCI возникает TxUnderrun. Причем именно иногда, файл размером 1М Байт может без ошибок записаться 2-3 раза, потом где-то в середине трансфера DMA останавливается. Пока пришлось реализовать запись и чтение из невыровненных буферов через промежуточное копирование во внутренний буфер в области USB RAM, он все равно нужен для записи буферов, содержащихся во внутренней RAM и Flash, не доступных для DMA, но тем не менее потеря производительности есть.

Хотелось бы уточнить, описаны где-либо проблемы и ошибки DMA контроллера? В errata этой информации на данный момент нет.

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


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

Я не работал с контроллером на 2478, но думаю, что он должен работать аналогично тому, что на 2888. С ним ситуация такая: он может перемещать блоки данных размером не более 0x1000 "юнитов", где "юнит" может быть байт, слово и двойное слово. Соответственно, для байтов выравнивание не требуется, для слов - выравнивание на границу 2 байта (я это не проверял) и для двойных слов необходимо выравнивание по границе 4 байт. Поскольку MCI FIFO (а впринципе не важно, чъё FIFO) имеет разрядность 32, то для DMA можно использовать только режим чтения (или записи) двойными словами, и как следствие, необходимо иметь буфер, выровненный по границе двойного слова.

 

Забыл добавить - в Errata нет и более серьёзных проблем, чем эти.

 

Далее, DMA реально останавливается, когда FIFO ещё не пустое - видать, при разводке чипа DMA прицепили к сигналу "FIFO наполовину заполнено". Вот он и не дочитывает. И подобного геммороя у NXP полно, странно то, что они не перевыпускают свои даташиты с исправлениями.

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


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

Я не работал с контроллером на 2478, но думаю, что он должен работать аналогично тому, что на 2888. С ним ситуация такая: он может перемещать блоки данных размером не более 0x1000 "юнитов", где "юнит" может быть байт, слово и двойное слово.

Да, если Flow control - DMA, если Flow control - периферия, то количество этих юнитов не имеет значения, пока периферия запрашивает - он будет отдавать. Я использовал в своей реализации именно MCI контроллер для flow control.

 

Соответственно, для байтов выравнивание не требуется, для слов - выравнивание на границу 2 байта (я это не проверял) и для двойных слов необходимо выравнивание по границе 4 байт. Поскольку MCI FIFO (а впринципе не важно, чъё FIFO) имеет разрядность 32, то для DMA можно использовать только режим чтения (или записи) двойными словами, и как следствие, необходимо иметь буфер, выровненный по границе двойного слова.

У них по документации рулится 2 параметра - burst size и wide. Когда wide для памяти устанавливаю 32 бита, то все нормально, а если 8 - то DMA иногда затыкается.

 

Далее, DMA реально останавливается, когда FIFO ещё не пустое - видать, при разводке чипа DMA прицепили к сигналу "FIFO наполовину заполнено". Вот он и не дочитывает. И подобного геммороя у NXP полно, странно то, что они не перевыпускают свои даташиты с исправлениями.

Когда ставил DMA в качестве Flow Control - были проблемы, не забирает последнюю "половинку Fifo". Видимо здесь имеется ввиду именно это.

 

Выше подправил результаты тестов для SD

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


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

Всем спасибо за ответы.

Скромные результаты для карточек.

 

Сейчас написал низкоуровневую библиотеку по работе с картами MMC/SD для файловой системы.

Использую DMA, частота MCICLK = 24Мгц, запись делаю по четыре блока командой WR_MUL_BLOCK.

Размер блока - 512байт.

Протестировал на запись флешку - получилось около 550кБайт/с.

на чтение - 3Мбайт/с

 

Теперь буду пробовать прикручивать этот драйвер к файловой системе.

Пока еще не знаю, к какой...

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


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

Пока еще не знаю, к какой...

На lpc2478 FatFs дала скорость раза в четыре больше, чем efsl.

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


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

Сейчас написал низкоуровневую библиотеку по работе с картами MMC/SD для файловой системы.

Использую DMA, частота MCICLK = 24Мгц, запись делаю по четыре блока командой WR_MUL_BLOCK.

Размер блока - 512байт.

Протестировал на запись флешку - получилось около 550кБайт/с.

на чтение - 3Мбайт/с

 

Теперь буду пробовать прикручивать этот драйвер к файловой системе.

Пока еще не знаю, к какой...

 

Странные у вас результаты, правда я старыми картами не балуюсь, но у меня результаты немного другие

проц на 8 мгц, скорость чтения 350кбайт/с, запись 190.

на 24 в 2.5 раза быстрее, те 450 запись, 850 чтение

И при этом карта подключена через СПИ, быстрее не разгонял - было в лом плл включать.

По поводу файловых систем - положил болт: мне надо писать одновременно 2 потока данных с разным битрэйтом и читать ещё что-нить. По этому поводу написал свою маленькую фс-ку, пишет двухпотоковые файлы, при этом одновременно можно читать один из двух потоков. Написание заняло 2 часа, час на прогоны.

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


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

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

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

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

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

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

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

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

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

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