常见问题答疑
1. 名词/流程说明
1.1 单备份OTA与双备份OTA的区别
类型 |
单备份 |
双备份 |
---|---|---|
存储 |
除了工程所需支持空间,
额外增加loader所需的空间即可
|
需要工程所需支持空间 * 2 |
升级 |
需要断开回连一次 |
无感升级, 无需回连 |
流程 |
下载loader -> 设备重启(运行loader)->
回连设备 -> 升级固件
|
升级固件 |
安全 |
有几率需要强制升级(蓝牙断开、APP杀死中止OTA等) |
无安全风险 |
成本 |
较低 |
较高 |
Warning
双备份方式的产品暂时不能通过OTA, 变成单备份OTA的产品。只能通过线刷方式, 才能改变OTA方式。
1.2 Boot Loader的作用
Warning
Boot loader需要根据配置决定是否走认证流程。
目前loader仅支持BLE通讯
loader仅有OTA功能的UUID服务
2. 接入问题
2.1 蓝牙设备已连接, 为什么调用OTA库接口返回错误, 4114(0x1012), 设备未连接
设备未连接
的意思是OTA库没有初始化成功, 没有获取到设备信息。设备已连接
状态进行RCSP协议初始化和同步设备信息等操作。Warning
设备断开
也需要实时传入OTA库, 对相关设备的资源进行释放, 否则可能影响下一次的OTA库初始化。
2.2 错误码: 12290(0x3002), 发送数据失败
BluetoothOTAManager#sendDataToDevice(device, data)
的返回结果2.3 发送数据成功, 却没有收到回复数据
一问一答
的方式进行MTU分包
和 队列式发数
, 具体参考下Demo的 SendBleDataThread
2.4 错误码: 12295(0x3007), 发送数据超时
一问一答
的机制。发送命令超时
的错误。MTU分包
和 队列式发数
, 具体参考下Demo的 SendBleDataThread
Warning
OTA库会根据数据结构解析属于OTA流程的命令, 可以直接传入裸数据。
2.5 错误码:20481(0x5001), 设备认证失败
设备已连接
状态并设置开启设备认证的条件。开启设备认证
, OTA库也是 开启设备认证
, 反之, 亦然。2.6 错误码:12296(0x3008), 回复失败状态
3. OTA问题
3.1 升级失败,错误码: 12299(0x300B), 等待命令超时
20秒
仍然没有请求下一包数据, OTA库就会报错。MTU分包
和 队列式发数
, 具体参考下Demo的 SendBleDataThread
Warning
这种情况, 需要先排除SDK端的问题, 然后由设备端查找问题。
3.2 升级失败,错误码: 16392(0x4008), 升级程序正在进行
startOTA
接口, SDK会返回 “升级程序正在进行” 的错误。3.3 升级失败,错误码: 16385(0x4001), OTA升级失败
OTA过程中, 设备端或SDK端返回OTA失败错误。
Warning
此情况造成的原因较多, 需要附带上打印日志。
输出打印日志, 参考: 调试说明
3.4 升级失败,错误码: 16386(0x4002), 设备低电压
设备端判断电量过低, 不允许进行OTA升级。请将设备充电到合适电量, 再进行OTA升级。
3.5 升级失败,错误码: 16387(0x4003), 升级文件错误
MTU分包
和 队列式发数
, 具体参考下Demo的 SendBleDataThread
Warning
此情况造成的原因较多, 如果以上步骤不能解决问题, 请联系对应SDK负责人进行询问。需要附带上打印日志。
输出打印日志, 参考: 调试说明
3.6 升级失败, 错误吗: 16389(0x4005), 数据校验失败
MTU分包
和 队列式发数
, 具体参考下Demo的 SendBleDataThread
3.7 升级失败, 错误码: 16396(0x400C), 升级文件的固件版本一致
升级文件的版本号与当前设备的固件版本号一致, 不允许升级。
3.8 升级失败, 错误码: 16397(0x400D), TWS未连接
TWS耳机未进行TWS配对, 不允许升级。
3.9 升级失败, 错误码: 16399(0x400F), 相同文件
升级文件与当前设备的固件内容一致, 不允许升级。
3.10 升级失败,错误码: 16401(0x4011), 回连设备超时
isUseReconnect
是否走自定义回连设备流程。SDK默认内置回连设备流程。onNeedReconnect
回调。onNeedReconnect
回调设备使用新回连方式, 设备端会进行BLE地址变换Byte 0 |
Byte 1 |
Byte 2-3 |
Byte 4-8 |
Byte 9 |
Byte 10-15 |
---|---|---|---|---|---|
长度 |
类型 |
VID |
标识 |
版本号 |
Payload(原BLE地址) |
0x?? |
0xFF |
0xD605 |
ATOLJ |
0x00 |
??:??:??:??:??:?? |
长度
: 类型 + VID + 标识 + 版本号 + Payload 的长度类型
: 固定0xFF, 厂商自定义数据VID
: 芯片厂商ID, 默认是0xD605(小端), 表示”杰理科技”标识
: 过滤标识, “ATOLJ”(小端), 表示”JLOTA”版本号
: 0x00Payload
: 有效数据, 根据 版本号
而改变onNeedReconnect
回调的原BLE地址, 与广播包的原BLE地址一致对比, 如果是一致, 则该广播包的设备是需要回连的设备。Warning
3.11 升级失败, 错误码: 16404(0x4014), 设备处于设备双连模式
升级设备处于 设备双连模式, 不允许升级。
3.12 升级失败, 错误码: 16390(0x4006), 加密key不匹配
3.13 升级失败, 错误码: 20484(0x5004), 未找到升级文件
4. 其他问题
4.1 可以同时使能两个Characteristic, 会有影响吗?
没有影响。
Warning
使能多个
Characteristic
, 不能并发执行,需要队列式执行。等一个Characteristic
使能结果回调,再执行下一个。单备份OTA,回连设备,处于loader状态,设备仅有OTA的UUID服务,不能进行多个
Characteristic
使能
4.2 OTA升级的时候为什么有两次进度0-99的变化呢?
下载资源
和 升级固件
。onProgress
回调type, 表示升级进度的类型。