3. NOR Flash特性:XIP执行、读取速度、擦写次数限制,适合存放Bootloader
好,咱们今天聊聊NOR Flash。说实话,在嵌入式PDA这个领域,NOR Flash是个老面孔了。我刚开始做嵌入式那会儿,用的就是NOR Flash,一晃这么多年过去,它依然在Bootloader这个位置上稳如泰山。为什么?因为它有几个独门绝技,别的存储介质还真学不来。
3.1 什么是XIP执行?
XIP,全称是eXecute In Place,中文叫“原地执行”。说白了,就是代码不用搬到RAM里,直接在Flash上跑。你想想看,这得多省事?
我记得第一次用NOR Flash做XIP时,心里还挺没底的。代码直接在Flash上跑,能行吗?结果一试,嘿,还真稳。这背后其实是NOR Flash的硬件结构在撑腰——它支持随机访问,CPU可以直接通过地址总线读取任意位置的指令。
核心要点:XIP意味着系统上电后,CPU直接从NOR Flash的0地址开始取指令执行,无需初始化RAM。这对Bootloader来说,简直是量身定做的特性。
对比一下NAND Flash你就明白了。NAND Flash不支持随机访问,它只能按页读取。你想执行某条指令?得先把整页数据搬到RAM里,再跳转过去执行。这一来一回,延迟就上去了。而且,NAND Flash出厂时还可能有坏块,你敢直接在上面跑代码吗?我不敢。
3.2 读取速度:为什么它这么快?
NOR Flash的读取速度,在非易失性存储里算是第一梯队的。我做过实测,普通的SPI NOR Flash,读取速度能到50MB/s以上。如果是并口的,那更快,100MB/s都不稀奇。
为什么会这样?因为NOR Flash的读取接口和SRAM很像。地址线、数据线、控制线,直接连到CPU的总线上。CPU发一个读命令,NOR Flash在几十纳秒内就能把数据准备好。这个速度,足够让CPU全速运行了。
| 存储类型 | 典型读取速度 | 随机访问 | XIP支持 |
|---|---|---|---|
| NOR Flash | 50-100 MB/s | 支持 | 支持 |
| NAND Flash | 10-50 MB/s | 不支持 | 不支持 |
| eMMC | 100-400 MB/s | 不支持 | 不支持 |
不过要注意,这是读取速度。写速度和擦除速度,那就完全是另一回事了。嗯,这里咱们先卖个关子,后面会细说。
3.3 擦写次数限制:一个绕不开的坎
NOR Flash的擦写次数,一般在10万次左右。听起来不少,对吧?但如果你拿它当数据盘用,频繁读写,那寿命消耗得飞快。
我曾经在一个项目里吃过这个亏。当时图省事,把日志数据直接存在NOR Flash里。结果产品用了不到半年,就有客户反馈系统启动不了了。排查下来,发现是存放日志的那个扇区写坏了。从那以后,我再也不敢拿NOR Flash存频繁变化的数据了。
避坑指南:NOR Flash适合“写一次,读多次”的场景。Bootloader就是典型——烧录一次,之后每次上电都是读取执行。如果你需要在运行时修改数据,请务必使用磨损均衡算法,或者干脆换用NAND Flash/eMMC。
那10万次到底够不够用?咱们算笔账。假设你的Bootloader有256KB,每次升级都擦写一次。一天升级一次,能用273年。所以,对于Bootloader来说,这个限制基本不是问题。
3.4 为什么Bootloader非它不可?
好,现在咱们把前面的特性串起来,看看为什么NOR Flash是Bootloader的最佳搭档。
- 上电即执行:系统一上电,CPU直接从NOR Flash的0地址开始跑。不需要初始化RAM,不需要加载驱动。这速度,杠杠的。
- 可靠性高:NOR Flash的存储单元结构简单,数据保持能力强。我见过放了十年的NOR Flash,读出来数据还是对的。
- 接口简单:直接挂在CPU的总线上,硬件设计不复杂。对于PDA这种对成本敏感的设备,能省一颗RAM芯片就省一颗。
- 容量适中:Bootloader一般就几百KB到几MB。NOR Flash的容量范围(1MB到128MB)正好覆盖这个需求。
个人经验:我习惯在NOR Flash里放两份Bootloader——一份主备份,一份恢复备份。万一主备份被写坏了,还能从恢复备份启动。这个习惯救过我两次,真的。
3.5 实际项目中的选型建议
如果你现在要做一个嵌入式PDA,选NOR Flash时,我建议你关注这几个参数:
- 读取速度:至少50MB/s,不然CPU跑起来会卡顿。
- 擦写次数:10万次是底线,低于这个数就别考虑了。
- 封装:WSON或SOIC,焊接方便,适合量产。
- 温度范围:工业级(-40°C到85°C),消费级的不靠谱。
最后说一句,NOR Flash虽然老,但老有老的好处——稳定、可靠、生态成熟。在Bootloader这个领域,它依然是当之无愧的王者。你想想看,连手机里的Bootloader都还在用NOR Flash,这还不够说明问题吗?