快捷搜索:

CC1350 BLE空中升级(一)-ios

近来完成了CC1350的蓝牙空中进级功能,在开始写这个功能之前,我在网上找过很多相关资料,结果大年夜多是零零散碎的信息,然后英文资料偏多,是以也走了不少弯路,好在终极照样完成了这个功能,在此做个条记,盼望能赞助到其他应用TI蓝牙模块的童鞋们在做空中进级时少走些弯路。

流程阐明:

1、 app从办事器高低载固件至本地沙盒

阐明:固件文件由设备端工程师制作,导出文件为hex款式,必要转换为bin款式的二进制文件供移动端下载(TI的文档里面会有相关的转换阐明)

2、app使用蓝牙通讯将固件传输至蓝牙设备

阐明:按照TI的文档要求,必要将固件分片发送至蓝牙设备,每一片数据的长度为取镜像文件中继续的16个字节,在头部拼接2字节的序列编号共18个字节。

全部进级规划分为以上两个流程模块,第一个模块主要为app筹备固件。 第二个模块为app将固件传输至设备 。这里主要解说第二个模块功能的流程。

进级应用到的办事与特性

//===在线进级办事搜索特性===

#define UUID_UPGRADE_SERVER@"F000FFC0-0451-4000-B000-000000000000"

//===在线进级数据交互特性===

//头特性,用于发送固件头数据,看护设备开始进级,头数据长度为16个字节

#define UUID_UPGRADE_Identify@"F000FFC1-0451-4000-B000-000000000000"

//block特性,用于分片发送固件数据,长度为2+16字节

#define UUID_UPGRADE_Block@"F000FFC2-0451-4000-B000-000000000000"

//状态特性,返回0时 代表进级成功

#define UUID_UPGRADE_Status@"F000FFC4-0451-4000-B000-000000000000"

流程先容:

UUID_UPGRADE_Identify 以下简称Identify

UUID_UPGRADE_Block以下简称Block

UUID_UPGRADE_Status以下简称Status

留意:以上3个特性皆必要订阅看护

[peripheral setNotifyValue:YES forCharacteristic:characteristic];

1、App写入头数据(CRC共16个Byte)至Identify特性开启设备的进级模式

2、Block特性返回要求发送的片数据编号(2个字节)

3、根据返回的数据编号a取对应的第a片数据,将编号(2Byte)+片数据(16Byte)以Block特性发送数据

4、Block特性返回下一片数据的编号

5、重复Block历程直到固件整个发送至设备

6、Status特性返回表示进级成功

数据阐明:

CRC---Identify特性开启进级模式的头数据,也是Block特性发送的第一片数据。数据长度为16个字节,在block特性中必要拼接2字节的编号至头部。(数据滥觞为固件中的第一片16字节数据)

来自TI文档的CRC头数据阐明表

屏幕快照 2018-01-24 上午10.41.45.png

在TI的进级规则中,我们不能将高版本的固件进级为低版本固件,当我们如斯操作时,Identify特性会直接返回响应的数据信息,而不触发block特性的看护,这样进级的流程就无法再进行。在CRC数据中,我们可以解析出响应的版本号,数据长度等信息。

来自TI文档的Status特性状态阐明表

屏幕快照 2018-01-24 上午10.53.35.png

全部进级历程中,只有当Status特性返回值为0时才表示进级成功。

踩过的坑和必要留意的地方

在TI的进级历程中,我们可能由于总总缘故原由导致进级掉败或者必要中断进级,这时假如没有响应的处置惩罚,我们每每无法再次进入进级流程。

1、在正常连接状况下当app中断进级时,必要给Block特性发送差错的数据编号和长度,此时设备会自动擦除Flash中已接管的数据,Status特性返回响应状态,否则无法再次进入进级流程。

2、断开连接状态下导致的进级中断,必要设备端自行检测并擦除数据,否则无法再次进入进级流程。

以上为TI蓝牙模块空中进级大年夜略的解说,关于详细的文件数据分片和代码实例可以留言问我。

您可能还会对下面的文章感兴趣: