扇区(Sector):
存储设备的最小可寻址单元,标准扇区大小通常为512字节(部分大容量设备支持4KB扇区)。
块(Block):
由多个扇区组成的擦除单元,擦除操作以块为单位(无法单独擦除扇区)。
SD NAND 的块(Block)和扇区(Sector)数量与容量直接相关,常见容量与结构对应如下:
容量 | 块数量(Blocks) | 每块扇区数(Sectors/Block) | 总扇区数(Sectors) |
---|---|---|---|
128MB | ~1024 | 128 | 128MB / 512B = 262,144 |
512MB | ~4096 | 128 | 512MB / 512B = 1,048,576 |
1GB | ~8192 | 128 | 1GB / 512B = 2,097,152 |
4GB(SDHC) | ~32,768 | 128 | 4GB / 512B = 8,388,608 |
实际值需参考数据手册:
不同厂商的SD NAND设计可能不同(例如块大小可能为16KB、32KB或128KB),必须查阅具体型号的Datasheet。
通过命令查询:
若无法获取手册,可通过SDIO发送 CMD9
(发送CSD寄存器) 解析容量信息,计算块和扇区数量:
// 示例:从CSD寄存器解析容量uint32_t c_size = ((csd[7] & 0x3F) << 16) | (csd[8] << 8) | csd[9];uint32_t total_sectors = (c_size + 1) * 1024; // 总扇区数(SDHC/SDXC)uint32_t block_size = 512; // 标准扇区大小(字节)
FATFS 配置:
在ffconf.h
中需设置 FF_MAX_SS
(最大扇区大小) 与物理扇区一致(如512或4096)。
擦除操作:
文件系统格式化或写入时,需调用 disk_ioctl()
实现块擦除(例如使用CTRL_ERASE_SECTOR
命令)。
对齐要求:
多扇区读写时,地址需按块大小对齐(如32KB块需对齐到32768字节)。
性能优化:
将频繁写入的数据缓存到RAM,攒满一个块后一次性写入,减少擦除次数。
典型值:1个块(Block)包含 128个扇区(即64KB),但需以具体型号为准。
操作核心:通过数据手册或CSD寄存器获取实际参数,确保驱动与物理存储结构匹配。
下一篇:没有了!