D223用SRAM存波形、用Flash存离线数据,那校准参数存在哪里?答案是FRAM------铁电存储器。本文从铁电晶体的微观世界出发,解析FRAM为何能做到"断电不丢、无限写入"。
一、FRAM是什么?
FRAM(Ferroelectric Random Access Memory,铁电随机存储器)是一种断电后仍可保存数据的非易失性存储器,兼具RAM的高速读写特性和ROM的非易失性。
铁电存储器能兼容RAM的一切功能,并且和ROM技术一样,是一种非易失性的存储器。它在这两类存储类型间搭起了一座跨越沟壑的桥梁------一种非易失性的RAM。
二、铁电晶体:FRAM的核心秘密
2.1 材料基础
FRAM的核心技术是铁电晶体材料(如PZT锆钛酸铅)。这种特殊材料使铁电存储器同时拥有随机存取记忆体和非易失性存储器的特性。
2.2 双稳态工作原理
铁电晶体材料的工作原理:当在铁电晶体材料上加入电场,晶体中的中心原子会沿着电场方向运动,达到稳定状态。晶体中的每个自由浮动的中心原子只有2个稳定状态,一个记为逻辑中的0,另一个记为1。
中心原子能在常温、没有电场的情况下,停留在此状态达100年以上。铁电存储器不需要定时刷新,能在断电情况下保存数据。由于整个物理过程中没有任何原子碰撞,铁电存储器有高速读写、超低功耗和无限次写入等特性。
2.3 "铁电"名称的由来
术语"铁电"是指以电压为函数绘制的充电曲线图与铁磁材料的迟滞环路(BH曲线)之间的相似性。铁电材料不受磁场的影响。
注意:铁电效应与磁性无关,"铁电"名称源于其电滞回线与铁磁材料的磁滞回线形状相似,但实际物理机制完全不同。
2.4 与DRAM电容的物理对比
| 特性 | FRAM铁电晶体 | 传统DRAM电容 |
|---|---|---|
| 数据保持机制 | 原子位置极化 | 电荷存储 |
| 断电数据保留 | 永久保持 | 毫秒级丢失 |
| 状态切换速度 | <50ns | ≈10ns |
| 理论耐久性 | >10^14次 | ≈10^16次 |
三、FRAM相对于Flash/EEPROM的四大优势
3.1 速度:快1000倍
FRAM具有快速写入时间。FRAM存储器单元的实际写入时间少于50ns,比所有其它操作都要快。这个写入时间比闪存/EEPROM的写入时间要快1000倍。
此外,与EEPROM需要两步才能完成数据写入(一条写入命令、之后是一条读取/验证命令)不同,FRAM的存储器写入功能的操作过程与读取存储器时的过程一样。只有一条存储器访问命令,或者读取,或者写入,只有一个步骤。所以,事实上,与EEPROM写入操作相关的全部时间被基于FRAM的智能IC消除了。
3.2 低功耗:1/20的写入功耗
在低压时即可完成对FRAM单元的写入,更改数据所需的电流极少。而在使用闪存时,需要高压才能完成此类操作。相对于10-14V的闪存功率,FRAM的功率极低------只有1.5V。
FRAM的低压转化为低功耗,并且能够以更快的处理速度实现更多功能。FRAM的写入功耗仅为Flash的1/20,无需高电压编程。
3.3 数据可靠性:杜绝"数据撕裂"
由于只需要很少量的能量,在数据写入开始时,FRAM所需的全部电能被前加载。这就避免了"数据撕裂"------这是指基于闪存的MCU在写入周期内被从电源上移开时会出现数据部分写入的情况。
FRAM经过了100万亿次或者更多的读取/写入周期测试------远远超过了闪存或EEPROM的写入周期数量。
3.4 统一存储器
统一存储器意味着它是消除可变和恒定数据之间界限的技术,这就简化了数据处理、系统内编程和固件镜像。
四、破坏性读取与恢复机制
4.1 破坏性读取的本质
FRAM的读取过程本质上是一个"窥探"原子位置的过程。当检测电压施加到铁电电容器时,会根据原子位置产生不同的电流响应:
- 读取"1"状态:原子位移产生明显的电流尖峰
- 读取"0"状态:几乎不产生可检测电流
但这一过程存在一个根本性问题------读取操作本身可能扰动原子的原始位置。就像用X光检查文物时可能造成轻微损伤一样,FRAM的每次读取都可能:
- 部分改变铁电畴的极化状态
- 导致存储单元进入亚稳态
- 长期累积造成数据漂移
4.2 存储器恢复机制
FRAM在每次读取后需要进行存储器恢复。执行存储器恢复的原因在于,FRAM存储器单元要求每个被访问的位在刷新函数中被重新写入。
读操作可能导致存储单元状态的改变(尽管这种情况在FRAM中相对较少,但仍有可能发生)。储存器恢复的本质是根据读取的结果,再次施加一个电场来确保铁电晶体的原子位置与读取时一致:
- 如果储存的是0,则原子不动,无尖峰
- 如果读取到的是"1",就施加一个会改变原子位置到"1"状态的电场,以使原子恢复到初始位置,保证储存数据不变
4.3 恢复时序
简化的FRAM读取时序:
c
void FRAM_read(uint32_t address) {
apply_sensing_voltage(); // 施加检测电压
measure_cell_current(); // 测量单元电流
initiate_restore(); // 触发恢复操作
wait_restore_complete(); // 等待恢复完成
}
五、D223中的FRAM应用
5.1 硬件接口
D223通过SPI3接口与FRAM芯片通信。FRAM的SPI时序与标准SPI Flash兼容,但写入时不需要擦除等待。
5.2 FRAM驱动实现
D223固件中的FRAM驱动:
c
void FramWrite(u8* data, u16 addr, u16 len) {
// FRAM写时序:WREN → WRITE → WRDI
FRAM_CS(0);
HAL_SPI_Transmit(&hspi3, WREN, 1, 100); // 写使能
FRAM_CS(1);
FRAM_CS(0);
HAL_SPI_Transmit(&hspi3, WRITE + addr, 3, 100); // 写命令+地址
HAL_SPI_Transmit(&hspi3, data, len, 100); // 写数据
FRAM_CS(1);
FRAM_CS(0);
HAL_SPI_Transmit(&hspi3, WRDI, 1, 100); // 写禁止
FRAM_CS(1);
}
void FramRead(u8* rdData, u16 addr, u16 len) {
FRAM_CS(0);
HAL_SPI_Transmit(&hspi3, READ + addr, 3, 100); // 读命令+地址
HAL_SPI_Receive(&hspi3, rdData, len, 100); // 读数据
FRAM_CS(1);
}
注意:FRAM的写入不需要像Flash那样先擦除整块。FramWrite直接写入,一步完成,不需要WRDI之后的等待时间。
5.3 存储内容
D223的FRAM中存储的全部参数:
| 数据类别 | 内容 | 大小 |
|---|---|---|
| 软件版本号 | 0x0223(标识D223) | 2字节 |
| ADC参数 | 通道使能、采样率、量程、信号类型、触发参数 | ~50字节 |
| ADC校准数据 | 8通道×2点×(数字量+模拟量+使能) | ~100字节 |
| 校正系数 | 8通道×(系数+零点偏移) | ~40字节 |
| DAC/DDS参数 | 4通道波形类型、频率、幅度、占空比、相位、偏置 | ~60字节 |
| DIO参数 | 8路DO状态、PWM参数(频率/占空比/脉冲数/加减速) | ~80字节 |
| 传感器单位 | 8通道单位索引 | 8字节 |
5.4 上电初始化流程
D223上电时从FRAM加载全部参数:
c
void fram_read_datas(void) {
FramRead((u8*)&_framDatas, FRAM_BASE_ADDR, FRAM_DATA_LENGTH);
// 首次上电检测
if(_framDatas.softVersion != 0x0223) {
_framDatas.softVersion = 0x0223;
_framDatas._adcParam.adc_ch_Enable = 0xff; // 8通道全使能
_framDatas._adcParam.samplingRate = 100000; // 默认100kHz
_framDatas._adcParam.sramRecordMaxTime = 100; // 默认100ms
// ... 初始化校准数据、DAC参数、PWM参数
fram_write_datas();
fram_read_datas(); // 回读验证
}
// 参数范围约束
_framDatas._adcParam.samplingRate = clamp(1, 510000);
_framDatas.dacOutRate = clamp(1000, 10000);
}
版本号0x0223用于区分不同产品(D223),首次上电或固件升级后自动初始化默认参数。
5.5 为什么要用FRAM存校准参数?
校准参数是D223中最关键的数据------一旦丢失,采集精度退化到未标定状态(±0.05% → 0.01% FSR的精度提升全部归零)。
FRAM的非易失性确保校准参数在断电后不丢失。而FRAM的无限次写入寿命意味着用户可以反复重新标定,不会因为写入次数耗尽而损坏。
对比Flash的10万次写入寿命:如果每次上电都写入一次参数,Flash只能用约27年(100000/365≈274年),看似足够。但实际使用中参数更新频率可能更高(如运行中动态修改采样率),FRAM的100亿次寿命彻底消除了这个顾虑。
六、FRAM耐久性深度分析
6.1 写入寿命
| 存储器 | 写入寿命 | D223中的角色 |
|---|---|---|
| FRAM | >100万亿次(10^14次) | 校准参数存储 |
| Flash(SLC) | ~10万次 | 离线数据记录(仅7606) |
| EEPROM | 10万100万次 | --- |
| SRAM | 无限(但断电丢失) | 波形数据缓存 |
6.2 数据保持时间
FRAM断电后数据可保存:
- 85℃环境下:10年以上
- 25℃环境下:100年以上
6.3 100亿次写入寿命的实际意义
假设D223每秒更新一次FRAM参数(极端场景):
100亿次 / (365 × 24 × 3600) ≈ 317年
即使每秒写入一次,FRAM也能使用317年,远超产品生命周期。
七、FRAM vs Flash vs SRAM:三种存储器分工
D223同时使用三种存储器,各有分工:
| 特性 | SRAM | Flash | FRAM |
|---|---|---|---|
| 易失性 | 易失(断电丢失) | 非易失 | 非易失 |
| 容量 | 8MB | 32MB(仅7606) | 小容量(KB级) |
| 读写速度 | 纳秒级 | 毫秒级 | <50ns |
| 写入寿命 | 无限 | ~10万次 | >100亿次 |
| 擦除粒度 | 字节级 | 扇区级(4KB) | 字节级 |
| D223用途 | 波形存储 | --- | 校准参数 |
| 掉电保持 | ❌ | ✅ | ✅ |
三种存储器的分工逻辑:
- SRAM:高速波形缓存(易失,但速度快、寿命无限)
- Flash:大容量离线记录(非易失,但速度慢、寿命有限)------D223未使用
- FRAM:关键参数存储(非易失 + 高速 + 无限寿命)
八、FRAM的适用场景与局限
8.1 适用场景
FRAM特别适合于那些对数据采集、写入时间要求很高的场合,而不会出现数据丢失。其可靠的存储能力也让我们可以放心地把一些重要资料存储于其中。其近乎无限次写入的使用寿命,使得它很适合担当重要系统里的暂存记忆体,用来在子系统之间传输各种数据,供各个子系统频繁读写。
典型应用:
- 校准参数存储(D223)
- 系统配置参数存储
- 频繁更新的运行参数
- 掉电前紧急数据保存
8.2 局限性
- 容量小:FRAM的6T存储单元面积大,单片容量通常在KB~MB级,无法替代Flash的大容量存储
- 成本高:单位比特成本远高于Flash
- 无法取代DRAM:在主内存应用上,FRAM的成本和容量都不及DRAM
- 程序存储不及Flash:在程序存储上不及Flash的成本与便利性
九、总结
FRAM作为D223校准参数的存储介质,实现了:
| 优势 | 具体体现 |
|---|---|
| 非易失性 | 断电后数据保存100年(25℃) |
| 高速写入 | <50ns,比Flash快1000倍 |
| 无限寿命 | >100亿次写入,可反复标定 |
| 低功耗 | 1.5V写入,Flash的1/20 |
| 数据可靠 | 前加载电能,杜绝数据撕裂 |
| 字节级写入 | 无需擦除,直接写入 |
| 恢复机制 | 读取后自动恢复原子位置 |
FRAM是D223"标定后精度0.01% FSR"的永久保障------即使用户反复重新标定上千次,校准参数也不会因写入寿命耗尽而丢失。这就是D223选择FRAM而非Flash/EEPROM存储校准参数的根本原因。
下篇预告:《D223的DAC模拟输出电路设计:从DAC芯片到运放缓冲的完整信号链》