作者是初学者,水平有限,本文仅作为个人学习笔记使用,不能保证内容的正确性。部分资料来源于网络,参考了SD卡协议2.0手册等资料,如果有歧义,可以与作者联系。

目录

SD卡 SPI模式操作(1)初始化SD卡
SD卡 SPI模式操作(2)读操作
SD卡 SPI模式操作(3)写操作

简介

SD卡在SPI模式下,初始化完成之后就可以进行块操作,如读操作。SD卡有两种读取数据块的方式:

  • 单次读数据块
  • 连续读数据块

其中,每次读取的数据块大小,数据块的长度由CMD16( SET_BLOCKLEN)命令设置。高容量SD卡的块大小固定为512字节,因此起始地址应与块边界对齐。

单次读数据块

命令号 参数 响应 名称 描述
CMD17 [31:0]:数据地址,单位:字节(SDSC),单位:512字节(SDHC) R1 READ_SINGLE_BLOCK 读取一个块的数据,参数为块的首地址。块的长度由CMD16设置,对于高容量卡,块大小固定为512字节

通过发送CMD17(READ_SINGLE_BLOCK)命令,让SD卡按照参数的地址返回一个块的数据。当发生错误的时候,SD卡会响应一个数据错误令牌。
SD卡-SPI模式单次读操作.png

连续数据块

命令号 参数 响应 名称 描述
CMD18 [31:0]:数据地址,单位:字节(SDSC),单位:512字节(SDHC) R1 READ_MULTIPLE_BLOCK 连续读取多块数据,直到主机发送CMD12命令,参数为块的首地址。块的长度由CMD16设置,对于高容量卡,块大小固定为512字节

与单次读扇区相似,通过发送CMD18(READ_MULTIPLE_BLOCK)命令,让SD卡按照参数指定的地址开始连续返回数据块,需要停止读取时,MCU发送CMD12(STOP_TRANSMISSION)命令停止读取。当发生错误的时候,SD卡会响应一个数据错误令牌。
SD卡-SPI模式连续读数据块.png

数据错误令牌格式

与R2令牌的内容相似,长度为1字节,其中高4位固定为0。在发送命令CMD17、CMD18之后,如果响应的R1令牌指示发生错误,SD卡将继续响应该令牌。
数据错误令牌格式.png

如果需要评论

因为是个人博客,因备案要求不能使用交互服务,如果需要评论,可以前往本文的CSDN页:
CSDN-SD卡 SPI模式操作(2)读操作