首页/协议速查/SDIO/SD 协议
💳

SDIO/SD 协议 存储卡总线

板内总线
SD卡的命令响应+数据块传输,文件系统的底层通道。
🧩 核心原理
📈 时序 / 工作过程图
SDIO/SD 卡命令-响应时序主机发 CMD → 从机回 R 响应 → 数据段(DAT 线)CMD主机发命令从机响应DAT0数据块(1/4位宽)命令格式:48位(起始+索引+参数+CRC7)· 时钟可达 50MHz(高速)· 配合 FATFS 文件系统
⚙️ 配置 / 使用要点
  1. 上电后至少 74 个时钟周期让卡就绪
  2. CMD0 复位 → CMD8 电压检查 → ACMD41 初始化
  3. ACMD6 切 4 位模式 → CMD16 块长度
  4. FatFS 底层封装 read/write 块函数
🛠️ 项目示例
SD 卡读单块(CMD17,块=512B)
// 发 CMD17(地址=块号×512) 读一块
uint8_t cmd[6] = {0x51, (addr>>24)&0xFF, (addr>>16)&0xFF,
                  (addr>>8)&0xFF, addr&0xFF, crc7};
// 等 R1 响应 0x00 → 等起始令牌 0xFE → 收512B + CRC2B
uint8_t token;
while(read_byte() != 0xFE);   // 数据起始令牌
for(int i=0;i<512;i++) buf[i] = read_byte();
// 帧校验 CRC16 可选检查
❓ 面试高频
SD卡4位模式初始化为什么要先1位?
初始化阶段用1位CMD线确保兼容所有卡,卡识别完成后ACMD6切换4位提升吞吐
CMD和ACMD区别?
ACMD=先发CMD55告诉卡"下一条是应用命令",再发ACMD41等特定命令
读写SD卡掉电为什么丢数据?
文件系统缓冲未落盘、卡内FAT未更新;需要close/flush或日志轮转+掉电检测
✅ 自查清单 (点击勾选,本地保存)
0/0
知道CMD/ACMD/R1-R3
会说初始化流程
知道数据块与令牌
知道4位切换
知道掉电安全