Инициализация SPI карты SDHC - PullRequest
3 голосов
/ 21 июня 2011

Я работаю над встроенной системой, которая в настоящее время поддерживает только карты SDSC v1.По мере того, как становится все труднее находить карты объемом менее 2 ГБ, я пытаюсь добавить поддержку карт SDHC.Связь с картой осуществляется через шину SPI.

Итак, вот что я делаю для инициализации карты:

  • Отправка CMD0.Карта возвращает 0x1
  • Отправка CMD8 + 0x1AA.Карта возвращает 0x1 и 0x1AA
  • Отправить ACMD41.Карта возвращает 0x0.

После этого я прочитал MBR и выяснил, что существует раздел FAT16 в 0x30 LBA .Однако чтение сектора с этого адреса (0x30 * 512) возвращает повторение 0x01 0x09 ...

  • При отправке ACMD41 я отправляю идентификатор команды 0x69.Это правильно?Или я должен отправить CMD55, а затем CMD1?
  • Диаграмма 1 показывает, что мне нужно отправить CMD58 и, возможно, CMD16 после отправки ACMD41.Это необходимо?Я смог прочитать действительный MBR, не делая их.

1.http://elm -chan.org / Docs / ММС / mmc_e.html

1 Ответ

2 голосов
/ 29 сентября 2011

Все команды «ACMD» требуют CMD55, за которым следует соответствующая команда.

Например, для команды ACMD41:

SD_command(55, 0, 0, 0, 0, 0xFF);
n= SD_command(41, SD2<<6 , 0, 0, 0, 0xFF);

Не забудьте ИЛИ в 0b01000000 до первого аргумента.Фактическая команда не 55, это 55|0b01000000 (0b01110111, десятичная 119).Я делаю это в самой функции SD_command.

Взаимодействие с SD-картами - ОГРОМНАЯ боль, поэтому не сдавайтесь.Удачи!

...