• 正文
  • 相关推荐
申请入驻 产业图谱

米客方德MK SD NAND(贴片式TF卡)测评:一颗可以焊在板子上的“TF卡”体验如何

04/21 10:51
299
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、为什么关注贴片式TF卡

最近在做一个户外数据采集器,遇到了一个老生常谈的问题:存储方案怎么选?

设备要求不高:每5分钟记录一次传感器数据,存成CSV文件,一个月导出一次。但有几个硬性约束:

设备安装在户外配电箱里,夏天内部温度可能超过60℃

配电箱有振动(旁边是变压器

PCB空间非常有限,主控板只有一张名片大小

希望设备能稳定运行3-5年不维护

常规思路是放一个TF卡槽。但这个方案被否决了:卡座占地方,振动环境可能接触不良,普通TF卡的宽温表现我心里没底。

后来在论坛上看到有人用贴片式TF卡。研究了一下,觉得挺有意思,决定试一试。这次拿到的是米客方德的MK SD NAND样品。

二、贴片式TF卡是什么

简单说,就是一颗可以焊在板子上的TF卡。

它内部集成了NAND闪存和SD控制器,对外提供标准的SD接口。开发者直接用SD卡驱动就能操作它,不需要关心底层的坏块管理、ECC纠错这些麻烦事。

我拿到的是LGA-8封装的样品,6x8mm。拿卡尺量了一下,比TF卡本身还小一圈。焊盘在芯片底部,直接贴片。

几个关键参数:

容量:256MB(2Gbit)

闪存类型:SLC

擦写寿命:标称10万次

工作温度:-40℃ ~ +85℃

接口:支持SPI模式

SLC颗粒加上宽温,这两点是我选它的主要原因。

三、硬件设计

3.1 引脚连接

SPI模式下只用4根信号线:CS、DI、CLK、DO。加上电源和地,共6根线。

参考数据手册,原理图做了几处处理:

CMD(DI)和DAT0(DO)各用10kΩ电阻上拉到3.3V

VDD旁边放了一颗0.1μF和一颗10μF电容

CLK线上串了22Ω电阻

PCB Layout时注意了几点:

CLK线尽量短,两侧包地

数据线长度尽量一致

GND焊盘用十字花连接(数据手册特别提醒的,说是防止散热太快导致虚焊)

板子回来后,手工焊了一片,用热风枪350℃吹了约20秒,焊得还算规整。批量肯定走机器贴片,手工只是验证。

3.2 兼容设计

我在板上同时留了TF卡槽的焊盘。SD NAND焊盘和卡槽的SDIO信号并在一起,用0Ω电阻选择。这样同一块板子既可以贴SD NAND,也可以插TF卡,方便对比测试。

四、驱动开发

主控用的是STM32F407,没有SDIO接口(或者说不想占用那么多引脚),所以用SPI模式。

4.1 初始化

初始化和普通SD卡一模一样:

c

// 上电后发80个时钟

for (int i = 0; i < 10; i++) {

spi_write(0xFF);

}

// CMD0复位

sd_cmd(CMD0, 0, 0x95);      // 应返回0x01

// CMD8检测电压

sd_cmd(CMD8, 0x1AA, 0x87);  // 应返回0x01

// 循环发CMD55+ACMD41直到初始化完成

do {

sd_cmd(CMD55, 0, 0x01);

r1 = sd_cmd(ACMD41, 0x40000000, 0x01);

} while (r1 != 0x00);

踩了一个坑:初始化时钟必须低于400kHz。一开始没注意,直接用了10MHz,CMD0死活没响应。后来降到250kHz,一次过。

4.2 读写

读写扇区的代码也是标准的:

c

// 读一个扇区

sd_cmd(CMD17, sector, 0x01);

while (spi_read() != 0xFE);     // 等待数据令牌

for (int i = 0; i < 512; i++) {

buf[i] = spi_read();

}

spi_read(); spi_read();  // 丢掉CRC

// 写一个扇区

sd_cmd(CMD24, sector, 0x01);

spi_write(0xFE);                 // 数据令牌

for (int i = 0; i < 512; i++) {

spi_write(buf[i]);

}

spi_write(0xFF); spi_write(0xFF); // 伪CRC

while (spi_read() != 0xFF);      // 等待写入完成

写操作后面的忙检测很重要。如果省略,下一笔数据可能会丢。

4.3 文件系统

挂载了FatFs,调用f_open、f_write、f_read、f_close。和操作普通SD卡完全一样,代码一行都不用改。

五、测试数据

5.1 功耗

万用表串在3.3V电源上测的:

状态 电流
待机(CS拉高) 128μA
连续读 31mA
连续写 41mA

待机128μA,对于电池供电的设备可以接受。工作电流30-40mA,在SPI模式下属于正常水平。

5.2 速度

用H2testw在PC上测(通过读卡器):

读:约21.8 MB/s

写:约10.1 MB/s

在STM32上,SPI时钟25MHz,实测:

读:约2.5 MB/s

写:约1.8 MB/s

受限于SPI总线,速度比SDIO模式慢很多。但对于我的应用(每5分钟写几百字节),完全够用。如果追求速度,可以考虑换带SDIO接口的主控。

5.3 温度测试

放进高低温箱跑了24小时:

-40℃:启动正常,读写正常

+85℃:启动正常,读写正常

常温下连续写入一周,没出问题。宽温指标没有虚标。

5.4 与TF卡的对比

在同一块板子上对比了TF卡槽+普通TF卡(闪迪Class 10):

项目 贴片式TF卡 TF卡槽+普通卡
占板面积 6x8mm 卡+卡座约180mm²
振动测试 通过(焊接) 500次后偶尔掉卡
高温写入 85℃正常 70℃以上偶发错误
待机功耗 128μA 卡座本身无功耗,卡约150μA
可更换

振动测试是用一个小振动台做的,频率50Hz,振幅1mm。贴片式的一直正常,TF卡槽的大约500次后开始偶尔掉卡——应该是卡座弹片疲劳了。

六、SMART功能

这颗芯片支持SMART,可以读健康状态。通过CMD56命令获取512字节数据,里面包含:

总写入数据量

出厂坏块数、新增坏块数

剩余寿命百分比

正常/异常掉电次数

我写了一个简单的读取函数,每星期读一次,通过串口打印。目前新增坏块数还是0,剩余寿命100%。

这个功能对工业设备来说很实用。可以在芯片寿命快用完之前提前预警,而不是等坏了再去换。

七、几个踩过的坑

坑1:初始化失败

现象:上电后CMD0没响应。

原因:上电后没发够时钟脉冲。SD卡需要至少74个时钟才能完成内部初始化。

解决:上电后先发10个0xFF(80个时钟),再发CMD0。

坑2:高温写入错误

现象:常温正常,60℃以上偶尔写失败。

原因:CLK信号过冲,高温下信号质量变差。

解决:CLK线上串22Ω电阻,同时把SPI时钟从25MHz降到20MHz,问题消失。

坑3:手工焊接

LGA封装手工焊有点难度。第一次焊,用热风枪吹了40秒,结果芯片没坏但板子起泡了。后来控制在20秒左右,配合助焊剂,焊得还不错。批量还是建议机器贴片。

这颗MK SD NAND贴片式TF卡用下来,总体感受是:省心

不需要管坏块管理,不需要管ECC纠错,驱动用现成的SD卡代码就行。焊接在板子上,不用担心振动松脱。宽温和SLC寿命,用在户外设备上心里有底。

适合的场景

户外设备、车载设备(振动、宽温)

空间紧凑的PCB(6x8mm)

需要频繁写入、长期运行的应用(SLC长寿命)

对可靠性要求较高的工业产品

不适合的场景

需要用户自己换卡的产品

成本极度敏感的项目(比普通TF卡贵)

需要超大容量的应用(目前最大64GB)

如果你的项目正好落在前面的区间里,贴片式TF卡值得一试。如果不需要宽温和长寿命,普通TF卡加卡槽可能更经济。

相关推荐