问题描述:
使用正点原子SD卡例程驱动micro SD卡模块时,无法读出卡容量值,即CSD寄存器的内容
经过调试发现是在执行sd_send_cmd(CMD9, 0);函数时无法正确返回0x00,而在获取容量值之前的初始化(卡识别)操作可以正常进行。
解决发法:
在SD卡初始化时spi是处在低速模式下,初始化函数的最后将spi设为了高速模式(72Mhz)
而micro sd卡模块与单片机是由杜邦线连接的,线路较长,在高速通信下极易受到干扰。
所以在低速的初始化模式下可以正常通信,而处于高速状态下获取容量值则会失败。
在连接线较长时将spi模式的速度调低即可成功获取CSD寄存器的值和读写扇区。