Вы не должны использовать CMD1
для инициализации SDHC-карт;как указано в спецификации SD-карты:
В любом случае CMD1 не рекомендуется, поскольку хосту может быть трудно различить MultiMediaCard и SD-карту памяти.
Некоторые контроллеры (в основном новые и более емкие карты) просто останутся в режиме IDLE, если вы выдадите им CMD1
.Сначала вы должны набрать CMD8 0x1AA
после сброса (CMD0
), а затем использовать CMD55 + ACMD41
.
tl; dr для инициализации карты, которую вы должны:
CMD0
arg: 0x0
, CRC: 0x95
(ответ: 0x01
)
CMD8
arg: 0x000001AA
, CRC: 0x87
(ответ: 0x01
)
CMD55
arg: 0x0
, CRC: любой (CMD55
- префикс каждые ACMD
)
ACMD41
, arg: 0x40000000
, CRC: любой
если ответ: 0x0
, вы 'все в порядке;если это 0x1
, перейдите к 3.
Обратите внимание, что большинство карт требуют шагов 3/4 для повторения, обычно один раз, то есть фактическая последовательность CMD0
/ CMD8
/ CMD55
/ ACMD41
/ CMD55
/ ACMD41
- чтобы быть уверенным, попробуйте это n
раз (выберите n
в пределах вашей причины), и предположите неудачу, если это не так.
Также обратите внимание, что вы должны утверждать S lowS̲ (aka CS) low при минимум до и после CMD0
- и, на самом деле, вероятно всегда при отправке любой команды на SD-карту..