SYD8801 OTA说明【提高OTA速度】【手环方案OTA方法】
SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.syd-tek.com/
SYD8801 OTA相关说明
SYD8801的OTA原理是主机通过特定的UUID通道发送OTA升级文件的数据到SYD8801中,然后SYD8801把主机发送过来的数据保存到芯片内部的flash空间中!
要使用SYD8801的OTA功能,要进行的操作十分简单,主要是三步:
1.在代码中加入《ota.c》
2.在ble_gatt_write函数中增加对BLE_SERVICE_UUID_OTA_READ_WRITE的OTA UUID通道的处理
3.在service.txt中加入OTA的主要服务以及相关配置
代码中修改如下:
UUID配置如下:
此时手机连接上蓝牙后可以用master看到OTA服务的相关配置如下:
4.修改蓝牙广播名或者修改APP识别的设备广播名使APP识别的设备名称和要升级的设备广播名称一致,这里既可以修改蓝牙设备的广播名,也可以修改APP是被的设备名称。
A.通过修改蓝牙广播名称实现名称一致:
A1.
A2.
B.通过修改APP识别的设备名称实现名称一致:
目前SYD官方提供的OTA手机端DEMO是通过搜索“UART1”或者“UART2”这两个特定蓝牙广播来进行连接并且执行OTA流程的,所以要现在代码中修改蓝牙的广播名为“UART1”或者“UART2”。打开APP后界面如下:
连接上之后UPDATE按钮变成黑色可点击,这时候点击UPDATE按钮将进入OTA流程,连接上后界面如下:
按下UPDATE按钮进入连接流程后界面如下:
OTA更新完成后UPDATE按钮将变灰色,EXIT按钮将变成黑色并可点击,按下该按钮退出该APP,注意:这里只是把数据传输并且写入flash完成了,但是是不是要立即复位重启,要看SYD8801代码中的相关逻辑,代码中可以调用SystemReset函数重启设备!升级完成后界面如下:
升级完成后新的程序往串口输出不一样的信息,代表OTA升级完成!
这里上传以上内容的SYD8801端源代码:http://download.****.net/detail/chengdong1314/9920219
手机APP端源代码请和官方咨询索要!
提高OTA速度
在上文中说到了SYD8801的OTA流程,但是经过实际测试之后会发现用上面的程序OTA的速度不是很理想,主要是因为OTA的时候蓝牙速度不是很快,比如SYD8801的公版手环方案在连接上后会进行降低功耗也就是降低蓝牙速度的操作,所以这里在OTA之前必须要进行提升蓝牙速度的操作!提升SYD8801速度相关文章请看:http://blog.****.net/chengdong1314/article/details/68941988
最简单的办法是在OTA升级流程的第一步,也就是ota.c中的ota_cmd函数的“case CMD_FW_ERASE:”分支下调用提速函数:BLSetConnectionUpdate(0);其中传入的参数0代表要把连接参数设置为OTA状态;这种方法能够提速,但是提速会有一点延迟,看到的速度将是先慢后快!
如果要上面APP控制OTA的提速流程,保证开始OTA的时候已经提速完成,这里可以通过命令的形式来做,方法如下:
这里的思路是在OTA流程里再增加一个提升功耗的命令,当然也可以发送其他命令进行提速,只要达到提高蓝牙速度的命令即可,比如SYD8801手环方案通过FC命令提速!
SYD8801端代码修改如下:
1.在OTA命令处理函数ota_cmd中增加提升功耗的分支CMD_BLE_SPEED,如下:
2.增加OTA提速处理函数CMD_BLE_SPEED,这里调用SetOtaConnectionUpdate函数提升蓝牙速度,如下:
3.增加OTA提速命令代码宏以及返回结构体:
4.在OTA完成的时候应该使用SystemReset命令进行软复位,但是最好在调用该命令后进行适当的延时,复位命令相关内容请看文章:http://blog.****.net/chengdong1314/article/details/73929998,如下:
到这里OTA提速流程SYD8801端代码修改完毕!
APP端代码修改如下:
1.在OTA处理函数ProcessOTA中增加OTA提速命令的调用,如下:
void ProcessOTA() { 。。。。。。。。。。。。。。。。。。。。。。。。。 OTA_Speed_BLE(); OTA_Erase_Flash(); WriteFlash_All(ReadData); 。。。。。。。。。。。。。。。。。。。。。。。。。 EnableButton(Exit_button,true); }2.增加OTA提速处理函数OTA_Speed_BLE,如下:
public void OTA_Speed_BLE() { byte [] WriteData = new byte[2]; WriteData[0] = CMD_BLE_SPEED; WriteData[1] = 0x00; Current_Command = CMD_BLE_SPEED; Log.i(TAG, "Process OTA"); writeCharacteristic(WriteData); readCharacteristic(); }3.增加OTA提速命令代码全局变量:
至此安卓APP端代码修改完毕!
根据上面提及的测试流程测试结果截图如下:
这里可以看到单OTA流程完成后确实有软复位的操作!
至此OTA提速流程完毕!
这里上传本节提到的SYD8801端源代码:http://download.****.net/detail/chengdong1314/9923012
因为android-studio的安装包太大,所以这里上传到百度云盘,请从如下地址下载:http://pan.baidu.com/s/1dFw7vCt
这里上传测试APP:http://download.****.net/download/chengdong1314/9957566
手机APP端源代码请和官方咨询索要!
手环方案OTA方法
目前SYD官方的手环方案APP支持了OTA功能!
IOS端OTA流程如下:
Android端OTA流程如下:
1.把OTA升级固件拷贝到手机主目录下,注意这里是主目录
2.打开APP连接上蓝牙,选择OTA文件并确认:
3. 选择OTA文件后将进入OTA流程,如下:
4.进度条走完后,OTA流程结束,程序OTA成功,程序自动复位启动,程序已经改变了: