Скопируйте данные с SD-карты в оперативную память на ARM

Мне нужна ваша помощь! Я хочу скопировать один файл с SD-карты в память моего ARM Cortex A9 (чтобы быстрее перенести его на ПЛИС). Но я не знаю начальный адрес файла и размер. Есть ли возможность найти эту информацию? У меня есть опыт работы с FPGA, но не с mC и ARM =(

Спасибо заранее! Джрем


person Djrem    schedule 30.04.2014    source источник


Ответы (1)


Вам понадобится некоторый уровень файловой системы, который может правильно интерпретировать содержимое SD-карты. Такие карты обычно никогда не используются в качестве необработанной флэш-памяти, а вместо этого используют верхний слой файловой системы, который дает вам каталоги и файлы. Это, конечно, необходимо при перемещении карты между устройствами, чтобы сделать ее функциональной.

Когда у вас есть драйвер файловой системы, вы сможете в основном открывать файл на SD-карте для чтения, а затем сидеть в цикле чтения блоков подходящего размера. Для каждого прочитанного блока вы просто копируете его по нужному адресу в ОЗУ. Конечно, вы также можете прочитать его прямо по нужному адресу, минуя копию.

В псевдо-C это будет просто:

FILE *in;

if((in = fopen("sd0:\\file.dat", "rb")) != NULL)
{
  unsigned char *target = (unsigned char *) 0xec008000; /* totally random */
  size_t got;
  while((got = fread(target, 1024, 1, in)) > 0)
  {
    target += got;
  }
  fclose(in);
}

Конечно, вы, вероятно, не будете использовать stdio, поэтому функции fopen(), fread() и fclose() будут отличаться в зависимости от драйвера вашей файловой системы.

person unwind    schedule 30.04.2014
comment
Большое спасибо за ваш комментарий! Является ли FatFs (elm-chan.org/fsw/ff/00index_e.html ) нормально для этого? и я не понимаю, как я могу сохранить файл (например, скопированный с помощью FatFs) в память =( - person Djrem; 30.04.2014
comment
Спасибо =) вы мне очень помогли! Я понимаю это сейчас! - person Djrem; 30.04.2014
comment
@Djrem И да, FatFs очень хорош. - person unwind; 30.04.2014