Nor Flash的理论性能
简介#
为了评估Nor性能优化空间,我需要根据Spec计算出极限情况下,Nor Flash的性能理论值。
在全志的R**相关项目中分别支持ESMT、MXIC、Winbond、GD这4个厂家的Nor Flash,具体型号不方便透露,其规格书参数如下:
厂家 | 写(ms) | 4K擦除(ms) | 32K擦除(ms) | 64K擦除(ms) | 全盘擦除(s) |
---|---|---|---|---|---|
MXIC | 0.33~1.2 | 25~120 | 140~650 | 250~650 | 26~60 |
Winbond | 0.7~3 | 45~400 | 120~1600 | 150~2000 | 40~200 |
GD | 0.5~2.4 | 50~400 | 160~800 | 300~1200 | 50~120 |
ESMT | 0.5~3 | 40~300 | 200~1000 | 300~2000 | 60~200 |
上表是Spec中记录的典型时间到最大时间。
Flash有写前必须擦除的特性,为了简化计算,我们忽略除了擦除、写外的损耗,例如WREN:Write Enable
等,例如传输损耗。由此计算出的性能会比实际性能略高,但也足以让我们对其性能有个直观认识。
我以性能较高的MXIC的Nor Flash为例,计算理论性能
理论性能#
关键词说明如下:
EraseTime: 擦除(erase)时间
EraseSize: 擦除的大小
WriteTime: 写(write)时间
WriteCount: 一次擦除可以写多少笔数据
BlockSize: 块大小
Flash的特性要求必须先擦除后写,Nand如此,Nor也如此。
在spiffs的代码中,我们可以看到对nor的一个特殊应用:某些标志bit不擦除,直接写。是的,Nor也支持不擦除直接写,但只支持1->0的编程,因此spiffs中只用作某个1->0的标志bit也是可以的。但对大多数情况,为了不丢失数据,我们务必擦除后再写。
综合上擦除和写的时间:
Time(ms) = EraseTime + WriteTime * WriteCount
在Nor中,我们假设每次写256B的数据(1Page),那么1次4K擦除可以写16笔数据,1次32K擦除可以写128笔数据,1次64K擦除可以写256笔数据。
因此,理论性能应该为:
Speed = EraseSize / (EraseTime + WriteTime * WriteCount)
以MXIC的4K大小擦除块为例:
性能 = 4KB / (25ms + 0.33ms * (4KB / 256B)) = 4 KB / 30.28ms = 132.1 KB/s
类似的,根据上述的计算方法,我们统计的各厂家理论性能如下(KB/s):
厂家 | 4K擦除 | 32K擦除 | 64K擦除 |
---|---|---|---|
MXIC | 132.10 | 176.23 | 191.34 |
Winbond | 71.17 | 153.70 | 194.41 |
GD | 68.97 | 142.86 | 149.53 |
ESMT | 83.33 | 121.67 | 149.53 |
务必注意的是,上述理论性能是按Spec的Typ时间计算的,实际使用中,擦除和写的耗时随着使用寿命的增加而增加。而对于一块全新Flash来说,其写和擦除的耗时应该会比Spec的Typ时间要少。因此也就不奇怪我实测的性能会比Spec的理论性能要略高:
厂家 | 4K擦除 |
---|---|
MXIC | 140 |
Winbond | 117 |
GD | 88 |
ESMT | 101 |
上述测试的性能,是不经过FS的裸设备操作性能,且驱动中完全无buffer,文件系统/驱动的缓存对性能还是有比较大影响的。此外除了硬件损耗之外,驱动软件在检查Busy标志的延时精度也会造成一些损耗。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?