升级速率比较
在固件升级速度方面,GR5xx提供普通模式和快速模式两种,快速模式的升级速度高于普通模式。两者的对比如下表所示。
| 模式 | 固件传输方式 | RAM占用 | 耗时 | 说明 |
|---|---|---|---|---|
| 普通 |
每传输一帧数据,设备端都会回复一帧当前数据的校验值。 |
需要2 KB Buffer接收固件 | 多 |
在固件尚未发送完时如果出现一帧数据错误,可立即发现并终止升级流程。 |
| 快速 |
所有固件写入完毕再回复校验值。 |
最大带宽配置下需要8 KB Buffer接收固件 | 较少 |
升级大固件时可显著缩短升级时间,但不存在每一帧数据的校验,固件传输完成才会进行校验。 |
在最大带宽的情况下,快速模式的升级速度可达到普通模式的6倍左右,虽然理论上快速模式在传输过程中可能会出现错误,在最后校验过程中才会被发现,出错后时间成本比较高。但在实际测试过程中,出错的概率较低,因此在升级体积较大的固件时,可使用快速模式,提升效率。
快速模式的引入也导致了RAM占用的增加,因此在某些应用场景下,留给固件升级的RAM空间非常有限,使用快速模式可能导致系统RAM空间不足,只能使用普通模式进行升级。在这种RAM空间紧缩的场景中,固件端需要进行相关配置,以尽量减少RAM占用。配置文件路径位于SDK_Folder\components\libraries\dfu_port\dfu_port.h,配置内容如下,基于此配置,可使RAM占用最少。
#define ONCE_WRITE_DATA_LEN 1024
#define DFU_BUFFER_SIZE 2048
快速模式和普通模式的数据交互原理如下图所示。
普通模式主机端每发送一帧固件数据,设备端就需要回复一帧,而快速模式只有在数据全部发送完成之后才会进行回复,所以快速模式比普通模式速率高。