首页/外设速查/SDIO/SD
💳

SDIO/SD 存储卡

存储外设
挂 SD 卡存数据/日志/固件,配合文件系统就是移动存储,数据记录项目必备。
🧩 核心原理
📈 时序 / 工作过程图
SDIO/SD 卡命令-响应时序主机发 CMD → 从机回 R 响应 → 数据段(DAT 线)CMD主机发命令从机响应DAT0数据块(1/4位宽)命令格式:48位(起始+索引+参数+CRC7)· 时钟可达 50MHz(高速)· 配合 FATFS 文件系统
⚙️ 配置 / 使用要点
  1. 使能 SDIO + GPIO(复用/推挽)
  2. 配置时钟分频/总线宽度(1/4位)
  3. 卡初始化:ACMD41/CMD2/CMD3...(HAL库封装)
  4. FatFS:f_mount → f_open → f_write → f_close
🛠️ 项目示例
SD 卡记录传感器日志(FatFS)
FATFS fs;
FIL f;
FRESULT fr = f_mount(&fs, "", 1);        // 挂载
fr = f_open(&f, "0:/sensor.log", FA_OPEN_APPEND | FA_WRITE);

char line[64];
int n = snprintf(line, sizeof(line),
  "%s,%.2f,%.2f

", timestamp, temp, humi);
UINT bw = 0;
f_write(&f, line, n, &bw);               // 写一行
f_close(&f);                             // 及时关闭防丢

// 断电安全:日志可分段/定期 flush/双文件轮转
❓ 面试高频
SD卡4位和1位模式区别?
4位DAT并行传输吞吐约4倍(25MHz×4bit vs ×1bit);初始化阶段用1位,之后可切4位
为什么写文件要经常close?
FATFS写缓冲在内存,close/flush才落盘;突然断电会丢缓冲数据甚至损坏FAT
SD卡初始化流程?
上电延时→CMD0→CMD8/ACMD41(SDHC判断)→CMD2→CMD3→ACMD6(宽总线)→高速配置
✅ 自查清单 (点击勾选,本地保存)
0/0
知道CMD/DAT/CLK线
理解初始化与传输两阶段
会用FatFS读写
知道断电安全与flush
知道4位/1位吞吐差异