手表端
ota标志位怎么置,才能重启后进入ota。
nor方案代码看dfu_ctrl.c nand方案代码看dfu_ctrl_ext.c

资源/数据异常导致设备一开机就,进入异常ota升级救砖
资源出现问题,或者bug导致机器变砖。
可以加个策略规避下资源异常导致无限重启变砖的问题,异常重启多少次,进入ota。
开机致标志位,到正常界面后清除。累计标志位5次(或更多/避免产线焊电池导致进入ota模式)进入异常ota模式。

ota手表打印dfu_link_sync_check error排查方向
目前遇到的都是app没发数据了,需要排查app。
看图中log是有客户的ble消息,可以重点排查是不是app处理其他ble服务去了。

ota的时候,客户有私有协议交互。会导致我们的ota服务出现异常,sdk会停止送数。
1)其他ble服务影响:手机手表都不要有,包括ota service之外的读写,连接参数更新 send error notify error组包错误 2)app切后台(app在后台时间长了,被系统杀掉,会停止发包)
3)手机灭屏(灭屏,app在后台被杀。会停止发包)
4)手机超时未发包(处理其他逻辑去了)
ota时要规避弹窗,读写文件系统,大小核通信,最好关闭sensor,闹钟等
ota是裸写,如果有弹窗。可能访问资源出现异常。访问的资源地址可能变了,可能没了。 ota时读写文件系统也是一样的,由于是裸写,会导致ota资源时,文件系统出现变化。如果正在ota时,有其他代码来改动了,会导致ota数据效验失败。
全量ota跟非全量ota
对于有修改ota相关代码的客户需要注意,非全量ota不会动到除app外的dyn/root/music等分区。所以有其他数据记录写flash没什么大影响。
但是对于全量升级,有ota到dyn/root/music分区。ota时如果不停止其他的写操作,会导致写flash出现问题。
有客户遇到ota没做区分,在ota完重启前写了数据到flashdb。导致文件异常



支持断点续传的OTA软件升级过程中出现重启,重启之后无法进行升级
出现如下错误:

需要确认是否有如下修改,如果没有,需要加上:

修改flash分区后,怎么ota
注意: 修改flash分区后,ota只建议软件调试阶段使用。量产/批次操作不建议
nor方案修改flash分区后,怎么ota
1.nor方案先确认你的版本是否有DFU_DISABLE_IMAGE_LENGTH_CHECK这个宏,以及是否配置为1 如果有DFU_DISABLE_IMAGE_LENGTH_CHECK这个宏,有并且配置为1,可以直接调过这步
需要先打开这个宏编译,先升级一次hcpu。去掉长度限制


2.修改flash分区后,需要先升级一次ota_manager。在整包升级
nand方案修改分区后,怎么ota
1.每次升级前,先升级一个未改变分区的中间版本,实现需要修改地址分区的对应weak函数.
先确认你的代码是否有以下弱函数,没有的先合入patch才能支持。
uint32_t dfu_res_addr_get();
uint32_t dfu_dyn_addr_get();
uint32_t dfu_music_addr_get();

2.然后再进行更改分区的升级
手机端
ota后(手表重启后)app回连手表无法连接
这个目前只在IOS系统遇到过,iOS 在刚打开蓝牙中心连接手表时,手表可能会disable service,手机端会收到 serviceModified 事件,在这个事件之后重新发现服务。
app 里面有轮询检查连接状态,当前失败了,也可以下一个轮询机会再连接
原因:思澈手表固件ble连接后,会跟新服务参数。app连接后立马来发现,就会出现发现服务超时/异常。
iPhone8以前的frequency可以设成5(这个会出现ble传输异常,app不发数据导致手表主动断连)
原因:在早期的iphone手机上,它不支持持续的写入20个数据切片,固件端收包错误,断开连接。
判断一下机型低于等于iphone 8,把回复频率降低到5能得到改善。
iphone出现组包异常时,也可以适当降低默认的frequency 参数,来提高稳定性

手机跟app进度对不上
1.检查手表代码,看使用的是总传输进度,还是单个bin的进度
设备固件进度份两种:
单个bin文件进度:DFU_PROGRESS_PART
单次升级所有文件总进度:DFU_PROGRESS_TOTAL

2.看app传输的bin文件跟要升级的bin文件是否匹配
有客户出现过全量升级后,app缓存的压缩包没清除。
下次ota时只升hcpu时导致文件异常(多了其他bin文件)。ctrl_packet.bin跟客户要升级的包对不上。
手机有发包,但是没发出来。手表超时15S没收到包主动断连
app怎么排查:
1.看手机log.cat。出问题的事件点,在做些什么。思澈dfu服务可以搜索sifli-DFU标志

2.看手机hci_log。出问题的事件点,在做些什么

一般是app在ota时有做其他事情,导致发包中断
也有可能是手机系统宽带被其他外设占用,如wifi,蓝牙播放
手表超时15S没收到手机的包就会断连
1.修改建议:要么让手机尽量不去做其他的,要么就把手表的下载超时时间改长。增加容错时间
升级差分资源失败
app提示:load list file fail DFU end with 133
需要检查差分包文件跟list列表里的记录能否对齐,list有重名,但是实际bin文件无法存在重名文件。

ota偶现时间长
这是客户经常反馈的问题,这个问题需要抓空中包,手表hci log看是什么影响了传输速度
1.看ble连接间隔(是不是高速模式没切换成功)建议进入ota时由手机先发起
手表发起的连接参数更新请求,手机不一定响应。
ios跟Android的最小连接间隔也不一样
2.app配置的frequency(回包频率)
3.手机系统宽带被其他外设占用,如wifi,蓝牙播放(这种行为就跟手表没关系,客户行为无法约束)
nand差分包,app里是哪个类型
nor方案不支持差分包,不用考虑
NAND方案 :
●IMAGE_ID_HCPU = 0
●IMAGE_ID_LCPU = 1
●IMAGE_ID_HCPU_PATCH = 2
●IMAGE_ID_FS_ROOT = 3
●IMAGE_ID_LCPU_PATCH = 4
●IMAGE_ID_FS_DYN = 5
●IMAGE_ID_FS_MUSIC = 6
●IMAGE_ID_NAND_RES 差分包资源
NOR方案:
●DFU_IMG_ID_HCPU 0,HCPU代码
●DFU_IMG_ID_LCPU 1,LCPU RAM 代码,前提是启用了FLASH 4
●DFU_IMG_ID_LCPU_ROM_PATCH = 2
●DFU_IMG_ID_RES 3,资源
●DFU_IMG_ID_FONT 4, 字体
●DFU_IMG_ID_EX = 5
●DFU_IMG_ID_OTA_MANAGER 6,升级ota manager本身
●DFU_IMG_ID_TINY_FONT 7, TINY 字体
NAND方案的●IMAGE_ID_NAND_RES容易跟NOR方案的●DFU_IMG_ID_RES搞混
Android nand差分包类型如下图所示

ios nand差分包类型如下图所示

–