手表端

ota标志位怎么置,才能重启后进入ota。

nor方案代码看dfu_ctrl.c nand方案代码看dfu_ctrl_ext.c

../../_images/user_ota.png

资源/数据异常导致设备一开机就,进入异常ota升级救砖

资源出现问题,或者bug导致机器变砖。

可以加个策略规避下资源异常导致无限重启变砖的问题,异常重启多少次,进入ota。

开机致标志位,到正常界面后清除。累计标志位5次(或更多/避免产线焊电池导致进入ota模式)进入异常ota模式。

../../_images/ota_err_flag.png

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。导致文件异常

../../_images/ota_off_flage.png
../../_images/ota_off_err.png
../../_images/ota_err_kvdb.png

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

  • 出现如下错误:

../../_images/Ota_err.png

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

../../_images/DFU_state.png

修改flash分区后,怎么ota

  • 注意: 修改flash分区后,ota只建议软件调试阶段使用。量产/批次操作不建议

nor方案修改flash分区后,怎么ota

1.nor方案先确认你的版本是否有DFU_DISABLE_IMAGE_LENGTH_CHECK这个宏,以及是否配置为1 如果有DFU_DISABLE_IMAGE_LENGTH_CHECK这个宏,有并且配置为1,可以直接调过这步

需要先打开这个宏编译,先升级一次hcpu。去掉长度限制

../../_images/ota_flash_menuconfig.png
../../_images/ota_flash_menuconfig2.png

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();

../../_images/ota_nand_flash_patch.png

2.然后再进行更改分区的升级

手机端

ota后(手表重启后)app回连手表无法连接

这个目前只在IOS系统遇到过,iOS 在刚打开蓝牙中心连接手表时,手表可能会disable service,手机端会收到 serviceModified 事件,在这个事件之后重新发现服务。

app 里面有轮询检查连接状态,当前失败了,也可以下一个轮询机会再连接

原因:思澈手表固件ble连接后,会跟新服务参数。app连接后立马来发现,就会出现发现服务超时/异常。

iPhone8以前的frequency可以设成5(这个会出现ble传输异常,app不发数据导致手表主动断连)

原因:在早期的iphone手机上,它不支持持续的写入20个数据切片,固件端收包错误,断开连接。

判断一下机型低于等于iphone 8,把回复频率降低到5能得到改善。

iphone出现组包异常时,也可以适当降低默认的frequency 参数,来提高稳定性

../../_images/ota_frequency.png

手机跟app进度对不上

1.检查手表代码,看使用的是总传输进度,还是单个bin的进度

设备固件进度份两种:

单个bin文件进度:DFU_PROGRESS_PART

单次升级所有文件总进度:DFU_PROGRESS_TOTAL

../../_images/ota_progress.png

2.看app传输的bin文件跟要升级的bin文件是否匹配

有客户出现过全量升级后,app缓存的压缩包没清除。

下次ota时只升hcpu时导致文件异常(多了其他bin文件)。ctrl_packet.bin跟客户要升级的包对不上。

手机有发包,但是没发出来。手表超时15S没收到包主动断连

app怎么排查:

1.看手机log.cat。出问题的事件点,在做些什么。思澈dfu服务可以搜索sifli-DFU标志

../../_images/ota_logcat.png

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

../../_images/ota_hcilog.png

一般是app在ota时有做其他事情,导致发包中断

也有可能是手机系统宽带被其他外设占用,如wifi,蓝牙播放

手表超时15S没收到手机的包就会断连

1.修改建议:要么让手机尽量不去做其他的,要么就把手表的下载超时时间改长。增加容错时间

升级差分资源失败

app提示:load list file fail DFU end with 133

需要检查差分包文件跟list列表里的记录能否对齐,list有重名,但是实际bin文件无法存在重名文件。

../../_images/ota_err_file_list.png

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差分包类型如下图所示

../../_images/ota_nand_res.png

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

../../_images/ota_nand_zipPatch.png