【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

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


17394068840
Posts: 39

模组型号:BTCM
SDK版本:TLSR8250_TuyaOS-3.8.3
问题描述:
1.刚通电手动开机运行正常,可添加设备,可手动开关,可手机控制开关。
2.静置几分钟后,有个别设备会从手机上离线,并再也无法控制,此时手动按键控制设备,设备上的LED指示灯不亮了(正常情况下有按键就会亮起),但是神奇的是有些设备虽然灯不亮但开关还可以被手动控制;
3.有些设备比较惨一些,即使断电放完电在上电,也无法运行,手动控制也无反应,指示灯也无反应,手机也显示离线。对于这种完全死机的设备,我重新用仿真器原厂工具烧写程序,发现可以本地控制了,但是无法被手机发现(这种情况我遇到过,是因为授权信息丢了),然后我用 涂鸦生产解决方案云模组烧录。好了,又可以被发现和控制了,但是下一次出现这种情况不一定是多久之后。

分析经过:

问题出现已经有几天了,这几天我们做了各种测试,发现一些规律,但无法确定问题:
1.发现当天线和电源线缠在一起时,问题复现的比较快,当天线和电源线分开时,问题有的可以复现有的机器不复现,或很长时间后复现。1#设备
2.天线和电源线在一起不处理,使用telink原厂工具手动烧录带log程序,测试了十几个小时没有再复现。2#设备3#设备
3.天线和电源线在一起不处理,使用涂鸦生产解决方案工具烧录+授权带log程序,测试了几个小时后复现。5#设备
4.天线和电源线在一起不处理,使用telink原厂工具手动烧录不带log程序,测试了0.5小时后发生设备离线无法控制。5#设备

程序说明:1.开启了低功耗模式,2.使用1秒定时回调函数处理业务。3.在首次上电运行和检测到设备掉电是进行状态参数保存flash 4.电路中使用了触摸按键芯片。


Tags:
jinyuan
Posts: 81

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

关于您的问题:

  1. 设备确定死机后可以通过telink原厂的工具上的 PC的按钮,查看PC指针的地址在哪里,再通过打印出来的PC指针去 编译出来的list文件中找下大概死机的位置。

  2. 对于死机且无法复原的的芯片,可以用telink原厂烧录工具,通过快捷键 ctrl + m打开 Memory Access ,在第一行第三列选择FLASH ,然后len 512*1024,再在Data列中回车,可以把flash全部dump下来 , 看下flash的内容是否完整,是否出现篡改的情况。

  3. 把低功耗关闭后挂机测试 看是否有死机问题复现。

  4. telink平台的芯片每次休眠唤醒后会再执行一次 tuya_init_third ,这个函数里只需执行涉及内部外设初始化的代码(比如硬件IIC、GPIO、硬件SPI、PWM 等),其他的初始化代码不需要放到这里面,否则会出现重复初始化的情况。

17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

您好,感谢回复给的思路,这几天我们又做了很多测试发现以下问题:
1.PC指针无法确定具体代码位置,因为有些设备没有完全死机,有的可以手动开机。
2.测试发现一台程序区地址0开始4K区域全部擦除为FF。无法开机。
3.低功耗关闭后测试15台曾经出现过问题的设备,发现不在复现,也就是说可能和低功耗有关。
4.低功耗的tuya_init_third 代码内容如下截图。

Attachments
唤醒代码.png
程序被擦除.png
17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

具体函数内容如附件,都是一些GPIO初始化

Attachments
微信图片_20240501084653.png
微信图片_20240501084625.png
微信图片_20240501084558.png
微信图片_20240501084534.png
微信图片_20240501084451.png
微信图片_20240501084419.png
微信图片_20240501084248.png
jinyuan
Posts: 81

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

  • 关于前4K被擦除的现象, 这里再排查一个点:

烧录器固件版本:v3.4 (低于该本版本的固件,在Activate时,会导致flash的前4K被擦)
查询烧录器固件版本: 点击菜单上的 Help ,最下面有版本号显示。
烧录器固件更新方法:
1. help -> upgrade -> 点击“Load...”按钮;
2. 找到烧录器软件目录下的文件\release_v5.4.7\config\fw\Firmware_v3.4.bin;
3. 点击“Upgrade”按钮,进行更新升级;
4. 升级完成后,烧录器重新上电,再次读取烧录器固件版本确认。

  • 蓝牙广播间隔是多少?

  • init third 这部分的代码暂时没有发现什么问题。这里有一个建议,如果只需要给出高低电平不需要有输出能力的可以配置成上、下拉来实现,泰凌的IO 在休眠时虽然无法保持输出,但是上下拉状态还可以保持。

jinyuan
Posts: 81

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

上面关于查询烧录器固件版本有问题,需要修改: 点击菜单上的 Help -> Upgrade -> Read FW Version

17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

关于前4K被擦除,看了下,我烧录器 版本是3.1
那么有可能是烧录器版本造成了前4K被擦除。

2.我觉得这个问题跟低功耗有关,目前找了了20台极容易复现问题的设备,烧录了取消了低功耗后的程序5天没有再出现问题。
#define TY_ADV_INTERVAL 1000 //range: 2010240ms
#define TY_CONN_INTERVAL_MIN 180//180 //range: 7.54000ms
#define TY_CONN_INTERVAL_MAX 200//200 //range: 7.54000ms

STATIC VOID_T tuya_ble_update_conn_param_timer_cb(tuya_ble_timer_t timer)
{
if (tuya_ble_connect_status_get() == BONDING_CONN) {
TAL_BLE_PEER_INFO_T peer_info = {0};
peer_info.conn_handle = tuya_app_get_conn_handle();
TAL_BLE_CONN_PARAMS_T conn_param = {0};
conn_param.min_conn_interval = TY_CONN_INTERVAL_MIN4/5;
conn_param.max_conn_interval = TY_CONN_INTERVAL_MAX
4/5;
conn_param.latency = 1;
conn_param.conn_sup_timeout = 6000/10;
conn_param.connection_timeout = 0;
tal_ble_conn_param_update(peer_info, &conn_param);
}
}

广播的参数如上 ,请帮忙分析问题的原因,并给一个解决方案,我这边可以试一下,谢谢!谢谢!

jinyuan
Posts: 81

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

  • 了解广播间隔是为了确定设备是否会进入deepsleep ,如果广播间隔小于100ms则低功耗只会进入suspend。suspend唤醒后不会再执行init third。从现有的信息看是有进入init third
  • 对于初始化的内容,如果没有立即用到建议不初始化,到要使用的时候再初始化也来得及,比如adc,i2c。
  • 可以从ADC先入手,擦/写flash的时候会读取一次内核电压来确保操作的安全性,又因为该芯片的ADC只有一路,所以ADC实际上是复用的状态, 建议可以先将ADC及其相关功能先屏蔽下, 看看是否还很容易复现死机问题,如果是,则要优化ADC的使用逻辑,比如使用时init,使用完立即deinit。如果不是,则再考虑其他可能。
17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

感谢您提供的思路,昨天下午我们烧录了5台机器取消了ADC初始化和程序中的电压检测,一直运行到现在还是正常的,大约15小时了。这个问题可能跟ADC有关因为我们程序中做了检测电池电压低的时候自动关闭并保存参数。不过我们电路中做了二极管分离和1000UF电容蓄电,也就是检测二极管之前的电压跌落的时候立即保存参数到flash并关机,二极管之后有个1000UF电容理论上足够处理完这些动作了。 如果是跟ADC有关那么为啥关闭低功耗这个现象就没有了?还有程序应该怎么修改解决这个问题?

17394068840
Posts: 39

Re: 【求助】【TuyaOS OS】BTCM模块使用tuya OS开发的程序在小批量试产时遇到很多死机现象

电压检测程序和电源原理图见附件

Attachments
2.png
1.png
Post Reply