реклама на сайте
подробности

 
 
> Помогите подобрать файловую систему для microsd
Зверюга
сообщение Nov 20 2008, 11:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Добрый день. Задача следующая.
Имеется микроконтроллер AVR. Хотелось бы сделать на mega88 (1024 SRAM), но максимум что смогу себе позволить - mega32.

Задачи самые скромные - только читать какой-нибудь файл. Не будет никаких каталогов - просто в корневом будет около 100 файлов. Форматировать и записывать информацию планируется исключительно в Windows. Скорость хотелось бы не ниже 600 кбайт сек.

Вопросы.
1. Смогу ли я достичь такой скорости в SPI режиме при частоте контроллера 20 Мгц?
2. Ну собственно, учитывая скромные (кроме скорости) потребности - какую малотребовательную к ресурсам и легкую в освоении систему порекомендуете? efsl, я так понял, это акула, попроще ничего нет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Зверюга
сообщение Nov 21 2008, 17:50
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Я просто пытаюсь понять, от чего зависит скорость чтения.

Мне нужно (я пересчитал) - 1,5 Мбайт в секунду. Да и еще по ходу их наверное обрабатывать.
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 21 2008, 17:55
Сообщение #3


Участник
*

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



Цитата(Зверюга @ Nov 21 2008, 20:50) *
Я просто пытаюсь понять, от чего зависит скорость чтения.

Мне нужно (я пересчитал) - 1,5 Мбайт в секунду. Да и еще по ходу их наверное обрабатывать.


а, ну тогда понятно. либо с ARM в SPI либо попробовать на AVR в режиме SD.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 24 2008, 16:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Paulina @ Nov 21 2008, 21:55) *
а, ну тогда понятно. либо с ARM в SPI либо попробовать на AVR в режиме SD.

Пробовать то можно, но существующие порт efsl (например) для SD интерфейса ARM7 NXP не использует DMA. В отличие от SPI, между прочим.
Что касается SPI AVR, то что толку разогнать сам SPI? нужно же еще флаг готовности анализировать, адрес инкрементировать, проверять адрес на соответствие диапазону. Без DMA+IRQ сделать это с высокой скоростью нереально.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 24 2008, 17:21
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 25 2008, 07:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Paulina @ Nov 24 2008, 21:21) *
Это так, но если данные идут непрерывно, без дефрагментации то можно просто установить размер блока данных, скажем 64 кБ и принимать их непрерывно

Конечно, Paulina, только можно ли это назвать полноценной файловой системой? smile.gif


Цитата(sergeeff @ Nov 24 2008, 23:55) *
Ну посмотрите хоть, перед тем как свой огород городить.

Коллега,
на AVR скорость fatfs около 300 кб/c, поэтому вопрос быстрее она efsl или нет, второстепенный, поскольку автору нужно больше, насколько я помню начало топика.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Зверюга   Помогите подобрать файловую систему для 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 11:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016