我有一个32 GB的Kingston SDHC microSD卡,必须通过MSP430F2618与SPI通信。我无法使用CMD55 + ACMD41(将bit30设置为1)对其进行初始化,如SD规范文件中所述。此序列有效的是:
CMD0, arg: 0 , CRC: 0x95 (response:0x01)
CMD8, arg: 0x1AA , CRC: 0x87 (response:0x01)
CMD1, arg: 0x40000000, CRC: 0xFF (response:0x00)
我也使用8 GB SanDisk卡进行了尝试,并且也可以使用。因此,实际上,我在这里使用的是CMD1,而不是ACMD41,并且HCS位设置为1。但是,它不是稳定的,有时可以工作,有时却不能。这可能与硬件有关。
卡使用参数
0x40000000
响应CMD1并不奇怪吗? 最佳答案
您不应该使用CMD1
初始化SDHC卡;如SD卡规范中所述:
如果您向它们发出CMD1
,则某些 Controller (主要是更新的容量和更高容量的卡)将仅停留在IDLE中。
重置后应首先发出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
),并且如果没有,则假设失败。另外,请注意,至少应在
CMD0
之前和之后将S̲S̲(aka CS)置为低电平-实际上,在向SD卡发送任何命令时,可能始终置为低电平。关于spi - SDHC microSD卡和SPI初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8080718/