|
Выбор файловой системы для LPC2378, Какую систему лучше выбрать под модуль MCI |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
Apr 9 2009, 12:51
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(etoja @ Apr 9 2009, 15:39)  Лучше выбрать файловую систему FAT16. Если не можете написать сами, возьмите те исходные тексты, которые вам понятны. Немного некорректно поставил вопрос, какие исходники FAT16 лучше выбрать чтобы получить максимальную скорость на запись по 4-х битной шине?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Apr 9 2009, 13:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Дурацкий вопрос: а кто-то гарантирует, что на SD можно записывать 5 мегабайт в секунду? У меня (правда, контроллер другой, и работаю я только на чтение) процесс весьма неспешен. Точно не мерял, но получается заметно меньше 5 Мбайт/сек. Впрочем, можно списать на мои кривые руки, старый контроллер SD в моём камне, на работу с карточкой по одному сектору, ... Впрочем, функция эта в моём устройстве используется больше в технологических целях, юзер может и потерпеть
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Apr 9 2009, 13:07
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(esaulenka @ Apr 9 2009, 16:01)  Дурацкий вопрос: а кто-то гарантирует, что на SD можно записывать 5 мегабайт в секунду? Вообще-то да, и больше можно (до 20MB/s): http://www.gadgetspage.com/cameras/underst...ard-speeds.htmlЦитата(esaulenka @ Apr 9 2009, 16:01)  Впрочем, функция эта в моём устройстве используется больше в технологических целях, юзер может и потерпеть  У меня будет долго терпеть при переливании 1Гб
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Apr 9 2009, 13:39
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Vitaliy_ARM @ Apr 9 2009, 15:51)  Немного некорректно поставил вопрос, какие исходники FAT16 лучше выбрать чтобы получить максимальную скорость на запись по 4-х битной шине? Отвечаю только за то, что сам проверял. Скорость efsl около 150 килобайт в секунду. А о каких максимальных объемах информации идет речь? SDRAM стоит недорого и может быть прекрасным буфером. Насколько я понимаю, речь не идет о массовых тиражах приборов?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 9 2009, 14:05
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Спасибо всем за ответы! Устройство не массовое, будет штуки три. Винда вкладывается в 3 Мегабайта/с. Конкретизирую архитектуру проекта. В устройстве два режима - логер и картридер. В первом случае идет запись данных на флешь со сокростью (после корректировки тз) уже 500кБайт/с. Во втором случае по усб идет считывание того, что он написал на флешку. Режимы переключаются жестко при помощи кнопки. Интересен первый режим, где на флешке надо выжать все, что можно. Думал сделать двойную буферизацию или кольцевой буфер, один "процесс" пишет данные в буфер, другой из буфера на флешку. Размеры буферов ориентировочно - 16кБайт. SRAM ставить нехочется, так как устрйство автономное, питается от батарейки + объем данных неизвестен, может быть будет переваливать за размер одной флешки. Пробую разобраться с исходниками, которые идут в комплекте яра для платы MCB2378
Эскизы прикрепленных изображений
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Apr 9 2009, 14:58
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(Vitaliy_ARM @ Apr 9 2009, 09:05)  Устройство не массовое, будет штуки три. Винда вкладывается в 3 Мегабайта/с. Конкретизирую архитектуру проекта. В устройстве два режима - логер и картридер. В первом случае идет запись данных на флешь со сокростью (после корректировки тз) уже 500кБайт/с. А зачем тогда огород городить, если их всего три будет? Купите 3 маленьких одноплатных компутера, поставьте туда линух, прилепите к ним батареи побольше, I/O и не парьтесь. Нафига делать режим "кардридер" -- можно же просто всавить карту в комп и прочитать? У вас инженерный труд как оценивается?
|
|
|
|
|
Apr 9 2009, 15:05
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(ar__systems @ Apr 9 2009, 17:58)  Купите 3 маленьких одноплатных компутера, поставьте туда линух, прилепите к ним батареи побольше, I/O и не парьтесь. Устройство должно иметь малые габариты. С этим вариантом проблем будет столько же -> "I/O и не парьтесь." Цитата(ar__systems @ Apr 9 2009, 17:58)  Нафига делать режим "кардридер" -- можно же просто всавить карту в комп и прочитать? Можно, а если нет картридера в компе - то нельзя  . Цитата(aaarrr @ Apr 9 2009, 17:18)  500кБайт в секунду можно писать без каких-либо ухищрений, просто по одному сектору. Спасибо за инфо, значит буду пробовать эту архитектуру.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Apr 9 2009, 15:32
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(Vitaliy_ARM @ Apr 9 2009, 10:05)  Устройство должно иметь малые габариты. С этим вариантом проблем будет столько же -> "I/O и не парьтесь." Можно, а если нет картридера в компе - то нельзя  . Ну пусть себе купят кард ридер за 15 долларов! Вспоминается анекдот про удаление гланд... Вот огромный список компов малых размеров в том числе с кардридерами и I/O. http://www.linuxdevices.com/articles/AT8498487406.html
Сообщение отредактировал ar__systems - Apr 9 2009, 15:34
|
|
|
|
|
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 часа, час на прогоны.
|
|
|
|
|
May 6 2009, 13:58
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
В общем после нескольких дней просмотров этапов записи/чтения узнал, что флешки бывают еще с неким классом скорости: http://www.google.com/search?client=opera&...-8&oe=utf-8В итоге в наличии была старая флешка, но на ней определил, что с SD-Card малой кровью не обойтись и начинаю терзать CF и LPC2939.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
May 8 2009, 09:48
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ May 6 2009, 20:01)  Скорее всего зря - там по нынешним временам произвола со скоростями вообще немеряно. Да и дальше PIO/UDMA... В результате каой-нибудь SanDisk UltraII в реальности еле шевелится. А неведомые зверюшки, хоть и Kingston, еле 500KB/s вытягивают. Лучше берите с SD более-менее брендовые и с маркировкой по скорости. С CF дела обстоят гораздо лучше, времена доступа могут быть даже 80 нс. При этом она может висеть на внешней статической шине процессора. Кончено количество их на рынке меньше чем SD, но и устройств не так и много планируется  .
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
May 8 2009, 10:20
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(zltigo @ May 8 2009, 14:10)  Операционки, драйвера разные, но результат в подавляющем большинстве случаев тормозной. А как же Microdrive?  Хотя: Цитата Microdrives are not as fast as the high-end CompactFlash cards; they generally operate at around 4-6 megabytes per second while high-end CF cards can operate at 45 megabytes per second.
|
|
|
|
|
May 8 2009, 11:34
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(zltigo @ May 8 2009, 14:10)   Вот подключите реально и все узнаете. Лично у меня есть реально быстрые CF из комлекта профессиональных фотоаппаратов, но цена в сотню-другую баксов за неcколько гигов мне совсем не нравится. Проверяется на индустриальных PC-шках. Контроллеры вполне продвинутые - UDMA само собой. Операционки, драйвера разные, но результат в подавляющем большинстве случаев тормозной. Одна радость - сможете обычный HDD подключить и заливать на него. После праздников буду тестировать на LPC2468. Посмотрю что получится. Кстати я на форум так и не отписал, на моей карточке SD получалась скорость записи 500кБайт/с - это средняя скорость, измеренная за 5 минут записи данных. Писал по четыре 512-ти байтных блока. Реально поставил осциллограф на шину CMD и D0 и увидел, что иногда на шине данных попадаются большие задержки разной длины ~20-120мс (в это время по шине CMD бегут опросы готовности карты для записи), причем длина их случайна. Т.е. для синхронной быстрой записи такое не годится. Я так полагаю, что в это время внутренний контроллер занимается коррекцией ошибок секторов NAND. В зависимости от количества плохих секторов плавает время задержки, это только мое предположение. P.S: Может кто поделится исходниками по работе с CF, если есть?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|