SDHC microSD卡和SPI初始化

use*_*871 8 spi

我有一个32 GB的金士顿SDHC microSD卡,它必须通过SPIMSP430F2618通信.我无法使用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)
Run Code Online (Sandbox Code Playgroud)

我也尝试使用8 GB SanDisk卡,也适用于此.所以实际上,我在这里使用CMD1,而不是ACMD41,HCS位设置为1.但是,它不稳定,有时它可以工作,有时却不行.这可能与硬件有关.

卡片用参数响应CMD1并不奇怪0x40000000吗?

小智 9

您不应该使用CMD1初始化SDHC卡; 如SD卡规范中所述:

在任何情况下都不建议使用CMD1,因为主机可能难以区分MultiMediaCard和SD存储卡.

一些控制器(大多数更新和更高容量的卡)如果你CMD1向它们发出问题,它们就会处于空闲状态.你应该先CMD8 0x1AA在reset(CMD0)之后发出,然后再使用CMD55 + ACMD41.

tl; dr来初始化你应该:

  1. CMD0ARG:0x0,CRC: 0x95(响应:0x01)

  2. CMD8ARG:0x000001AA,CRC: 0x87(响应:0x01)

  3. CMD55arg:0x0,CRC:any(CMD55作为每个 的前缀ACMD)

  4. ACMD41,arg : 0x40000000, CRC:任何

  5. 如果回应:0x0你没事; 如果是的话0x1,转到3.

请注意,大多数卡需要的步骤3/4重复,一般一次,即在实际的序列CMD0/ CMD8/ CMD55/ ACMD41/ CMD55/ ACMD41-可以肯定,尝试n时间(选择n您的合理范围内),并假设如果没有失败.

此外,请注意,你应该断言SS(又名CS)低至少前后CMD0-发送任何命令到SD卡时,在现实中,可能永远.