nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 19 Jan 2021 15:13



Reply to topic  [ 59 posts ]  Go to page Previous  1, 2, 3, 4
Работа с MMC (или SD?) 
Author Message
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
Недавно разобрался с флешкой miniSD kingston 1GB.
Может кому поможет.
Если всё в порядке функция возвращает значение 0x00
Карты нет - значение 0xFF
Карта не инициализировалась (например если это SDHC) - значение 0xFD
код для АТмеги128
Code:
unsigned char SD_init (void)
   {
   ClearError;
   unsigned int i=0;
   unsigned char b=0;
   SPI_low();   //Низкая скорость на шине (250кГц)
   init:
   SD_UNCS;
   while (i<74)   //Что-то вроде синхронизации - нужно при высоком уровне на CS
      {
      write_SPI(0xFF);   //Послать 74 раз 0xFF
      i++;
      };
   SD_CS;
   i=0;
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0xFF);
   write_SPI(0x40);   //далее шлём команду сброса - CMD0
   write_SPI(0x00);
   write_SPI(0x00);
   write_SPI(0x00);
   write_SPI(0x00);
   b=write_SPI(0x95);
   while (b==0xFF)   //Пока карта не ответит
      {
      b=write_SPI(0xFF);
      if (i==1000) {SD_UNCS; return 0xFF;};   //Или не кончатся попытки - это значит что карты нету
      i++;
      };
   SD_err=b;
   if (b!=0x01) {goto init;};   //Карта не ответила верно
   SD_UNCS;
   _delay_ms(1);
   SD_CS;
   _delay_ms(500);
   _delay_ms(500);
   _delay_ms(500);
   write_SPI(0xFF);
   b=0xFF;
   while (b!=0x00)   //Пока карта не ответит
      {
      write_SPI(0xFF);   //без этого не пашет...
      write_SPI(0x41);   //Команда инициализации стандартная, для ММС
      write_SPI(0x00);
      write_SPI(0x00);
      write_SPI(0x00);
      write_SPI(0x00);
      b=write_SPI(0x01);
      while (b==0xFF) b=write_SPI(0xFF);//Вот тут может возникнуть вечный цикл, что нехорошо
      };
   SD_err=b;
   if (b!=0x00) {write_SPI(0xFF); SD_UNCS; return 0xFD;};   //SD Карта не инициализировалась
   //Далее настраиваем скорость на шине
   SPI_high();   //4МГц
   SD_UNCS;   //Готово!!
   ClearError;
   return 0x00;
   }

CS карточки подключен к PINE4
Code:
#define SD_CS PORTE|=0x20; _delay_us(1); PORTE&=(~0x10) //выбор SD карточки
#define SD_UNCS PORTE|=0x10 //для инициализации нужно чтоб была лог.1

Ксожалению ММС или ещё какой другой флешки у меня нет, так бы проверил работоспособность с ними.
---исправил небольшой баг

_________________
Всё что ты видишь - лживый облик.


Last edited by FreemaN on 23 Jan 2009 21:07, edited 1 time in total.



21 Jan 2009 18:00
Profile
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
З.Ы. Силно не бить, я знаю что часть кода немножко спёр :oops:
а именно это:
while (b==0xFF) b=write_SPI(0xFF);
Просто выражение понравилось :wink:

HardwareMan wrote:
jdigreze wrote:
Если инициализация обмена сделана "по протоколу", никаких глюков быть не должно.

Полностью согласен. Покурите это - сильно помогает!
http://elm-chan.org/docs/mmc/mmc_e.html

Это очень полезная ссылка. Там рассказано даже про команды SDHC карт(те что ёмкостью от 4 до 32гигов...).

_________________
Всё что ты видишь - лживый облик.


21 Jan 2009 18:18
Profile
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
И может кто знает, где можно добыть коды производителей карт (Manufacturer ID (MID)) 127...120 Биты регистра CID.
Это написано в доке от SanDisk:
Quote:
The manufacturer IDs are controlled and assigned by the SD Card Association.

Но их сайт ужасен и я так ничё полезного там не нашёл :cry:
Хуже только сайт MMCA :) Потому что там вообще ничё нет

_________________
Всё что ты видишь - лживый облик.


21 Jan 2009 18:32
Profile
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
Собственно, после разбирательства с картой пошли разбирательства с файловой системой...
Прочёл нулевой сектор, посчитал размер, вычислил расположение таблиц FAT и корневого каталога. :roll: И вдруг возник вопрос: А всё ли так как надо? вот прилагаю небольшой дампик http://ifolder.ru/10303260
Первые 513байт (значений 0х55 0хАА) - нулевой сектор диска
вторые 513байт (тоже до значений 0х55 0хАА) - Загрузочный сектор
третьи 512байт - самое начало корневого каталога.
Меня немного смутило расположение длинных имён файлов - начинаются с середины. а так вроде похоже на правду...
Подскажите пожалста, так ли оно?

_________________
Всё что ты видишь - лживый облик.


30 Jan 2009 16:49
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2145
Location: От туда
Reply with quote
Post 
У тебя косяк. Сектор ровно 512 байт. Если выкинуть 1 байт в самом начале и один байт посередние среди 00 во втором секторе, то все просто идеально. Разъясняю:
1. Флешки форматируются как жесткие диски, поэтому 0 сектор это MBR. Только вот программы загрузчика там нет, одна таблица разделов (что и видно). Сигнатура 55АА должна быть в последних 2х байтах сектора (510 и 511, если считать от 0).
2. Второй сектор - стандартный boot сектор. Опять же, без самого загрузчика - только параметры FS.
3. Если сделать коррекцию, то директория выглядит нормально.
4. Что касается LFN, курите доки. Я вижу здесь, что они нормальные.

Короче, я читаю уже SD/MMC (только правда средствами М68К на Сеге) и у меня все пучком. Загрузчики при желании можно положить, для этого просто форматируем карты под DOSом в USB картридере с включенной эмуляцией в BIOSе системы. (или тупо винхексом туда положить). Еще бывает форматирование карты без MBR. Это скорее исключение, т.к. сама винда все флешки форматирует с MBR записью. Но иногда я напарывался (видимокакие-то автономные девайсы делали так). В этом случае флешка как дискета, начинается с MBR. Добавить поддержку несложно, но можно тупо залупиться и выдать "Форматируйте нах". %)


30 Jan 2009 23:24
Profile
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
насчёт косяка, эт я знаю но ничё поделать не могу :cry:
именно с этой флешкой некоторые сектора получаются по 513байт... попробовал другую, на два гига - прекрасно работает и 512байт возвращает.
А насчёт загрузчика - интересно... можно заставить мегу грузиться с флешки. занятно получится :)

случай с отсутствием MBR я тоже предусмотрел:
Code:
   ReadBuffp=SD_read(0x00000000);
   i=0;
   while (i<10)
      {
      if(ReadBuffp[i]!=0x00) {goto PBRread;}
      i++;
      };

если первые десять байт попадётся не ноль то это PBR.
пасиба за ответ, значит буду копать дальше, думать как сделать что-то вроде файл-менеджера...

_________________
Всё что ты видишь - лживый облик.


31 Jan 2009 02:08
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19312
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
Короче, я читаю уже SD/MMC (только правда средствами М68К на Сеге) и у меня все пучком.


чем кодишь на м68к? я уже который год мечтаю компик замутить на нём ;)

_________________
:eugeek: https://twitter.com/Shaos1973


31 Jan 2009 08:35
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2145
Location: От туда
Reply with quote
Post 
Shaos wrote:
HardWareMan wrote:
Короче, я читаю уже SD/MMC (только правда средствами М68К на Сеге) и у меня все пучком.


чем кодишь на м68к? я уже который год мечтаю компик замутить на нём ;)

Искал долго нормальный ASM для М68К. Остановился на IDE:
Image
У одник глюки, чторые требуют какой-то свой синтаксис - не осилил. До этого IDE Юзал какой-то заточенный под Сегу ASM, но он глючный страшно. А в этом IDE есть симулятор (он мне не нужен в принципе). И единственный его глюк - это неправильная компиляция команды MOVEM (делаю через DB ручками). Ну и отсуствие инклуды для бинарника. Т.е. бинарник приходиться переводить в текстик с DBшками и инклюдить. Эээх...


31 Jan 2009 09:29
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19312
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
Shaos wrote:
HardWareMan wrote:
Короче, я читаю уже SD/MMC (только правда средствами М68К на Сеге) и у меня все пучком.


чем кодишь на м68к? я уже который год мечтаю компик замутить на нём ;)

Искал долго нормальный ASM для М68К. Остановился на IDE:
Image
У одник глюки, чторые требуют какой-то свой синтаксис - не осилил. До этого IDE Юзал какой-то заточенный под Сегу ASM, но он глючный страшно. А в этом IDE есть симулятор (он мне не нужен в принципе). И единственный его глюк - это неправильная компиляция команды MOVEM (делаю через DB ручками). Ну и отсуствие инклуды для бинарника. Т.е. бинарник приходиться переводить в текстик с DBшками и инклюдить. Эээх...


А исходные коды своих наработок не публикуешь, мистер Gates? ;)
Может кому пригодятся :roll:

_________________
:eugeek: https://twitter.com/Shaos1973


31 Jan 2009 10:26
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2145
Location: От туда
Reply with quote
Post 
Shaos wrote:
А исходные коды своих наработок не публикуешь, мистер Gates? ;)
Может кому пригодятся :roll:

Хыхы. Они еще далеки до завершения. К тому же подтормаживают нехило... Закончу все - выложу вместе с проектом.


31 Jan 2009 23:42
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19312
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
Shaos wrote:
А исходные коды своих наработок не публикуешь, мистер Gates? ;)
Может кому пригодятся :roll:

Хыхы. Они еще далеки до завершения. К тому же подтормаживают нехило... Закончу все - выложу вместе с проектом.


Договорились. Ещё я знаю, что на ассемблере m68k можно кодить по разному - типа какие регистры для чего обычно использовать и т д. Интересно было бы услышать от тех кто до сих пор кодит о подобных предпочтениях. Можно топик отдельный создать на эту тему...

_________________
:eugeek: https://twitter.com/Shaos1973


01 Feb 2009 00:08
Profile WWW
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
Пока что получилось сделать так:
Image
думаю скоро сделаю меню навигации... :kruto:
"ЛЕНИНГРАД" - метка диска :rotate:
а вот это так сказать макетка:
Image

_________________
Всё что ты видишь - лживый облик.


07 Feb 2009 19:32
Profile
Senior
User avatar

Joined: 09 Jan 2009 21:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
Удалось прочитать файл и отправить его в VS1002D :o :D
Причём судя по всему ещё и ресурсы остаются... для решения простеньких задач
Потребляет 40-60мА (mp3, 320kbps, 44100, громкость средняя) - многовато, но пока оптимизацией по питанию не занимался

_________________
Всё что ты видишь - лживый облик.


08 Feb 2009 16:39
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19312
Location: Silicon Valley
Reply with quote
Post Re:
HardWareMan wrote:
jdigreze wrote:
Если инициализация обмена сделана "по протоколу", никаких глюков быть не должно.

Полностью согласен. Покурите это - сильно помогает!
http://elm-chan.org/docs/mmc/mmc_e.html

А между тем этот ресурс всё ещё доступен и похоже регулярно обновляется :)

_________________
:eugeek: https://twitter.com/Shaos1973


08 Jan 2021 05:14
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 59 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.