1、存储介质选型:EEPROM、Flash、SD卡在血糖仪中的应用场景对比

做嵌入式血糖仪,第一个要拍板的问题就是:数据存哪儿?

我见过不少新手工程师,一上来就选了个大容量Flash,结果成本超了、功耗炸了。也见过有人死磕EEPROM,结果存到一半数据丢了。嗯,这里头门道不少。

今天咱们就把EEPROM、Flash、SD卡这三兄弟,放在血糖仪的场景下好好盘一盘。我个人习惯是先看需求,再选器件,而不是反过来。

1.1 血糖仪到底要存什么数据?

先搞清楚需求,你才能选对存储介质。血糖仪的数据,说白了就三类:

  • 测量记录:时间戳 + 血糖值 + 单位(mmol/L或mg/dL)
  • 校准参数:试纸批次码、温度补偿系数、用户ID
  • 系统日志:异常掉电记录、传感器自检结果

你想想看,一次测量大概产生20~50字节的数据。如果一天测3次,一年也就50KB左右。这个量级,其实并不大。

但问题在于——数据不能丢。血糖值是救命的东西,掉电丢数据这种事,绝对不允许发生。

1.2 EEPROM:小容量、高可靠、适合存参数

EEPROM,全称是电可擦除可编程只读存储器。名字挺长,但说白了就是:可以按字节读写,掉电不丢数据

我在项目中遇到过一款老式血糖仪,它的校准参数就存在一颗24C02(256字节)的EEPROM里。为什么选它?因为校准参数几乎不变,但每次开机都要读。EEPROM的读取速度很快,而且没有坏块问题。

特性 EEPROM 血糖仪场景评价
容量 1KB ~ 512KB 存参数够用,存记录勉强
擦写寿命 100万次 校准参数写入少,完全够用
写入速度 慢(约5ms/字节) 存参数时无所谓
功耗 极低(读<1mA) 非常适合电池供电
成本 中等 小容量很便宜
我的建议:EEPROM最适合存那些「写入少、读取多、不能丢」的数据。比如设备序列号、校准曲线、用户偏好设置。我一般会把EEPROM的地址0x00~0x0F留给设备ID,永远不擦写。

1.3 Flash:大容量、按扇区擦、适合存记录

Flash,大家都很熟悉了。单片机内部自带的Flash,或者外挂的SPI Flash(比如W25Q64)。

但这里有个坑——Flash不能按字节擦除。你写一个字节,得先把整个扇区(通常是4KB)擦掉。这在血糖仪里会带来什么问题?

我曾经帮一个团队排查过bug:他们的血糖仪每次存记录时,都会把之前的历史数据清空。原因就是他们用Flash存记录,每次写入前没做「读-改-写」操作,直接把整个扇区擦掉了。

嗯,这里要注意:Flash适合存「批量写入、顺序追加」的数据。血糖仪的测量记录,正好符合这个特点。

特性 SPI Flash 血糖仪场景评价
容量 1MB ~ 256MB 存几年记录都够
擦写寿命 1万~10万次 每天存3次,能用10年
写入速度 快(约1ms/页) 一次存多条记录很合适
功耗 中等(写时约10mA) 写入时间短,整体功耗可控
成本 性价比极高
避坑指南:我曾经遇到过Flash在低温(0℃以下)写入失败的情况。如果你做的是户外使用的血糖仪,一定要选工业级(-40℃~85℃)的Flash芯片,别省那几毛钱。

1.4 SD卡:超大容量、可插拔、适合数据导出

SD卡,说白了就是「移动硬盘」的微缩版。在血糖仪里,它通常不是用来存实时数据的,而是用来导出历史记录的。

我见过一款医院用的血糖仪,它内置了一个MicroSD卡槽。护士每天下班后,把SD卡拔出来插到电脑上,数据就自动上传到服务器了。这个方案的好处是:不需要蓝牙、不需要WiFi,成本低、操作简单。

但SD卡也有它的毛病:

  • 功耗高:读写时电流能到50mA以上,电池扛不住
  • 文件系统复杂:需要移植FATFS,占用RAM和Flash资源
  • 接触不良:振动环境下容易掉卡
特性 SD卡 血糖仪场景评价
容量 512MB ~ 32GB 严重过剩
擦写寿命 取决于卡的质量 建议用工业级SD卡
写入速度 快(SPI模式约2MB/s) 导出数据很方便
功耗 高(写时>50mA) 不适合频繁写入
成本 低(卡便宜,但需要卡座) 整体成本可控
我的经验:如果你要做带SD卡的血糖仪,建议把SD卡当作「导出介质」而不是「主存储」。平时数据存在Flash里,用户需要导出时,再一键复制到SD卡。这样既省电,又避免了频繁插拔导致的数据损坏。

1.5 三种介质怎么搭配?

你可能会问:能不能只用一种?

理论上可以,但实际项目中,我推荐混合使用。给你看看我常用的方案:

// 存储分配方案(以STM32L0为例)
// EEPROM(外挂24C16):存储校准参数、设备ID、用户设置
// Flash(内部):存储最近1000条测量记录
// SD卡(可选):用于批量导出历史数据

// 伪代码示例
void save_measurement(uint16_t glucose_value) {
    // 1. 先存到Flash(快速、低功耗)
    flash_write_record(glucose_value);
    
    // 2. 如果SD卡已插入,异步导出
    if (sd_card_detected()) {
        sd_export_pending_records();
    }
}

void load_calibration(void) {
    // 从EEPROM读取校准参数
    eeprom_read(0x10, &calib_data, sizeof(calib_data));
}

这个方案的好处很明显:

  • EEPROM负责「不能丢」的参数
  • Flash负责「频繁写」的记录
  • SD卡负责「大容量」的导出

各司其职,互不干扰。

1.6 选型总结

最后给你一张对比表,方便你快速决策:

需求 推荐介质 理由
存校准参数(<1KB) EEPROM 按字节读写,掉电不丢,寿命长
存测量记录(<1MB) Flash 容量大、成本低、顺序写入快
导出数据到PC SD卡 可插拔、通用性强、无需通信模块
既要存参数又要存记录 EEPROM + Flash 最稳妥的组合,我一直在用

说白了,没有最好的存储介质,只有最合适的搭配。你想想看,一个血糖仪才卖几十块钱,你不可能给它配个工业级SSD吧?

嗯,这一章就聊到这儿。下一章咱们会深入讲讲Flash的磨损均衡算法——这可是嵌入式存储的硬核内容,到时候见。