小家电控制器的可靠性焦虑往往不是跑飞重启,而是擦几次 EEPROM 就坏了或者电源波动时反复复位。结论先给:ST7LITE09 把 Flash、EEPROM、LVD、AVD 全部集成在一颗芯片里,Flash 10K 擦写、EEPROM 高达 300K 擦写,LVD 三级阈值可替代外部复位电路。
小家电控制器的可靠性焦虑往往不是跑飞重启,而是"擦写几次 EEPROM 就坏了"或者"电源波动时系统反复复位"。选 ST7LITE09 这类 8 位 MCU,很多人只看 Flash 容量和 IO 数量,忽略了存储寿命和低压检测这两个决定整机寿命的硬指标。结论先给:ST7LITE09 把 Flash、EEPROM、RAM、LVD、AVD 全部集成在一颗芯片里——Flash 10K 擦写寿命,EEPROM 高达 300K 擦写,LVD 三级阈值可替代外部复位电路,AVD 预警中断让软件在低压复位前完成安全关闭。小家电做十年质保的底气,全在这几行参数里。
ST7LITE09 的存储布局是典型的 8 位 MCU 紧凑设计,手册第 3 章给了完整的内存映射图。关键数字列出来:
| 存储类型 | 容量 | 擦写寿命 | 保持时间 | 位置/说明 |
|---|---|---|---|---|
| Flash 程序存储器 | 1K / 1.5K 字节(双扇区) | 10K cycles | 20 年 @ 55℃ | SECTOR 0 + SECTOR 1;扇区 0 大小可由 Option Byte 配置 |
| Data EEPROM | 128 字节 | 300K cycles | 20 年 @ 55℃ | 0080h ~ 00BFh;32 字节并行编程;带高压电荷泵 |
| RAM(含扩展) | 128 字节 | — | — | 零页 00C0h ~ 00FFh(含 64 字节栈)+ 扩展页 1000h ~ 107Fh |
| HW Registers | 128 字节 | — | — | 0000h ~ 007Fh |
| 复位与中断向量 | 32 字节 | — | — | FFE0h ~ FFFFh |
两个容易忽略的设计决策值得展开:
Flash 双扇区 + SECTOR 0 可配置:1.5K 版本是 1K SECTOR 1 + 0.5K SECTOR 0,1K 版本是两个 0.5K 扇区。SECTOR 0 的大小可以通过 Option Byte 重新划分,好处是 IAP(In-Application Programming)时能把引导加载程序固化在 SECTOR 0 里,只让应用代码更新 SECTOR 1。SECTOR 0 被硬件写/擦保护,永远改不掉——这是 ST 为防止"应用代码把自己写挂"专门设计的安全网。
EEPROM 32 字节并行编程:不是逐字节擦写,而是一次最多 32 字节组成一行同时编。地址格式是高 11 位选行、低 5 位选行内字节,所以两次编程之间必须写同一行(高 11 位一致)。手册强调:编程周期中如果对同一位置重复写,两个数据会做逻辑 AND,因为数据锁存器只在编程周期结束时自动清空一次。
手册第 4 章 Flash Program Memory 把编程方式分三种:在编程工具里烧写、ICP(In-Circuit Programming,在线编程)、IAP(In-Application Programming,应用内编程)。真正落地小家电量产时,ICP 是主流——PCBA 上焊接好的 ST7 不用拆下来,靠 ICCCLK/ICCDATA 两根线上传代码。
| 编程方式 | 引脚需求 | 可编区域 | 典型场景 |
|---|---|---|---|
| 工具烧写 | 编程器插座 | 全片(SECTOR 0/1 + Option Byte + EEPROM) | 芯片出厂或返工 |
| ICP 在线编程 | ICC 4~6 针接口(RESET / VSS / ICCCLK / ICCDATA + 可选 CLKIN / VDD) | 全片(同工具烧写) | PCBA 上量产烧录;PCBA 上返修 |
| IAP 应用内编程 | 无(软件驱动) | SECTOR 1 + EEPROM(SECTOR 0 受硬件保护) | 联网 OTA 升级固件 |
FCSR(Flash Control/Status Register,地址 002Fh)有三个关键位:OPT、LAT、PGM。标准编程流程是:写 RASS Key 1(56h)和 RASS Key 2(AEh)解锁 → 置 LAT 位进入数据锁存模式 → 写 Flash 地址 → 置 PGM 位启动编程 → 等 PGM 自动清零结束。如果被 IAP 方式调用,解锁密钥必须硬编码在 SECTOR 0 的引导程序里,应用代码不能碰。
/* ST7LITE09 ICP 编程寄存器级流程(FCSR 在 0x002F,RCCR0 在 0x1000) */
void flash_program_byte(u16 addr, u8 data)
{
/* Step 1: 解锁 Flash —— 双密钥 RASS Key 序列 */
*(volatile u8*)0x1000 = 0x56; /* 1st RASS Key */
*(volatile u8*)0x1000 = 0xAE; /* 2nd RASS Key */
/* Step 2: 置 LAT 位 → 进入数据锁存模式 */
FCSR |= 0x40; /* bit 6 = LAT */
/* Step 3: 写地址和数据 —— 地址高 11 位决定行 */
*(volatile u8*)addr = data;
/* Step 4: 置 PGM 位启动编程,硬件自动清零结束 */
FCSR |= 0x20; /* bit 5 = PGM */
while (FCSR & 0x20) {} /* 等待硬件清零 PGM */
/* Step 5: 清 LAT 退出锁存模式 */
FCSR &= ~0x40;
}
还有一个量产必须记的硬性约束:写/擦保护一旦置上(Option Byte 的 FMP_W 位)就永远无法移除,芯片锁死不能再编。量产前务必确认没有误设这个位,否则整批芯片报废。而读保护(FMP_R 位)在重新编程 Option Byte 时会自动先整片擦除再解锁——这是芯片设计的反盗版机制。
EECSR(Data EEPROM Control/Status Register,地址 0030h)的两个位 E2LAT 和 E2PGM 控制整个 EEPROM 读写流程。手册第 5 章给了清晰的状态机:
| E2LAT | E2PGM | 模式 | 行为 |
|---|---|---|---|
| 0 | 0 | 正常读 | EEPROM 当普通 ROM 读,1 CPU 周期出数;不可执行代码 |
| 1 | 0 | 数据锁存 | 写数据进锁存器(每行 32 字节),尚未编程 |
| 1 | 1 | 编程周期 | 硬件启动高压泵写入 EEPROM,结束后 E2LAT/E2PGM 自动清零 |
标准写流程:读状态 → 置 E2LAT=1 → 写地址和数据 → 置 E2PGM=1 → 等自动清零 → 清 E2LAT。关键注意点有三个:
第一,两次编程之间必须写同一行(地址高 11 位一致)。手册原话"the five Least Significant Bits of the address can change"——地址 0080h 和 009Fh 在同一行(高 11 位都是 00000010000),0080h 和 00A0h 就跨行了。跨行写会导致硬件把前一行的编程数据当成这一行的,两个地址都会写错。
第二,编程周期被中断(软件或 RESET)时数据完整性不保证。手册明确警告"If a programming cycle is interrupted, the integrity of the data in memory is not guaranteed"。这意味着你不能让 EEPROM 编程和 HALT/Active-Halt 低功耗模式同时进行——HALT 会立即让 EEPROM 停止,数据必然损坏。正确做法是编程期间 WFI 也不能进,编完再关。
第三,同一位置重复写会发生逻辑 AND。数据锁存器只在编程周期结束时硬件清零一次,两次 E2PGM 之间如果对同一地址写不同值,锁存器值和新写值会做逻辑 AND。这通常是 bug,不是特性。
ST7LITE09 的 System Integrity Management 模块包含两个硬件:LVD(Low Voltage Detector)和 AVD(Auxiliary Voltage Detector),由 SICSR(地址 003Ah)管理。这是芯片级的电源可靠性机制,设计理念是"LVD 做安全底线(VDD 太低就复位),AVD 做预警(VDD 接近 LVD 阈值时先通知软件做安全关闭)"。
| 模块 | 阈值来源 | 输出行为 | 硬件联动 |
|---|---|---|---|
| LVD | Option Byte 配置:Low / Medium / High 三级 | VDD < VIT-(LVD) 时硬件复位(RESET 引脚拉低);滞回 Vhys = VIT+ − VIT- | 自动控制 RESET 引脚,可替代外部 RC 复位电路 |
| AVD | 相对 LVD 阈值,由硬件自动设定 | 当 VDD 穿过 VIT+(AVD) / VIT-(AVD) 时置 AVDF 标志;置 AVDIE 则产生 AVD 中断 | 中断可从 Wait 模式唤醒;不能从 Halt 唤醒(SICSR 在 Halt 下冻结) |
手册第 7.4 节的复位优先级顺序值得记住:外部 RESET 脉冲、内部 LVD RESET、内部 WATCHDOG RESET,三者都作用在 RESET 引脚上,引脚保持低电平直到复位序列(256 CPU 时钟周期延迟 + 复位向量获取)完成。LVD 故障时 LVDRF 标志位(SICSR bit 2)被硬件置位,软件可读它来判断上次复位的原因。
AVD 的价值是"让软件提前做准备"——当 VDD 下降到接近 LVD 阈值但还没到复位线时,AVD 先置 AVDF=1,如果 AVDIE=1 就触发中断。你在 AVD 中断处理里可以关断电机 PWM、保存 EEPROM 里的关键数据、让系统进入安全等待模式——等 LVD 真复位时,系统已经处于已知安全的状态了。
Flash 10K 擦写和 EEPROM 300K 擦写这两个数字,在小家电的实际使用年限里意味着什么?用一个 10 年生命周期做估算:
| 存储 | 单次写入周期 | 每天写入次数 | 10 年累计 | 相对于寿命的倍数 |
|---|---|---|---|---|
| Flash(固件 OTA) | 1 次/OTA 升级 | 假设每月升级 1 次 | 12 × 10 = 120 次 | 120 / 10000 = 1.2% |
| EEPROM(运行时状态) | 每次关机保存一次 | 假设每天开关 3 次 | 365 × 10 × 3 = 10950 次 | 10950 / 300000 = 3.7% |
结论很明显:以正常使用频率,即使连续跑十年,Flash 和 EEPROM 的擦写寿命才用到各自的 1%~4%。真正需要在意的是极端场景:如果你的应用有一个 bug 让固件每小时 OTA 一次,3 个月就会吃光 Flash 寿命;如果在 EEPROM 编程周期里进了 Halt 模式,那一次就是损坏。
一句话总结:ST7LITE09 把"可靠性账"全写在了数据手册里——Flash 10K / EEPROM 300K 擦写寿命够 10 年用量,LVD 三级阈值替代外部复位电路省掉 RC 成本,AVD 预警中断让系统在低压下先"软关"再复位,双扇区 Flash + IAP 引导程序让固件能原地升级。选这款 8 位 MCU 时,把注意力从"能不能够"转到"够不够耐久"。
本文基于 ST7LITE0/ST7SUPERLITE 参考手册(Rev. 2.5,2003-12)中的 Flash Program Memory、Data EEPROM、Supply/Reset/Clock Management、System Integrity Management 四章与 Electrical Characteristics 13.6 节 Memory Characteristics 参数表整理优化。
沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付
电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应