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) | 非常适合电池供电 |
| 成本 | 中等 | 小容量很便宜 |
1.3 Flash:大容量、按扇区擦、适合存记录
Flash,大家都很熟悉了。单片机内部自带的Flash,或者外挂的SPI Flash(比如W25Q64)。
但这里有个坑——Flash不能按字节擦除。你写一个字节,得先把整个扇区(通常是4KB)擦掉。这在血糖仪里会带来什么问题?
我曾经帮一个团队排查过bug:他们的血糖仪每次存记录时,都会把之前的历史数据清空。原因就是他们用Flash存记录,每次写入前没做「读-改-写」操作,直接把整个扇区擦掉了。
嗯,这里要注意:Flash适合存「批量写入、顺序追加」的数据。血糖仪的测量记录,正好符合这个特点。
| 特性 | SPI Flash | 血糖仪场景评价 |
|---|---|---|
| 容量 | 1MB ~ 256MB | 存几年记录都够 |
| 擦写寿命 | 1万~10万次 | 每天存3次,能用10年 |
| 写入速度 | 快(约1ms/页) | 一次存多条记录很合适 |
| 功耗 | 中等(写时约10mA) | 写入时间短,整体功耗可控 |
| 成本 | 低 | 性价比极高 |
1.4 SD卡:超大容量、可插拔、适合数据导出
SD卡,说白了就是「移动硬盘」的微缩版。在血糖仪里,它通常不是用来存实时数据的,而是用来导出历史记录的。
我见过一款医院用的血糖仪,它内置了一个MicroSD卡槽。护士每天下班后,把SD卡拔出来插到电脑上,数据就自动上传到服务器了。这个方案的好处是:不需要蓝牙、不需要WiFi,成本低、操作简单。
但SD卡也有它的毛病:
- 功耗高:读写时电流能到50mA以上,电池扛不住
- 文件系统复杂:需要移植FATFS,占用RAM和Flash资源
- 接触不良:振动环境下容易掉卡
| 特性 | SD卡 | 血糖仪场景评价 |
|---|---|---|
| 容量 | 512MB ~ 32GB | 严重过剩 |
| 擦写寿命 | 取决于卡的质量 | 建议用工业级SD卡 |
| 写入速度 | 快(SPI模式约2MB/s) | 导出数据很方便 |
| 功耗 | 高(写时>50mA) | 不适合频繁写入 |
| 成本 | 低(卡便宜,但需要卡座) | 整体成本可控 |
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的磨损均衡算法——这可是嵌入式存储的硬核内容,到时候见。