SD卡读取的协议 SDIO的详细解释

好的,下面我用中文详细解释SD卡读取协议和**SDIO(Secure Digital Input Output)**的工作原理及流程。


一、SD卡读取协议简介

SD卡的通信协议主要有两种模式:

  1. SPI模式(串行外设接口,兼容性好,速度较低)
  2. SDIO模式(也叫SD模式,速度高,支持多种总线宽度)

你代码中用的是SDIO模式,即通过SDIO外设与SD卡通信。


二、SDIO协议详细解释

1. SDIO硬件连接

  • 数据线:DAT0DAT3(1位/4位模式),有些卡还支持DAT4DAT7(8位模式,主要用于MMC)
  • 命令线:CMD
  • 时钟线:CLK
  • 电源:VDD(一般3.3V)

2. 通信流程(以读取为例)

1)初始化阶段
  • 上电后,主机(MCU)通过SDIO接口对SD卡进行初始化,包括:
    • 发送复位命令(CMD0)
    • 检查电压范围(CMD8)
    • 反复发送ACMD41,等待卡准备好
    • 获取卡的CID、CSD等信息(CMD2、CMD9)
    • 分配RCA地址(CMD3)
    • 选择卡(CMD7)
    • 设置总线宽度(ACMD6)
    • 设置块长度(CMD16,SDHC卡固定512字节)
2)数据传输阶段(以单块读取为例)
  • 发送读命令:CMD17(READ_SINGLE_BLOCK),参数为要读取的地址
  • 等待卡响应:卡返回R1响应,表示命令是否接受
  • 数据传输
    • SD卡准备好后,通过数据线(DAT0~DAT3)将数据块发送给主机
    • 主机通过SDIO外设接收数据,可以用DMA或轮询方式
    • 数据块后面跟随CRC校验码
  • 错误处理:主机检查CRC、超时等错误标志
3)多块读取
  • 发送CMD18(READ_MULTIPLE_BLOCK),连续读取多个块
  • 读取完成后,主机需发送CMD12(STOP_TRANSMISSION)停止传输

3. SDIO协议的命令类型

  • 标准命令(CMD):如CMD0、CMD8、CMD17等
  • 应用命令(ACMD):如ACMD41、ACMD6等,需先发送CMD55告知卡下一个是应用命令

4. SDIO协议的响应类型

  • R1:常用,32位,包含错误标志和卡状态
  • R2:长响应,128位,用于CID/CSD
  • R3:OCR寄存器响应
  • R6:RCA响应
  • R7:接口条件响应

5. 总线宽度

  • 1位模式:只用DAT0
  • 4位模式:用DAT0~DAT3,速度更快
  • 通过ACMD6命令切换

6. 典型SD卡读取流程时序图

主控MCUSD卡CMD0(复位)CMD8(电压检测)CMD55 + ACMD41(初始化)R3(OCR响应)loop[直到卡准备好]CMD2(获取CID)CMD3(获取RCA)CMD9(获取CSD)CMD7(选择卡)ACMD6(设置总线宽度)CMD16(设置块长度,SDHC卡可省略)CMD17(读取单块)R1(响应)数据块+CRC主控MCUSD卡

三、代码中的SDIO协议实现

代码中的 sd_block_readsd_multiblocks_read 等函数,正是按照上述协议流程实现的。

  • 先发送命令(如CMD17/CMD18),
  • 检查响应(R1等),
  • 然后通过SDIO外设接收数据(可用DMA或轮询),
  • 最后处理错误和清理中断标志。

四、总结

  • SDIO协议是SD卡高速通信的标准协议,支持1位/4位总线,命令/响应机制,支持DMA。
  • 读取流程包括初始化、命令发送、数据传输、错误处理等环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值