升级速率比较
通过Bluetooth LE传输时,GR5xx SDK提供普通模式和快速模式两种升级速率模式。快速模式的升级速率高于普通模式,两者的对比如下表所示。
模式 | 固件传输方式 | RAM占用 | 耗时 | 说明 |
---|---|---|---|---|
普通 |
每传输一帧数据,设备端都会回复一帧当前数据的校验值。 |
需要2 KB Buffer接收固件 | 多 |
在固件尚未发送完时如果出现一帧数据错误,可立即发现并终止升级流程。 |
快速 |
所有固件写入完毕再回复校验值。 |
最大带宽配置下需要8 KB Buffer接收固件 | 较少 |
升级大固件时可显著缩短升级时间,但不存在每一帧数据的校验,固件传输完成才会进行校验。 |
在最大带宽的情况下,快速模式的升级速度可达到普通模式的6倍左右,虽然理论上快速模式在传输过程中可能会出现错误,在最后校验过程中才会被发现,出错后时间成本比较高。但在实际测试过程中,出错的概率较低,因此在升级体积较大的固件时,可使用快速模式,提升效率。
为减少RAM占用,默认情况下的Buffer配置(位于SDK_Folder\components\libraries\dfu_port\dfu_port.c)如下:
#ifndef DFU_BUFFER_SIZE
#define DFU_BUFFER_SIZE 2048
#endif
#ifndef ONCE_WRITE_DATA_LEN
#define ONCE_WRITE_DATA_LEN 1024
#endif
如需快速模式达到最大升级速率,可将DFU_BUFFER_SIZE配置为8192、ONCE_WRITE_DATA_LEN配置为4096。
快速模式和普通模式下的数据交互流程如下图所示。
在普通模式下,主机端每发送一帧固件数据,设备端就需要回复一帧,而快速模式只有在数据全部发送完成之后才会进行回复,所以快速模式比普通模式速率高。