|
Помогите подобрать файловую систему для microsd |
|
|
|
 |
Ответов
|
Nov 21 2008, 17:55
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 18-05-08
Пользователь №: 37 607

|
Цитата(Зверюга @ Nov 21 2008, 20:50)  Я просто пытаюсь понять, от чего зависит скорость чтения.
Мне нужно (я пересчитал) - 1,5 Мбайт в секунду. Да и еще по ходу их наверное обрабатывать. а, ну тогда понятно. либо с ARM в SPI либо попробовать на AVR в режиме SD.
|
|
|
|
|
Nov 24 2008, 17:21
|
Участник

Группа: Участник
Сообщений: 35
Регистрация: 18-05-08
Пользователь №: 37 607

|
Цитата(Dog Pawlowa @ Nov 24 2008, 19:39)  Пробовать то можно, но существующие порт efsl (например) для SD интерфейса ARM7 NXP не использует DMA. В отличие от SPI, между прочим. Что касается SPI AVR, то что толку разогнать сам SPI? нужно же еще флаг готовности анализировать, адрес инкрементировать, проверять адрес на соответствие диапазону. Без DMA+IRQ сделать это с высокой скоростью нереально. Это так, но если данные идут непрерывно, без дефрагментации то можно просто установить размер блока данных, скажем 64 кБ и принимать их непрерывно, а потом уже делать проверки и прочая. мне лично больше 256кбит/с не было нужно, поэтому не пробовала. вот например часть кода из рабочей программы с функциями установки длины блока, считывания блока а также инициализацией карты, чтением FAT и т.д: Код unsigned char sec_per_clust, data[512]; unsigned int j, j2; unsigned long fat_base, cluster_base, addr; flash unsigned char cmd0[6] = {0x40, 0x00, 0x00, 0x00, 0x00, 0x95}, cmd1[6] = {0x41, 0x00, 0x00, 0x00, 0x00, 0x01}, blck_ln_200[6] = {0x50, 0x00, 0x00, 0x02, 0x00, 0x01}; //элементы 2-5 задают размер блока, в данном случае 512 байт ... void set_block_len(void) { spi(0xff); for(i=0; i<6; i++) spi(blck_ln_200[i]); while(spi(0xff)==0xff); spi(0xff); } ... void read_single_block(unsigned long daddr) { //k=255; //убрать комментарии если не хотите зависания при отсутствии карты do { spi(0xff); spi(0x51); spi(daddr>>24); spi(daddr>>16); spi(daddr>>8); spi(daddr); spi(0x01); while(spi(0xff)==0xff); //--k; } while((SPDR!=0x00));//&&(k>0)); while(spi(0xff)!=0xfe); for(j2=0; j2<512; j2++) data[j2]=spi(0xff); //разумеется, количество итераций зависит от размера считываемого блока spi(0xff); spi(0xff); spi(0xff); } ... //далее функция преобразования четырех байтов в одно 32-битное число (ну не нашла я готовых функций) void uchar_to_ulong(unsigned long *p, unsigned int offset, unsigned int count) { *p=0; for(; count>0; count--) { *p|=*(data+offset+count-1); if(count>1) *p<<=8; } } ... //=======инициализация карты=========== for (i=0; i<10; i++) spi(0xff); delay_ms(1); //========сброс карты=============== card_cs=0; do { spi(0xff); for(i=0; i<6; i++) spi(cmd0[i]); for(i=0; i<8; i++) if(spi(0xff)!=0xff) break; } while(SPDR!=0x01); //ждем ответа 0x01 - спящий режим //spi(0xff); //CS=1; //=======инициализация режима spi карты======= //CS=0; do { spi(0xff); for(i=0; i<6; i++) spi(cmd1[i]); for(i=0; i<8; i++) if(spi(0xff)!=0xff) break; } while(SPDR!=0x00); //spi(0xff); set_block_len();//0x100); read_single_block(0); //чтение master boot record card_cs=1; uchar_to_ulong(&addr, 0x1c6, 4); //позиция partition boot record в секторах card_cs=0; read_single_block(addr<<9); //чтение pbr card_cs=1; //================вычисление root base======================= uchar_to_ulong(&root_base, 0x0e , 2); //зарезервированных секторов root_base+=addr; //fat base в секторах fat_base=root_base<<9; //fat base в байтах uchar_to_ulong(&addr, 0x16, 2); //секторов на fat addr<<=1; //удвоение из-за того что 2 таблицы fat root_base+=addr; //root base в секторах root_base<<=9; //в байтах //================вычисление cluster base==================== sec_per_clust=data[0x0d]; //секторов на кластер addr=data[0x0d]; addr<<=10; //байтов на 2 фиктивных кластера cluster_base=root_base-addr; uchar_to_ulong(&addr, 0x11, 2); //число записей в корневом каталоге addr<<=5; //размер корневого каталога в байтах cluster_base+=addr; //cluster base в байтах card_cs=0; read_single_block(root_base); //чтение корневого каталога код читается плохо, согласна (написано полностью с нуля), но разобраться можно. спрашивайте, если что.
Сообщение отредактировал Paulina - Nov 24 2008, 17:22
|
|
|
|
|
Nov 25 2008, 07:49
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Paulina @ Nov 24 2008, 21:21)  Это так, но если данные идут непрерывно, без дефрагментации то можно просто установить размер блока данных, скажем 64 кБ и принимать их непрерывно Конечно, Paulina, только можно ли это назвать полноценной файловой системой? Цитата(sergeeff @ Nov 24 2008, 23:55)  Ну посмотрите хоть, перед тем как свой огород городить. Коллега, на AVR скорость fatfs около 300 кб/c, поэтому вопрос быстрее она efsl или нет, второстепенный, поскольку автору нужно больше, насколько я помню начало топика.
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
Зверюга Помогите подобрать файловую систему для microsd Nov 20 2008, 11:17 XVR Цитата(Зверюга @ Nov 20 2008, 14:17) Добр... Nov 20 2008, 12:19 Alex B._ Цитата(Зверюга @ Nov 20 2008, 14:17) каку... Nov 20 2008, 12:24 Зверюга Свою?
Я наверное не сделал акцент, но с этой флешк... Nov 20 2008, 15:36 XVR Цитата(Зверюга @ Nov 20 2008, 18:36) Свою... Nov 20 2008, 17:35 SysRq Цитата(Зверюга @ Nov 20 2008, 18:36) Я на... Nov 20 2008, 17:55 Nixon Она вообще не поддерживает никакого режима. Вам ну... Nov 20 2008, 15:42 Dog Pawlowa Цитата(Зверюга @ Nov 20 2008, 15:17) Вопр... Nov 20 2008, 15:45 Зверюга В общем, максимум что мне нужно это транслировать ... Nov 20 2008, 16:27 Dog Pawlowa Цитата(Зверюга @ Nov 20 2008, 20:27) или ... Nov 20 2008, 17:07 Зверюга ЦитатаА свой софт на Windows предусматривается?
... Nov 20 2008, 18:45 XVR Цитата(Зверюга @ Nov 20 2008, 21:45) Ну е... Nov 20 2008, 20:36 Зверюга КТо-нибудь именл дело с этим http://www.megachip.r... Nov 21 2008, 04:00 Dog Pawlowa Цитата(Зверюга @ Nov 21 2008, 08:00) Там ... Nov 21 2008, 11:38 Зверюга Ну, продолжите.
Я так понимаю, скорость чтения зав... Nov 21 2008, 15:32 Paulina Цитата(Зверюга @ Nov 21 2008, 18:32) Ну, ... Nov 21 2008, 16:41 Зверюга Ну у на ARM7 - где 60 МГц?. Можно ведь разогнеать ... Nov 21 2008, 17:23 Paulina Цитата(Зверюга @ Nov 21 2008, 20:23) Ну у... Nov 21 2008, 17:25     Paulina Цитата(Dog Pawlowa @ Nov 25 2008, 10:49) ... Nov 25 2008, 13:55     sergeeff Цитата(Dog Pawlowa @ Nov 25 2008, 11:49) ... Nov 25 2008, 15:18      Paulina Цитата(sergeeff @ Nov 25 2008, 18:18) Так... Nov 25 2008, 16:19       inlog Пытаюсь прочесть хоть что-то с SD карты, чтобы пон... Nov 8 2009, 17:22        Paulina Цитата(inlog @ Nov 8 2009, 21:22) Пытаюсь... Nov 9 2009, 17:17         inlog Спасибо, все заработало - проблема банальна, некон... Nov 11 2009, 18:39 Зверюга но ведь пишут же
ЦитатаSD режим - это 4 бита? Толь... Nov 21 2008, 17:58 Paulina ну тогда арм - и вперед Nov 21 2008, 18:12 Зверюга Хм... а если содержимое файла перед работой перепи... Nov 24 2008, 11:34 Paulina Цитата(Зверюга @ Nov 24 2008, 14:34) Хм..... Nov 24 2008, 15:10 Зверюга Paulina, в принципе вы предложили хороший вариант,... Nov 24 2008, 15:21 Paulina только этот момент подачи #CS надо хорошенько прод... Nov 24 2008, 15:35 Зверюга Ну выложите, лишним не будет.
КТо бы выложил код д... Nov 24 2008, 16:01 sergeeff Коллеги!
Ну уже не знаю сколько раз на нашем... Nov 24 2008, 19:55 Mik174 Посмотрите в сторону контроллера LPC2378.
У него ... Nov 11 2009, 22:38 inlog Цитата(Mik174 @ Nov 12 2009, 02:38) Посмо... Nov 15 2009, 20:28  Ronin Цитата(inlog @ Nov 15 2009, 23:28) Спасиб... Nov 17 2009, 10:21   inlog чтобы не создавать новой темки, спрошу тут - желез... Nov 24 2009, 17:54    inlog Цитата(inlog @ Nov 24 2009, 20:54) оверла... Nov 24 2009, 19:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|