一.为何要晋级
蓝牙固件晋级是运用手机给固件进行更新,以达到修正bug的目的,完善功能的效果。晋级的大概流程是:
1.当蓝牙设备的固件需要晋级时,由嵌入式开发人员供给新的固件,由服务器管理人员将固件放到服务器上。
2.用户打开手机 APP 的时候会检测到服务器有更新,恳求更新蓝牙设备固件,承认更新后,手时机从服务器下载固件。
3.下载完毕后,APP 会读取固件内容,并依据晋级协议将内容传到蓝牙设备里,完结晋级。
我们常讲的DFU
即Device Firmware Update(设备固件更新)
,OTA
即 Over The Air(隔空晋级)
二.固件晋级的流程
各个厂商的设备流程或许不一致,但大同小异,这里只说大致的流程:
首先要从云端下载的固件为 .bin 后缀的文件,文件名会有必定的格局,含有固件版本号和文件 CRC32 校验值。
其次是数据分块,规定一个数据块大小比如 1024 字节,然后把晋级数据进行分块,不够的就剩余多少作为一块。蓝牙一次发送的数据量是有限的,所以每次发送 20 字节的数据。这个数据要遵循晋级数据格局,带指令头和校验码,下载包的数据仅仅这 20 字节中的一部分。所有包内数据都携带在每条晋级数据指令中。
最终便是晋级的进程:
1. 连接设备,发送晋级恳求。
2. 待蓝牙承认之后,开端发送数据头奉告蓝牙此次发送的数据量和 CRC 校验。
3. 开端发送晋级数据。(每条数据之间距离 20ms 为了蓝牙可以便利处理)。
4. 等候一个块发送完就发送块结束指令。
5. 蓝牙承认发送下一个块,返回过错则终止此次晋级。
6. 发完所有数据之后发送晋级完结。
7. 蓝牙承认则晋级完结,返回过错则晋级失利。
蓝牙固件晋级最复杂的就在晋级进程,很多的数据与蓝牙交互。DFU
固件晋级可以运用NRF的github开源库,具体完成可参阅这篇文章.