专栏首页QB杂货铺记一次nor flash固件烧录速度优化

记一次nor flash固件烧录速度优化

背景

某个方案使用的是spinor作为存储介质,每次烧录新固件都耗时数分钟,为了提高效率,需要对其进行优化。

分析流程

基本流程

当前烧录流程,有一个可选步骤,全盘擦除,这个步骤耗时达数分钟。不过这是可选的。

接下来必经的步骤,就是从PC端接收数据写入flash了。

已有优化

目前倒是已经有一个优化,在收到数据需要写入时,会先读出flash中的数据跟这笔要写入的数据进行比较,如果数据相同就直接跳过,数据不同,才进行擦除和写入。 这个优化的依据是,相对于一次擦除和写入的耗时来说,读出和比较的耗时很少,一旦命中就可节省掉这次写的开销。在平时调试的时候,两次烧录的固件可能有些数据是完全一样的,这种场景下此处的优化就能发挥作用了。

优化点

初步分析,从流程上看没什么问题,最大的耗时在擦除上,但毕竟nor的物理特性就是需要先擦除再写入的。

但仔细分析,其实还是有优化空间的,这个空间还就在于nor的擦除上。

nor拥有多条擦除的命令,可以擦除4k,32k,64k或者整片擦除。这些命令的耗时是不同的。

方案上由于分区规划设置了最小为4k的分区,所以nor就被配置为4k sector,则nor驱动使用的擦除命令就是对应的4k擦除的命令。而这是效率最低的一种擦除方式。

当前方案在全盘擦除时,是使用循环调用4k擦除实现的,在后续写入数据时也都是以4k为单位进行擦除和写入,在擦除上耗费了大量时间。

nor的几种擦除命令

这几种擦除方式,差异到底有多大呢?

找两款16M的norflash规格书看看。

比较表格:

擦除大小(Kbytes)

擦除时间(ms)

每4k擦除耗时(ms)

以4k为基准的耗时比例

4

70

70

100%

32

150

18.75

26%

64

200

12.5

17%

16 * 1024

3500

0.85

1.2%

另一款:

比较表格:

擦除大小(Kbytes)

擦除时间(ms)

每4k擦除耗时(ms)

以4k为基准的耗时比例

4

25

25

100%

32

140

17.5

70%

64

250

15.62

62%

16 * 1024

2600

0.63

2.5%

从以上统计结果看,一次擦除的空间越大,平均速度就越快。

特别是chip擦除的速度高达到4k擦除的几十倍。

优化方案

找到了优化点,结合烧录流程就有了以下思路

方案一

设法将4k擦除改为32k,64k擦除。 这种对于分区本身并非4k对齐来说,实现上会比较麻烦,需要代码中维护一个缓冲区进行数据的拼接,并处理一些边界情况。

方案二

在烧录的最开始进行一次chip擦除。并在后续的写入时,跳过擦除步骤,直接写入。 这种方案对于烧录场景来说,非常合适,实现起来也简单。

最终采用方案二,改动小,效果明显,烧录速度从数分钟降到了1分钟以内。 但这个只适用于烧录场景。如果是要对系统运行时的写性能进行优化,就只能考虑尽量用64k擦除了。

本文地址: https://www.cnblogs.com/zqb-all/p/12493500.html

公众号: https://sourl.cn/rgbq6M

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 浅析busybox如何集成到openwrt

    这个包本身自带了kconfig,可直接在这个包里面执行make menuconfig进行配置,然后执行make

    zqb_all
  • nor flash之擦除和写入

    最近研究了下nor flash的掉电问题,对nor的掉电有了更多的认识。总结分享如下

    zqb_all
  • 【swupdate文档 五】从可信的来源更新镜像

    现在越来越重要的是,设备不仅要能安全地进行更新操作, 而且要能够验证发送的图像是否来自一个已知的源, 并且没有嵌入恶意软件。

    zqb_all
  • 经典面试题-序列化的作用,应用场景

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • HDU 6114 Chess

     题目:http://acm.hdu.edu.cn/showproblem.php?pid=6114

    用户2965768
  • 区块链在医疗行业的新机遇

    区块链大本营
  • 逆元求组合数----模板

    用户2965768
  • springcloud(二):注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是sp...

    纯洁的微笑
  • 《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern

    LHS简介 在规则文件组成章节,我们已经了解了LHS的基本使用说明。LHS是规则条件部分的统称,由0个或多个条件元素组成。前面我们已经提到,如果没有条件元素那么...

    程序新视界
  • Git 暂存修改文件 取消暂存

    序:Git 已经用了不少年了,起步用的SourceTree ,所以对命令不是很熟悉,最近换了台电脑,索性不按sourceTree了,总结下命令行。

    ZY_FlyWay

扫码关注云+社区

领取腾讯云代金券