Карта SDHC microSD и инициализация SPI

У меня есть карта microSD Kingston SDHC объемом 32 ГБ, которая должна подключаться к MSP430F2618 через SPI. Мне не удалось инициализировать его с помощью CMD55 + ACMD41 (с битом 30, установленным на 1), как описано в документе со спецификациями SD. Как работает эта последовательность:

  CMD0, arg: 0         , CRC: 0x95 (response:0x01)
  CMD8, arg: 0x1AA     , CRC: 0x87 (response:0x01)
  CMD1, arg: 0x40000000, CRC: 0xFF (response:0x00)

Я пробовал это также с картой SanDisk на 8 ГБ, и для нее тоже работает. На самом деле я использую CMD1 здесь, а не ACMD41, с битом HCS, установленным на 1. Однако это нестабильно, иногда работает, иногда нет. Это может быть аппаратное обеспечение.

Разве не странно, что карты на CMD1 отвечают аргументом 0x40000000?


spi
person user1039871    schedule 10.11.2011    source источник


Ответы (1)


Не следует использовать CMD1 для инициализации карт SDHC; как сказано в спецификации SD-карты:

В любом из случаев CMD1 не рекомендуется, потому что хосту может быть сложно отличить MultiMediaCard от карты памяти SD.

Некоторые контроллеры (в основном карты новой и большей емкости) просто останутся в режиме IDLE, если вы выдадите им CMD1. Вы должны сначала выполнить CMD8 0x1AA после сброса (CMD0), а затем использовать CMD55 + ACMD41.

tl; dr для инициализации карты необходимо:

  1. CMD0 аргумент: 0x0, CRC: 0x95 (ответ: 0x01)

  2. CMD8 аргумент: 0x000001AA, CRC: 0x87 (ответ: 0x01)

  3. CMD55 arg: 0x0, CRC: any (CMD55 - префикс каждые ACMD)

  4. ACMD41, arg: 0x40000000, CRC: любой

  5. если ответ: 0x0, все в порядке; если это 0x1, перейти к 3.

Обратите внимание, что для большинства карточек требуется повторение шагов 3/4, обычно один раз, то есть фактическая последовательность равна _22 _ / _ 23 _ / _ 24 _ / _ 25 _ / _ 26 _ / _ 27_ - чтобы быть уверенным, попробуйте это n раз (выберите n в пределах вашей причины), и предполагать, что потерпит неудачу, если это не так.

Также обратите внимание, что вы должны утверждать S̲S̲ (также известный как CS) low в по крайней мере до и после CMD0 - и, в действительности, вероятно, всегда при отправке любой команды на SD-карту.

person Walid BR    schedule 15.01.2014