【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


勇敢牛牛不怕代码难
Posts: 27

开发包描述:蓝牙 Mesh 设备开发包 描述TuyaOS BLE mesh node sdk TuyaOS 版本3.5.0
组件开发包tuyaos-subdev-mesh_0.0.29_tlsr825x_smesh_mesh_common_1.2.14

出现的现象: 推送OTA 更新之后会有50%的几率会显示升级失败;失败现象都是还没有开始“更新中”的进度条

在SDK的基础上 添加一个5ms定时器中断来检测一种通信协议与模拟信号输出;为了与OTA更新不冲突,在检测OTA 开始的时候 ,我会关闭定时器中断。
如下:
if(ota_status) //-------检测OTA 任务是否开始 ; 开始;1 未开始:0//
{
tkl_timer_stop(0); //开始关闭定时器中断//
}
但是现在出现失败的情况很奇怪,ota_status 不会变成1,
我尝试在 app_ble_data_recv函数下的CASE TAL_BLE_EVT_WRITE_REQ 下添加了以下这个函数来关闭定时器中断,但是也会有时候跑不进来,手机端会显示OTA失败。
case TAL_BLE_EVT_WRITE_REQ:
tal_main_debug("BLE TAL_BLE_EVT_WRITE_REQ");
if(event_last_type != TAL_BLE_EVT_WRITE_REQ)
{
tkl_timer_stop(0); //关闭定时器中断//
tal_sw_timer_stop(countdown_sw_timer);
}
tal_ble_ota_data_recv(p_event->ble_event.write_report.report.p_data, p_event->ble_event.write_report.report.len);
break;
请问下大家有什么解决方案???
关于5MS的定时器中断因为需要通信对于时序要求比较高是必须的。

 ! Message from: 勇敢牛牛不怕代码难
User avatar
joey_nobug
Posts: 144

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

出现失败的时候,设备有连接成功的 事件 推送上来吗?
如果没有的话,有可能是 高频的中断影响了蓝牙的连接流程,尝试先不开硬件定时器 对比下,看是否是这块逻辑的影响

Talk is cheap, show me the code.
勇敢牛牛不怕代码难
Posts: 27

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

1.蓝牙连接是成功的,因为在 app_ble_data_recv()函数会打印连接的状态;
tal_main_debug("BLE connect");
但是失败的时候会出现的蓝牙的状态也是会反复BLE connect 和 BLE disconnect reason 13;
2.如果在不开硬件定时器中断的情况下,我的用户程序基本是不工作的,我尝试OTA,成功率是相对与开硬件定时器中断的高;

勇敢牛牛不怕代码难
Posts: 27

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

joey_nobug 2023年 May 29日 10:46

出现失败的时候,设备有连接成功的 事件 推送上来吗?
如果没有的话,有可能是 高频的中断影响了蓝牙的连接流程,尝试先不开硬件定时器 对比下,看是否是这块逻辑的影响

1.蓝牙连接是成功的,因为在 app_ble_data_recv()函数会打印连接的状态;
tal_main_debug("BLE connect");
但是失败的时候会出现的蓝牙的状态也是会反复BLE connect 和 BLE disconnect reason 13;
2.如果在不开硬件定时器中断的情况下,我的用户程序基本是不工作的,我尝试OTA,成功率是相对与开硬件定时器中断的高;
3.如果是因为高频中断影响了蓝牙连接进程,但是在APP控制方面是没有太大问题;而且OTA开始时我还会关闭中断

有一个比较大的疑问“为什么是OTA更新中进度条还没有开始的时候就失败了,在我的程序中OTA开始的FLAG也就一直没有改变状态导致去关闭中断”

User avatar
joey_nobug
Posts: 144

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

勇敢牛牛不怕代码难 2023年 May 29日 11:05
joey_nobug 2023年 May 29日 10:46

出现失败的时候,设备有连接成功的 事件 推送上来吗?
如果没有的话,有可能是 高频的中断影响了蓝牙的连接流程,尝试先不开硬件定时器 对比下,看是否是这块逻辑的影响

1.蓝牙连接是成功的,因为在 app_ble_data_recv()函数会打印连接的状态;
tal_main_debug("BLE connect");
但是失败的时候会出现的蓝牙的状态也是会反复BLE connect 和 BLE disconnect reason 13;
2.如果在不开硬件定时器中断的情况下,我的用户程序基本是不工作的,我尝试OTA,成功率是相对与开硬件定时器中断的高;
3.如果是因为高频中断影响了蓝牙连接进程,但是在APP控制方面是没有太大问题;而且OTA开始时我还会关闭中断

有一个比较大的疑问“为什么是OTA更新中进度条还没有开始的时候就失败了,在我的程序中OTA开始的FLAG也就一直没有改变状态导致去关闭中断”

没有进度条就失败了这种情况,是手机已经连接好设备了,但是 app_ble_data_recv 回调里也没有数据吗?

Talk is cheap, show me the code.
勇敢牛牛不怕代码难
Posts: 27

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

joey_nobug 2023年 May 29日 16:20
勇敢牛牛不怕代码难 2023年 May 29日 11:05
joey_nobug 2023年 May 29日 10:46

出现失败的时候,设备有连接成功的 事件 推送上来吗?
如果没有的话,有可能是 高频的中断影响了蓝牙的连接流程,尝试先不开硬件定时器 对比下,看是否是这块逻辑的影响

1.蓝牙连接是成功的,因为在 app_ble_data_recv()函数会打印连接的状态;
tal_main_debug("BLE connect");
但是失败的时候会出现的蓝牙的状态也是会反复BLE connect 和 BLE disconnect reason 13;
2.如果在不开硬件定时器中断的情况下,我的用户程序基本是不工作的,我尝试OTA,成功率是相对与开硬件定时器中断的高;
3.如果是因为高频中断影响了蓝牙连接进程,但是在APP控制方面是没有太大问题;而且OTA开始时我还会关闭中断

有一个比较大的疑问“为什么是OTA更新中进度条还没有开始的时候就失败了,在我的程序中OTA开始的FLAG也就一直没有改变状态导致去关闭中断”

没有进度条就失败了这种情况,是手机已经连接好设备了,但是 app_ble_data_recv 回调里也没有数据吗?

按照这个流程“检查更新中--->更新中———>进度条开始有变化-->更新完成”
没有进度条的就是这样“检查更新中--->更新中———>”进度条没有变化等待一会就会出现失败; app_ble_data_recv 函数回调的只有 BLE connect 和BLE disconnect reason 13 ;不会跳到app_ble_data_recv的 case TAL_BLE_EVT_WRITE_REQ中。

Code: Select all

VOID app_ble_data_recv(TAL_BLE_EVT_PARAMS_T *p_event){
    STATIC UINT8_T event_last_type = 0;
    switch(p_event->type) {
        case TAL_BLE_EVT_PERIPHERAL_CONNECT:
            tal_main_debug("BLE connect");
            app_ble_connect_state_set(1);
        break;
        case TAL_BLE_EVT_DISCONNECT:
            tal_main_debug("BLE disconnect reason:%x", p_event->ble_event.disconnect.reason);
            app_ble_connect_state_set(0);
        break;
        case TAL_BLE_EVT_ADV_REPORT:
            tal_rssi_test_ble_adv_recv(p_event->ble_event.adv_report.p_data, p_event->ble_event.adv_report.data_len, 
                                            p_event->ble_event.adv_report.peer_addr.addr, p_event->ble_event.adv_report.rssi);
        break;
        case TAL_BLE_EVT_WRITE_REQ:
        if(event_last_type != TAL_BLE_EVT_WRITE_REQ)
        {
            tkl_timer_stop(0);
            tal_sw_timer_stop(countdown_sw_timer);
        }
            tal_ble_ota_data_recv(p_event->ble_event.write_report.report.p_data, p_event->ble_event.write_report.report.len);
        break;

    default:
    break;
}
event_last_type = p_event->type;
}
User avatar
joey_nobug
Posts: 144

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

能否复现一下问题,然后APP 内 设置->关于->上传日志,然后把截图站内信发我下,我找APP开发的同事协助排查下。注意备注下复现操作的时间点

Talk is cheap, show me the code.
User avatar
joey_nobug
Posts: 144

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

APP 开发同事回复是 请求设备信息的命令没有回复,这个是 OTA 的第一条数据,可能因为 5m 周期的 timer 影响了蓝牙中断导致此条数据丢包,影响了接下来的 OTA 逻辑。
此条数据包没有回复的话,是没有重传逻辑的

Talk is cheap, show me the code.
勇敢牛牛不怕代码难
Posts: 27

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

joey_nobug 2023年 May 30日 15:52

APP 开发同事回复是 请求设备信息的命令没有回复,这个是 OTA 的第一条数据,可能因为 5m 周期的 timer 影响了蓝牙中断导致此条数据丢包,影响了接下来的 OTA 逻辑。
此条数据包没有回复的话,是没有重传逻辑的

请求设备信息的命令没有回复,这个是 OTA 的第一条数据 ;这个指令是多少。我查看下详细的内部信息。
这个基本每次重试都是失败的,但是控制功能又都是正常的。

NICE
Posts: 95

Re: 【求助】【TuyaOS OS】使用蓝牙 Mesh 设备开发包 TuyaOS 版本3.5.0 TLSR825X OTA 更新经常性会失败

你好,请问问题解决了吗?解决的话我们就关闭该问题了。关于OTA的指令可以在关闭高频定时器的环境下正常OTA时打印收到的app的每一条数据做个对比。

Post Reply