SD卡初始化、读写流程及其相关CMD

一、SD初始化flow

sd_init_flow

		CMD8: 区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令。
			  使用参数0x1aa,即告诉SD卡,主机供电为2.7~3.6V之间。如果SD卡支持CMD8,且支持该电压范围,则会通过CMD8的响应。
			  
		ACMD41: abbreviation: sd_send_op_cond
				发送(APP CMD)ACMD41之前,要先发送CMD55。
				进一步确认卡的操作电压范围; 并通过HCS位来告诉SD卡,主机是不是支持高容量卡(SDHC)。
				
		CMD2: 用于获取CID寄存器数据。
			  SD卡在收到CMD2后,将返回R2长响应(136位)。
			  其中包含128位有效数据(CID寄存器内容),存放在SDIO_RESP1~4等4个寄存器里面。通过读取这四个寄存器,就可以获得SD卡的CID信息。
			  
		CMD3: 用于设置RCA(卡相对地址,必须为非0)。
			  对于SD卡(非MMC卡),在收到CMD3后,将返回一个新的RCA给主机,方便主机寻址。
			  对于MMC卡,则不是由SD卡自动返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD3带参数(高16位用于RCA设置),实现RCA设置。
			  
		CMD9:获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器内容(SD卡的容量和扇区大小等十分重要的信息)。
		
		CMD7:选中我们要操作的SD卡,即可开始对SD卡的读写操作了。

二、SD读写操作

2.1 读操作

2.1.1 单块读

sd_single_read

2.1.2 连续块读

sd_multiblock_read

CMD16(读/写): 设置SD卡的块大小(bytes);
CMD17(读): 读取SD卡的单个块的数据(该指令带一个参数,表示读取数据块的首地址);
CMD18(读):连续读取SD卡多数据块数据(该指令带一个参数,表示读取数据块的首地址);
CMD12: 强制结束当前SD的数据传输(用于多数据块读写);

2.2 写操作

2.2.1 单块写

sd_single_write

2.2.2 连续块写

sd_multiblock_write

ACMD23:设置需要预擦除的数据块个数,以提高SD卡多数据块写入性能(速度)。
CMD24(写):写入SD卡的单个块的数据(该指令带一个参数,表示读取数据块的首地址);
CMD25(写):连续写入SD卡多数据块数据(该指令带一个参数,表示读取数据块的首地址);
CMD13:返回被选中的卡的状态。

CMD55:通知SD卡,接下来要发送的应用命令(APP CMD)。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值