DFU工作模式
- 无论采用OTA或有线升级方式,DFU方案可分两种类型:后台式DFU和非后台式DFU。
- 后台模式:由应用程序接收下发的固件,且应用程序在执行接收固件任务时,还可执行其他任务。
- 非后台模式:由Bootloader程序接收下发的固件,且当前只能执行下载固件这一个任务。
- 从占用的存储区域看,DFU又可分为两种类型:双区DFU和单区DFU。
- 双区DFU:将接收到的固件先缓存到一个区域,待固件校验通过后,再拷贝至目标区域。
- 单区DFU:将接收到的固件写入到目标区域,直接覆盖原始固件。
后台式DFU必须使用双区模式存放新旧固件,非后台式DFU既可使用单区也可使用双区模式来存放新旧固件。因此,常用的DFU工作模式主要分为三种:
- 后台双区升级模式
- 非后台双区升级模式
- 非后台单区升级模式
三种模式详细介绍如下:
-
后台双区升级模式的升级示意图如图 1所示。其升级过程主要包含以下步骤:
- 在应用程序部分接收主机端下发的固件。
- 由应用程序将接收到的固件写入至Bank1区域。
- 固件写入完毕后,对Bank1区域的固件进行校验,校验通过后,程序跳转至Bootloader固件运行。
- 由Bootloader程序将新固件拷贝至Bank0区域。然后对新固件进行校验,若校验通过,则跳转至新固件运行。
说明:设备端指固件端,如果使用手机APP升级,主机端即指手机APP。
图 1 后台双区升级模式示意图 - 非后台双区升级模式的升级示意图如图 2所示。其升级过程主要包含以下步骤:
- 在Bootloader接收主机端下发的固件。
- 由Bootloader将接收的固件写入Bank1区域。
- 固件写入完毕后,先对Bank1区域的新固件进行校验,校验通过后,由Bootloader将新固件拷贝至Bank0区域,然后再对Bank0区域的新固件进行校验,若校验通过,则跳转至新固件运行。
图 2 非后台双区升级模式示意图 - 非后台单区升级模式的升级示意图如图 3所示。由Bootloader端固件接收手机APP下发的固件,在接收固件的同时直接将新固件写入Bank0,当写入固件完毕后,对Bank0区域的固件进行校验,当校验通过后跳转至Bank0应用程序运行。
图 3 非后台单区升级模式示意图
三种不同的DFU模式比较如下表所示。
DFU模式 | 升级相同固件时Flash占用 | 备份机制 | Bootloader固件大小 | 升级过程中执行其他任务 |
---|---|---|---|---|
后台双区升级 | 大 | 支持 | 小 | 支持 |
非后台单区升级 | 小 | 不支持 | 大 | 不支持 |
非后台双区升级 | 大 | 支持 | 大 | 不支持 |
说明:
- 后台双区升级模式和非后台双区升级模式在升级相同固件时,Flash占用大是因为需要两块Flash区域存放新旧固件。
- 备份机制指设备端接收的新固件损坏时,系统可继续运行旧固件。
- 非后台单区升级的Bootloader固件比其他两种模式小是因为其只需要基本的拷贝和跳转功能即可,不需要具备与主机端进行数据交互的功能。
- 在非后台单区升级和非后台双区升级时,设备需要跳转至Bootloader固件,升级过程中无法执行应用程序的其他任务。相比之下,后台双区升级模式可以在升级过程中继续执行其他应用任务,提高用户体验。
由表 2可知,非后台双区升级模式具备的优点后台双区升级模式也有,非后台单区升级模式具备的优点是其他两种模式没有的。因此,GR5xx提供的DFU升级模式,只包含后台双区升级模式和非后台单区升级模式。
在实际升级过程中,使用何种升级模式需要根据Flash存储空间和待升级固件大小来决定,具体原则为,如果(全部Flash空间 – Bootloader固件大小 – 参数存储空间)/ 2 >= 待升级固件大小,则推荐使用后台双区升级模式;否则,推荐使用非后台单区升级模式。
说明:
参数存储空间指在Flash区域划分的用于存放非易失性数据的区域。