|
|
  |
Выбор файловой системы для LPC2378, Какую систему лучше выбрать под модуль MCI |
|
|
|
Apr 9 2009, 17:52
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(aaarrr @ Apr 9 2009, 16:18)  500кБайт в секунду можно писать без каких-либо ухищрений, просто по одному сектору. Хорошая скорость. USB+FatFS никак быстрее 70 кБайт не вышло  . Правдо записывал по 150 байт, но файл был всё время открыт. А вот FatFS+MCI вышло быстрее, раза в два. Правдо тестировал на древней SD-шке.
|
|
|
|
|
Apr 9 2009, 22:13
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(aaarrr @ Apr 9 2009, 21:28)  Да вот меня и удивляет, откуда берутся настолько плохие цифры - ~150кБ/с. Тут в консерватории что-то править надо. SD на 256 метров, FAT16, пишу по 512 байт 10000 раз ,MCLCLK frequency=6МГц - время минута. Меняю делитель на 12МГц - и один чёрт 40 секунд. Вставляю в ноут 12,8 метра за 110 секунд Флэха старая, но не думал что на столько.
|
|
|
|
|
Apr 10 2009, 04:43
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата Я не понимаю -- 150-200 баксов за штуку дорого, а оплачивать работу инженера за один а то и два месяца -- недорого? Не считая расходов на изготовление этих трех... Ну как я понял здесь инженер и программист одно лицо, да и купив платы надо все равно оплачивать работу программиста. А изготовление 3 таких образцов может быть дешевле 200$.
|
|
|
|
|
Apr 17 2009, 07:45
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Протестировал 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 МБ/сек.
--------------------
Пасу котов...
|
|
|
|
|
Apr 17 2009, 09:17
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
Если интересно, я попробовал чтение на 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) и велико количество багов самого чипа.
|
|
|
|
|
Apr 17 2009, 09:35
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(IgorMarx @ Apr 17 2009, 13:17)  Из-за багов в чипе (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 этой информации на данный момент нет.
--------------------
Пасу котов...
|
|
|
|
|
Apr 17 2009, 10:02
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

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

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(IgorMarx @ Apr 17 2009, 14:02)  Я не работал с контроллером на 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
--------------------
Пасу котов...
|
|
|
|
|
Apr 30 2009, 08:04
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 28-02-07
Пользователь №: 25 746

|
Цитата(Vitaliy_ARM @ Apr 17 2009, 17:47)  Сейчас написал низкоуровневую библиотеку по работе с картами MMC/SD для файловой системы. Использую DMA, частота MCICLK = 24Мгц, запись делаю по четыре блока командой WR_MUL_BLOCK. Размер блока - 512байт. Протестировал на запись флешку - получилось около 550кБайт/с. на чтение - 3Мбайт/с
Теперь буду пробовать прикручивать этот драйвер к файловой системе. Пока еще не знаю, к какой... Странные у вас результаты, правда я старыми картами не балуюсь, но у меня результаты немного другие проц на 8 мгц, скорость чтения 350кбайт/с, запись 190. на 24 в 2.5 раза быстрее, те 450 запись, 850 чтение И при этом карта подключена через СПИ, быстрее не разгонял - было в лом плл включать. По поводу файловых систем - положил болт: мне надо писать одновременно 2 потока данных с разным битрэйтом и читать ещё что-нить. По этому поводу написал свою маленькую фс-ку, пишет двухпотоковые файлы, при этом одновременно можно читать один из двух потоков. Написание заняло 2 часа, час на прогоны.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|