Про СДкарточки (про сорцы работы с ними)

Postby lvd » 10 Jun 2008, 00:02

Короче, поипавшись, как водится, с СДкарточкой, нащупал алго инициализации.

Послать команду, далее ждать, пока неФФ ответит. И СЧИТАТЬ ПОЛНОСТЬЮ ВСЕ 6 байт ответа (включая и этот неФФ).

Пока это не сделал - ничего не работало или глючило, или ругалось инвалидной командой, или просто из слипа не выходило по CMD1.
Все вокруг (смотрел пару сорцов) все 6 байт не читают... А у Савелия вообще ахтунг - если ACMD41 не ответил нулём с первого же байта, то вся команда заново перепосылается...

Вон пусть независимое лицо (например, Романыч) подтвердит или опровергнет.
Last edited by lvd on 10 Jun 2008, 00:02, edited 1 time in total.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby Romanich » 10 Jun 2008, 01:54

моё рабочее (проверял на ММС):

Code: Select all
#define MMC_Slow SPI_CSR1=0x00004B02; //@400 kHz
#define MMC_Fast SPI_CSR1=0x00000202; //@15 MHz

#define MMC_CS(mmc_cs) \
{ \
  A_ODSR=(A_ODSR&0xFFFFFFEF)|(mmc_cs<<4); \
  PIOA_ODSR=A_ODSR; \
}

u32 A_ODSR=0x00000038;

u8 MMCBuffer[512]; //Буфер MMC-карточки

s8 DetectMMC(void) //Наличие MMC
{
  if(PIOA_PDSR&0x00000100) return -1;
  return 0;
}

u8 IO(u8 io)
{
  SPI_TDR=io|0x00010000;
  while((SPI_SR&3)!=3);
  return SPI_RDR;
}

s8 PrepareMMC(void) //Подготовка MMC к работе
{
  u8 b;
  MMC_Slow
  MMC_CS(1)
  for(b=0;b<10;b++) IO(0xFF);
  SimpleDelay(1000);
  MMC_CS(0)
  IO(0x40);
  IO(0);
  IO(0);
  IO(0);
  IO(0);
  b=IO(0x95);
  while(b==0xFF) b=IO(0xFF);
  if(b!=0x01)
  {
   MMC_CS(1)
   return -1;
  }
  CMD1:
  IO(0x41);
  IO(0);
  IO(0);
  IO(0);
  IO(0);
  b=IO(0xFF);
  while(b==0xFF) b=IO(0xFF);
  if(b!=0x00) goto CMD1;
  MMC_CS(1)
  MMC_Fast
  return 0;
}

s8 InMMC(u32 Sector) //Чтение сектора MMC
{
  u8 b;
  u16 i;
  Sector<<=9;
  MMC_CS(0)
  IO(0x51);
  IO(Sector>>24);
  IO(Sector>>16);
  IO(Sector>> 8);
  IO(Sector    );
  b=IO(0xFF);
  while(b==0xFF) b=IO(0xFF);
  if(b)
  {
   MMC_CS(1)
   return -1;
  }
  while(b!=0xFE) b=IO(0xFF);
  for(i=0;i<512;i++) MMCBuffer[i]=IO(0xFF);
  IO(0xFF);
  IO(0xFF);
  MMC_CS(1)
  return 0;
}
[url]Прославился тем, что на аватаре[/url]
Romanich
долбоёб-гумасек
 
Posts: 1084
Joined: 22 Nov 2007, 15:12
Group: Registered users

Postby lvd » 10 Jun 2008, 08:27

Вот именно - первый неФФ в ответе и всё. А так у меня не работает, надо весь ответ 6байтовый читать. Какая частота клока?
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby Romanich » 10 Jun 2008, 09:04

SPI Clock 15 MHz (написано в комменте сорца)
[url]Прославился тем, что на аватаре[/url]
Romanich
долбоёб-гумасек
 
Posts: 1084
Joined: 22 Nov 2007, 15:12
Group: Registered users

Postby lvd » 10 Jun 2008, 09:21

Romanich wrote:SPI Clock 15 MHz (написано в комменте сорца)

Ога, а когда иниты шлёшь, что-то на 400кгц переключаешь... Видимо, на 15мгц не работало happy
Попробуй, если не влом, читать по 6 байт начиная с неФФ в инитах, мож на 15 проканает? smile
Хотя 6 байт - это в СД, в ммц не знаю как.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby Romanich » 10 Jun 2008, 09:53

> Ога, а когда иниты шлёшь, что-то на 400кгц переключаешь

вся инициализация на частоте 400 кГц

далее после инициализации работаем (читаем/пишем) на 15 МГц
(хотя до 24 МГц можно, просто делитель от MCK=60 МГц не позволяет)
[url]Прославился тем, что на аватаре[/url]
Romanich
долбоёб-гумасек
 
Posts: 1084
Joined: 22 Nov 2007, 15:12
Group: Registered users

Postby lvd » 10 Jun 2008, 11:49

Вот я и удивляюсь, почему это на 400 кгц ) Чай не i2c smile
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby savelij » 10 Jun 2008, 18:33

lvd wrote:А у Савелия вообще ахтунг - если ACMD41 не ответил нулём с первого же байта, то вся команда заново перепосылается...

А на эту команду и будет сразу ответа, надо подавать команду пока не появится 0 вместо 1. Про это в спецификации нацарапано.
savelij
 
Posts: 306
Joined: 10 Jun 2008, 16:35
Group: Registered users

Postby lvd » 10 Jun 2008, 18:53

savelij wrote:А на эту команду и будет сразу ответа, надо подавать команду пока не появится 0 вместо 1. Про это в спецификации нацарапано.


Речь об чём:
1. на команды отвечает не сразу, перед ответом идут $FF. Потом уже ответ - с 0 или с 1. Вот, если ФФ, то не надо переподавать команду.
2. ответ на команду кмд1 (ну и акмд41, если не глючу) - 6 байт. Надо их все считать.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby savelij » 10 Jun 2008, 19:03

lvd wrote:Речь об чём: 1. на команды отвечает не сразу, перед ответом идут $FF. Потом уже ответ - с 0 или с 1. Вот, если ФФ, то не надо переподавать команду. 2. ответ на команду кмд1 (ну и акмд41, если не глючу) - 6 байт. Надо их все считать.

1. Вообще-то FF насколько я понимаю это исполнение команды и зачем их учитывать?
2. Откуда в ответ 6 байт, если код ответа из группы R1 и равен 1 байту. Спецификация нужна, там все расписано/разрисовано.
Last edited by savelij on 10 Jun 2008, 19:03, edited 1 time in total.
savelij
 
Posts: 306
Joined: 10 Jun 2008, 16:35
Group: Registered users

Next

Return to Hardware

Who is online

Users browsing this forum: No registered users and 25 guests

cron