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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Помогите подобрать файловую систему для 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
XVR
сообщение Nov 20 2008, 12:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

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

Для последовательного чтения файлов в такой FS память в МК практически не нужна вообще.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Nov 20 2008, 12:24
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Зверюга @ Nov 20 2008, 14:17) *
какую малотребовательную к ресурсам и легкую в освоении систему порекомендуете? efsl, я так понял, это акула, попроще ничего нет?

fatfs
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 20 2008, 15:36
Сообщение #4


Местный
***

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



Свою?
Я наверное не сделал акцент, но с этой флешкой нужнго будет полноценно работать под Windows, то есть на компьютере будет только писаться, а на флешке только читаться.
Так что свою ситстему не потяну.

А вот что касается FATFS - она поддерживает SD-режим? А то SPI - 200 кб/сек - маловато будет.
Go to the top of the page
 
+Quote Post
Nixon
сообщение Nov 20 2008, 15:42
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Она вообще не поддерживает никакого режима. Вам нужно самому переопределить функцию чтения/записи сектора.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 20 2008, 15:45
Сообщение #6


Гуру
******

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



Цитата(Зверюга @ Nov 20 2008, 15:17) *
Вопросы.

efsl у меня на ARM7 дала 250 кб/c.
Может, файловая система и не нужна? Разве что очень упрощенная.
SD режим - это 4 бита? Только потеряете в быстродействии на AVR по сравнению с SPI.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 20 2008, 16:27
Сообщение #7


Местный
***

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



В общем, максимум что мне нужно это транслировать по SPI от контроллера объем данных в 64 кбайт 30 раз в секунду. Источник этих данных - SD карта. Данные эти просто передавать, никак не обрабатывая.
Как лучше сделать - закгрузить во внешнюю оперативную память эти 64 кб и крутить? или как-то по другому?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 20 2008, 17:07
Сообщение #8


Гуру
******

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



Цитата(Зверюга @ Nov 20 2008, 20:27) *
или как-то по другому?

Угу.
1) Выбрать более подходящий контроллер.
2) записывать данные во FLASH или EEPROM от компьютера по какому-нибудь интерфейсу.

Да и задача непонятно - что потом с этими данными делается?


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


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Зверюга @ Nov 20 2008, 18:36) *
Свою?
Я наверное не сделал акцент, но с этой флешкой нужнго будет полноценно работать под Windows,
А свой софт на Windows предусматривается? Или флэшка с вашей FS должна выглядеть как сменный накопитель на голой винде? Если первое, то своя FS не проблема, так как ее можно поддержать специальной программой на Windows, а если второе, то ищите контролер потолще, стандартные FS, которые понимает Винда, требуют ощутимого количества RAM'а для работы.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 20 2008, 17:55
Сообщение #10


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Зверюга @ Nov 20 2008, 18:36) *
Я наверное не сделал акцент, но с этой флешкой нужнго будет полноценно работать под Windows...
Есть известный способ обмануть FAT...
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 20 2008, 18:45
Сообщение #11


Местный
***

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



Цитата
А свой софт на Windows предусматривается?



Ну если от своего не денешься, то конечно легче сделать свой софт на виндовс. Хотя идея скачать файлик, закинуть его на флешку, короче, чтобы мог сделать любой дурак - так заманчива...

Цитата
то ищите контролер потолще,


АT91SAM7 подойдет для этих задач?
И скажите, по своему опыту прыжок с Mega на ARM7 сильно тернистый?
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 20 2008, 20:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Зверюга @ Nov 20 2008, 21:45) *
Ну если от своего не денешься, то конечно легче сделать свой софт на виндовс. Хотя идея скачать файлик, закинуть его на флешку, короче, чтобы мог сделать любой дурак - так заманчива...
Тогда только FAT. И как минимум 512 байт для обработки (а может и больше, зависит от библиотеки)
Цитата
АT91SAM7 подойдет для этих задач?
Да, скорее всего

Цитата
И скажите, по своему опыту прыжок с Mega на ARM7 сильно тернистый?
Сказать не могу - не прыгал sad.gif Но в принципе особых трудностей быть не должно (и по большей части это будет зависеть от 'прыгуна' smile.gif )
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 21 2008, 04:00
Сообщение #13


Местный
***

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



КТо-нибудь именл дело с этим http://www.megachip.ru/item.php?item_id=667627

Там даже разъем под SD есть и пример проекта.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 21 2008, 11:38
Сообщение #14


Гуру
******

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



Цитата(Зверюга @ Nov 21 2008, 08:00) *
Там даже разъем под SD есть и пример проекта.

Прыгал LPC-2478STK и на STM32 STK от Olimex.
По вопросу NXP/Atmel почитайте раздел ARM.
Прыжок не гарантирует требуемой скорости считывания карты, это комплексная задача.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 21 2008, 15:32
Сообщение #15


Местный
***

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



Ну, продолжите.
Я так понимаю, скорость чтения зависит от частоты SPI и от скорости обработки данных контроллером.
Поменяв контроллер мы частично решим обе задачи. Дальше оптимизация программы, читающей файловую систему. Что еще входит в упомянутый Вами комплекс? Какой скорости считывания можно добиться на ARM7?
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 21 2008, 16:41
Сообщение #16


Участник
*

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



Цитата(Зверюга @ Nov 21 2008, 18:32) *
Ну, продолжите.
Я так понимаю, скорость чтения зависит от частоты SPI и от скорости обработки данных контроллером.
Поменяв контроллер мы частично решим обе задачи. Дальше оптимизация программы, читающей файловую систему. Что еще входит в упомянутый Вами комплекс? Какой скорости считывания можно добиться на ARM7?


возьмите скорость SPI в 1/4 скорости контроллера, получите битрейт 5 мбит/с. При чтении данных блоками (скажем, секторами по 512 байт, если будете использовать FAT16) потери на служебную информацию невелики, и скорости 600кбайт/с теоретически можно достигнуть (если нет, можно попробовать разогнать SPI до 10 МГц). А поддержка FAT реализуется достаточно просто (делала на меге8), особенно если не нужно учитывать фрагментацию и длинные имена файлов.

Сообщение отредактировал Paulina - Nov 21 2008, 16:58
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 21 2008, 17:23
Сообщение #17


Местный
***

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



Ну у на ARM7 - где 60 МГц?. Можно ведь разогнеать SPI до 30 МГц?
Ведь на PC - как-то читается до 8 МБ в секунду?
ИЛи выход - SD режим?
В библиотеке EFSL есть папки atmega_spi и atmega_sd - так вот последняя почему-то пуста...
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 21 2008, 17:25
Сообщение #18


Участник
*

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



Цитата(Зверюга @ Nov 21 2008, 20:23) *
Ну у на ARM7 - где 60 МГц?. Можно ведь разогнеать SPI до 30 МГц?
Ведь на PC - как-то читается до 8 МБ в секунду?
ИЛи выход - SD режим?
В библиотеке EFSL есть папки atmega_spi и atmega_sd - так вот последняя почему-то пуста...


Зачем забивать гвозди микроскопом? Вам ведь просто нужно читать файлы? AVR хватит с головой для этого.

Сообщение отредактировал Paulina - Nov 21 2008, 17:32
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 21 2008, 17:50
Сообщение #19


Местный
***

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



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

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


Участник
*

Группа: Участник
Сообщений: 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
Зверюга
сообщение Nov 21 2008, 17:58
Сообщение #21


Местный
***

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



но ведь пишут же
Цитата
SD режим - это 4 бита? Только потеряете в быстродействии на AVR по сравнению с SPI.
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 21 2008, 18:12
Сообщение #22


Участник
*

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



ну тогда арм - и вперед smile.gif
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 24 2008, 11:34
Сообщение #23


Местный
***

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



Хм... а если содержимое файла перед работой переписывать на ту же флешку куда-нибудь в конец и потом читать просто как поток информации - будет быстрее?
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 24 2008, 15:10
Сообщение #24


Участник
*

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



Цитата(Зверюга @ Nov 24 2008, 14:34) *
Хм... а если содержимое файла перед работой переписывать на ту же флешку куда-нибудь в конец и потом читать просто как поток информации - будет быстрее?


я правильно поняла, что вам еще надо по этому же каналу spi отправлять данные дальше? как вариант можно дождаться начала блока данных и выставить сигнал #CS для принимающего устройства, чтобы оно уже принимало только эти данные (после окончания блока, естественно, снять #CS). но при данной скорости контроллера получите в лучшем случае чуть меньше 10 МБит/с.

Сообщение отредактировал Paulina - Nov 24 2008, 15:14
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 24 2008, 15:21
Сообщение #25


Местный
***

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



Paulina, в принципе вы предложили хороший вариант, я подумаю.
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 24 2008, 15:35
Сообщение #26


Участник
*

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



только этот момент подачи #CS надо хорошенько продумать. скорость spi будет равна половине скорости контроллера, а обновление портов происходит через 1 такт после записи в порт, можно и не успеть до прихода следующего фронта CLK. поиграйтесь с настройками CPOL, CPHA, авось получится. код для работы с FAT16 могу выложить, если надо.

Сообщение отредактировал Paulina - Nov 24 2008, 15:37
Go to the top of the page
 
+Quote Post
Зверюга
сообщение Nov 24 2008, 16:01
Сообщение #27


Местный
***

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



Ну выложите, лишним не будет.
КТо бы выложил код для работы в SD режиме. Что-то не гуглится мне.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 24 2008, 16:39
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 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
sergeeff
сообщение Nov 24 2008, 19:55
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Коллеги!

Ну уже не знаю сколько раз на нашем форуме сравнивались efsl и fatfs. Последняя работает быстрее efsl за счет мультисекторных операций. На ее сайте http://elm-chan.org/fsw/ff/00index_e.html есть benchmark'и. Ну посмотрите хоть, перед тем как свой огород городить.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 25 2008, 07:49
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 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
Paulina
сообщение Nov 25 2008, 13:55
Сообщение #32


Участник
*

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



Цитата(Dog Pawlowa @ Nov 25 2008, 10:49) *
Конечно, Paulina, только можно ли это назвать полноценной файловой системой? smile.gif


разумеется, нет, но в первом сообщении указывалось, что:
Цитата
Задачи самые скромные - только читать какой-нибудь файл. Не будет никаких каталогов - просто в корневом будет около 100 файлов
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 25 2008, 15:18
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Dog Pawlowa @ Nov 25 2008, 11:49) *
Конечно, Paulina, только можно ли это назвать полноценной файловой системой? smile.gif
Коллега,
на AVR скорость fatfs около 300 кб/c, поэтому вопрос быстрее она efsl или нет, второстепенный, поскольку автору нужно больше, насколько я помню начало топика.


Так надо сначала написать процедуру чтения сектора и замерить скорость чтения/записи n-секторов подряд и в произвольном порядке. После этого будет понятно, что является узким местом, вся организация доступа через FAT или чтение сектора. Я подобное проделывал с efsl, там накладные расходы от fat не превышали 10%.
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 25 2008, 16:19
Сообщение #34


Участник
*

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



Цитата(sergeeff @ Nov 25 2008, 18:18) *
Так надо сначала написать процедуру чтения сектора и замерить скорость чтения/записи n-секторов подряд и в произвольном порядке. После этого будет понятно, что является узким местом, вся организация доступа через FAT или чтение сектора. Я подобное проделывал с efsl, там накладные расходы от fat не превышали 10%.


эффективность тем больше чем больше блок данных. если данные будут только транслироваться, то зачем ограничивать блок размером сектора, который всего 512 байт?
Go to the top of the page
 
+Quote Post
inlog
сообщение Nov 8 2009, 17:22
Сообщение #35





Группа: Участник
Сообщений: 5
Регистрация: 23-10-09
Пользователь №: 53 173



Пытаюсь прочесть хоть что-то с SD карты, чтобы понять, что все как-то работает и можно идти дальше, но карта отвечает только 0xFF (т.е. ничего), а программа ниже печатает только точки... В чем может быть дело, нет мыслей? Работаю с 8051 архитектурой и пока с программным SPI, фрагмент кода привожу ниже... Может, что-то не так с начальными установками уровней? unsure.gif

Код
    deselect();       // Снять CS --> 1
       for (i=0; i<10; ++i)       wr_spi_msb(0x00);        // Выдать  >72 CLK
    for (i=0; i<10; ++i)                   // some delay, нужно ли?
    DATA = 0;                               // Начальный уровень на входе CMD карты

  //========Сброс карты===============
    select();                    // Выдать CS_SD_Card --> 0
do
   {
    wr_spi_msb(0х40);                // SD card CMD_0="CMD_GO_IDLE_STATE" -  write byte MSB first via DATA pin
    wr_spi_msb(0);            // Argument = 0
    wr_spi_msb(0);            // Argument = 0
    wr_spi_msb(0);            // Argument = 0
    wr_spi_msb(0);            // Argument = 0
    wr_spi_msb(0x95);            // Send CRC

       for (i=0; i<8; ++i)           // read card response R1
        {
         card_status = rd_spi_READY_msb();        // прочесть байт из SD карты на ножке READY MSB first
         if (card_status != 0xFF) break;
         put_ch('.');
         }
    } while (card_status != 0x01);    


    deselect();                        // Снять CS --> 1
    put_ch('x');
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 9 2009, 17:17
Сообщение #36


Участник
*

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



Цитата(inlog @ Nov 8 2009, 21:22) *
Пытаюсь прочесть хоть что-то с SD карты, чтобы понять, что все как-то работает и можно идти дальше, но карта отвечает только 0xFF (т.е. ничего), а программа ниже печатает только точки... В чем может быть дело, нет мыслей? Работаю с 8051 архитектурой и пока с программным SPI, фрагмент кода привожу ниже... Может, что-то не так с начальными установками уровней? unsure.gif


А spi правильно настроен? полярность, фазировка клока sck? В начале перед отправкой cmd0 попробуйте пустой байт (0xff) отправить.
Еще уберите put_ch('.') из внутреннего цикла (а лучше совсем).
Опять же функции работы с spi неизвестно какие.

Сообщение отредактировал Paulina - Nov 9 2009, 17:19
Go to the top of the page
 
+Quote Post
inlog
сообщение Nov 11 2009, 18:39
Сообщение #37





Группа: Участник
Сообщений: 5
Регистрация: 23-10-09
Пользователь №: 53 173



Спасибо, все заработало - проблема банальна, неконтакт в разъеме (не родном) для SD )))
Еще понизил скорость SPI, а то резистивный делитель 5В-->3.3V даже с коротким кабелем ужасно валит фронты, а микросхемы преобразователя уровней пока не нашел подходящего и доступного (

Вопрос пока чисто теоретический на будущее (не нашел ответ в доках), если кто пробовал - а можно ли объединить SD pins IN и OUT проводным ИЛИ, чтобы работать с карточкой по одной двунаправленной шине данных при программном SPI ?
Go to the top of the page
 
+Quote Post
Mik174
сообщение Nov 11 2009, 22:38
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 6-01-07
Пользователь №: 24 139



Посмотрите в сторону контроллера LPC2378.

У него есть аппаратный порт для подключения MMC/SD карт, причем, как я понял, SD - с 4 линиями данных:

"SD/MMC card interface pin description
Pin Name Type Description
MCICLK Output Clock output
MCICMD Input Command input/output.
MCIDAT[3:0] Output Data lines. Only MCIDAT[0] is used for Multimedia cards.
MCIPWR Output Power Supply Enable for external SD/MMC power supply.

...

CLK: One bit is transferred on both command and data lines with each clock cycle.
The clock frequency varies between 0 MHz and 20 MHz (for a multimedia card) or
0 MHz and 25 MHz (for a secure digital memory card)."
Go to the top of the page
 
+Quote Post
inlog
сообщение Nov 15 2009, 20:28
Сообщение #39





Группа: Участник
Сообщений: 5
Регистрация: 23-10-09
Пользователь №: 53 173



Цитата(Mik174 @ Nov 12 2009, 02:38) *
Посмотрите в сторону контроллера LPC2378.

Спасибо! У меня задача обновить старую 5V разработку, где в кач-ве внешней памяти были PCMCIA-карты, а прикручиваю SD. Все пока работает в прототипе на hrdw уровне, проблема только найти (розница для прототипа) преобразователи уровней. Пока поставил для 5В->3В NC7SZ125 (запитка от 3.3В), а данные 3В от SD подаю в 5В контроллер напрямую (
Go to the top of the page
 
+Quote Post
Ronin
сообщение Nov 17 2009, 10:21
Сообщение #40


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 10-02-05
Из: Краснодар
Пользователь №: 2 558



Цитата(inlog @ Nov 15 2009, 23:28) *
Спасибо! У меня задача обновить старую 5V разработку, где в кач-ве внешней памяти были PCMCIA-карты, а прикручиваю SD. Все пока работает в прототипе на hrdw уровне, проблема только найти (розница для прототипа) преобразователи уровней. Пока поставил для 5В->3В NC7SZ125 (запитка от 3.3В), а данные 3В от SD подаю в 5В контроллер напрямую (


Из 3 в 5 можно 74act/ahct(hct) серию попробовать, из 5 в 3 - 74lcx наример.

А не проще CF в режиме PCMCIA попробовать было (вроде должно поддерживать) ?

Сообщение отредактировал Ronin - Nov 17 2009, 10:31
Go to the top of the page
 
+Quote Post
inlog
сообщение Nov 24 2009, 17:54
Сообщение #41





Группа: Участник
Сообщений: 5
Регистрация: 23-10-09
Пользователь №: 53 173



чтобы не создавать новой темки, спрошу тут - железки работают, взял Chan's FATFS lib, после шаманства с некоторыми переменными и текстом скомпилился без ошибок в Keil, но :
у меня Р89V51RD2 и всего 1КВ RAM, а скомпиленная по умолчанию библиотека занимает более 1К. В основном за счет того, что буфер 512КВ объявлен 2 раза - мною в main и внутри одной из процедур библиотеки как рабочий... Хватит ли в логике работы с FAT всего одного буфера при работе с одним драйвом и не объявить ли его Global, например, и убрать из нутра функции? А то оверлаппинг не помогает. crying.gif
Go to the top of the page
 
+Quote Post
inlog
сообщение Nov 24 2009, 19:11
Сообщение #42





Группа: Участник
Сообщений: 5
Регистрация: 23-10-09
Пользователь №: 53 173



Цитата(inlog @ Nov 24 2009, 20:54) *
оверлаппинг не помогает. crying.gif

Sorry, похоже сам виноват, буфер всего один ( Только все равно в 1КВ уложить не могу пока с ф-циями записи (((((
Кроме как чистить ненужные функции (типа перименования файлов и еще кое что...) мыслей нет
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:19
Рейтинг@Mail.ru


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