SDHC-карта microSD и инициализация SPI - PullRequest
8 голосов
/ 10 ноября 2011

У меня есть 32 ГБ карта памяти Kingston SDHC microSD, которая должна связываться с 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?

1 Ответ

9 голосов
/ 15 января 2014

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

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

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

tl; dr для инициализации карты, которую вы должны:

  1. CMD0 arg: 0x0, CRC: 0x95 (ответ: 0x01)

  2. CMD8 arg: 0x000001AA, CRC: 0x87 (ответ: 0x01)

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

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

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

Обратите внимание, что большинство карт требуют шагов 3/4 для повторения, обычно один раз, то есть фактическая последовательность CMD0 / CMD8 / CMD55 / ACMD41 / CMD55 / ACMD41 - чтобы быть уверенным, попробуйте это n раз (выберите n в пределах вашей причины), и предположите неудачу, если это не так.

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

...