如果你拆过行车记录仪、无人机或者工业控制器,可能会在电路板上发现一颗黑色的小芯片,大小只有指甲盖的一半,底部有焊盘直接贴在板子上。这颗芯片就是SD NAND,也叫贴片式TF卡。
它和普通TF卡功能一样,但不需要卡座,直接焊接。那么它内部是怎么工作的?和普通NAND Flash有什么区别?实际性能如何?
这篇文章从Flash闪存的基础知识讲起,再到SD NAND的原理和实测数据,尽量写得通俗易懂。
2.1 什么是NAND Flash
NAND Flash是一种非易失性存储器,断电后数据不会丢失。它广泛用于U盘、SSD、存储卡等产品。
NAND Flash的基本存储单元是“浮栅晶体管”。通过控制浮栅里的电荷量来表示0和1。写入数据时,给晶体管施加高压,电荷穿过氧化层进入浮栅。擦除数据时,反向施加高压,把电荷拉出来。
2.2 SLC、MLC、TLC的区别

NAND Flash按每个单元存储的比特数分为几种类型:
简单理解:一个房间住的人越少,住得越舒服,但人均成本越高。SLC是“单人间”,TLC是“八人间”。
2.3 NAND Flash的几个痛点
NAND Flash有几个天生的问题,需要主控来处理:
坏块:出厂时就可能有坏块,使用过程中还会产生新坏块。主控必须能识别坏块并跳过。
位翻转:读取时可能出现比特错误,需要ECC纠错来检测和纠正。
写放大:NAND不能覆盖写,必须先擦除再写入。擦除以块为单位,写入以页为单位,导致实际写入量大于逻辑写入量。
磨损:每个块的擦写次数有限,需要磨损均衡算法让所有块的擦写次数平均。
这些问题在裸NAND芯片上都需要主控来处理,而SD NAND把这些都封装好了。
SD NAND可以理解为“内置了SD控制器的NAND Flash”。它把一颗NAND闪存和一颗SD控制器封装在一起,对外提供标准的SD接口。
它的几个别名:贴片式TF卡、SD Flash、工业级SD卡。

核心特点:
我拿到的是MK米客方德的SD NAND样品,型号MKDV2GIL-AST,容量2Gbit(256MB),SLC颗粒,工业宽温级(-40℃~85℃),LGA-8封装,6x8mm。
项目 | SD NAND(贴片式) | 普通TF卡 |
|---|---|---|
连接方式 | 焊接 | 插拔式卡座 |
占板面积 | 6x8mm | 卡11x15mm+卡座 |
抗震性 | 好 | 一般(弹片疲劳) |
工作温度 | -40℃~85℃ | 0℃~70℃ |
闪存类型 | SLC/pSLC/MLC/TLC可选 | 多为TLC/QLC |
擦写寿命 | SLC 10万次 | TLC 500-1000次 |
SMART | 支持 | 不支持 |
可更换 | 不可(需热风枪) | 可插拔 |
核心差异:SD NAND面向工业场景,强调可靠性和长寿命;普通TF卡面向消费场景,强调成本和可更换性。
五、实测数据
5.1 测试环境
5.2 功耗测试
状态 | 电流 |
|---|---|
待机(CS拉高) | 80μA |
连续读取 | 25mA |
连续写入 | 41mA |
待机仅80μA,对于电池供电的设备来说非常友好。读取电流25mA,在SPI模式SD卡中属于较低水平。
5.3 速度测试
PC端通过读卡器测试:
STM32 SPI模式(25MHz):
SPI模式速度受限于总线,但对于日志存储、传感器数据采集等应用完全够用。如果需要更高速度,可以切换到SDIO模式。
5.4 温度测试
温度 | 结果 |
|---|---|
-40℃ | 启动正常,读写正常 |
+25℃ | 正常 |
+85℃ | 启动正常,读写正常 |
连续运行72小时,未出现错误。宽温指标扎实。
5.5 与TF卡对比
在同一块板子上对比TF卡槽+普通TF卡(闪迪Class 10):
测试项 | SD NAND | TF卡槽+普通卡 |
|---|---|---|
振动测试(50Hz/1mm) | 通过 | 500次后偶发掉卡 |
高温写入(85℃) | 正常 | 70℃以上偶发错误 |
待机功耗 | 80μA | 约150μA |
初始化成功率 | 100% | 卡座氧化后下降 |
振动测试中,TF卡槽在500次振动后开始偶尔掉卡,应该是卡座弹片疲劳导致的接触不良。SD NAND焊接固定,全程正常。

SD NAND支持SMART,通过CMD56命令可以读取健康状态信息。
我写了一个简单的读取函数,每星期读取一次:
c
// 读取SMART数据
uint8_t cmd[6] = {0x56, 0x00, 0x00, 0x00, 0x01, 0x00};
sd_send_cmd(cmd, 6);
for (int i = 0; i < 512; i++) {
smart_data[i] = spi_read();
}
解析出的信息包括:
目前写入量约2GB,新增坏块数为0,剩余寿命100%。这个功能对于工业设备的预防性维护很有价值。
7.1 初始化流程
c
// 1. 上电后发至少74个时钟
for (int i = 0; i < 10; i++) spi_write(0xFF);
// 2. CMD0复位
sd_cmd(CMD0, 0, 0x95); // 响应0x01
// 3. CMD8检测电压
sd_cmd(CMD8, 0x1AA, 0x87); // 响应0x01
// 4. 循环ACMD41等待初始化完成
do {
sd_cmd(CMD55, 0, 0x01);
r1 = sd_cmd(ACMD41, 0x40000000, 0x01);
} while (r1 != 0x00);
注意:初始化时钟必须低于400kHz,否则CMD0可能无响应。
7.2 读写操作
c
// 读单块
sd_cmd(CMD17, sector, 0x01);
while (spi_read() != 0xFE);
for (int i = 0; i < 512; i++) buf[i] = spi_read();
// 写单块
sd_cmd(CMD24, sector, 0x01);
spi_write(0xFE);
for (int i = 0; i < 512; i++) spi_write(buf[i]);
while (spi_read() != 0xFF); // 等待写入完成
写操作后的忙检测不可省略。
这颗SD NAND用下来,几点感受:MK SD NAND待机仅80μA、封装6x8mm、支持宽温和SMART预警,适合对抗振、长寿命有要求的工业场景,但成本高于普通TF卡且不可插拔。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。