ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

杰理 AW31N 踩坑复盘|休眠唤醒异常,从软件角度分析21

杰理 AW31N 踩坑复盘|休眠唤醒异常,从软件角度分析21 简介书接上文。先简单回顾一下哈。我们用 AW31N开发的一款产品应用场景为当设备充电或放电的时候会自动唤醒或者按下按键也会唤醒唤醒是有一个中断信号INT输出给AW31NAW31N检测到中断INT输入状态从休眠转换为工作状态中断INT唤醒信号是上升沿唤醒。设备正常充电或放电的过程中突然偶发一次AW313N没有唤醒此时按几下按键就又唤醒了很奇怪这个情况很难复现。这个问题很难复现要一直使用2-3天才会复现1次之后又会很难复现。从硬件角度分析了一波往下走着走着走不下去了卡住了今天我们从软件角度去分析一下看看能否找到新的突破点。一、打开平台log遇到这种问题没什么好方法打开平台log打印当问题复现的时候查看当前的log数据对比分析寄存器数据看看有什么异常。log打开如下图位置把AW31N的TX GND通过串口助手工具外接到电脑上开始测试经过2天不懈的努力终于复现到了满怀欣喜的去查看log信息复现的那台样机查看打印数据出问题的最后一次打印后前面能正常唤醒的打印是完全一样的所以目前看起来唤醒的设置是正常的。这个方法看起来行不通了于是我们想到了模拟测试。二、异常出现的规律随着异常出现的次数增加我们总结了规律大部分出现异常的应用场景有以下两种a.充满电之后过一晚上拔掉静置10分钟左右再接手机会不亮屏b. 放电放空一晚上接充电器充电会不亮屏。于是我们复测就有了侧重点重新梳理思路我们根据这个规律看能否更快的定位问题。三、模拟异常测试走到这一步整机来看目前无法定位问题那么我们分模块来定位问题。我们找了一块DEMO板把样机的中断脚INT单独拉出来把TX GND接到电脑上打开打印DEMO板的程序跑起来就是6s自动唤醒一次INT我们测试了两天总共测试了1万多次都没有复现看来此方法行不通破坏了硬件环境。好了能试的方法都试了我们回归代码本身静态分析一下吧。四、静态分析软件代码4.1 修改供电方式配置根据目前的现象和查看代码改了一些可疑的点芯片供电的方式配置的宏原理图是用IOVDD供电软件也配置成IOVDD供电。供电方式改为IOVDD供电要用USB重新烧录OTA不会擦除掉VM里面存的数据杰理建议是要改的不然会导致电压检测有问题 OTA不会擦除掉VM里面存的数据VM里面存了挺多东西的 具体你可以看id的枚举列表大概能看到。配置成IOVDD供电截图如下这个供电方式杰理的开发线上开发文档里面有专门介绍如下图这时发现VDDIO的电压等级配置的有点低可以适当调高一些。原本的等级配置电压是3.2V 3.4V修改成下图4.2 查看休眠函数AW31N的休眠函数休眠方式采用软关机方式是放在定时器里面操作的如下图对于单片机来说休眠函数不要放在中断里面操作要设置一个标志位在while循环里面去休眠。于是我们把控制休眠的函数从硬件定时器中断的函数里面改到主循环里面。改了之后经过实测给样机充电拔掉自己进休眠后会自动唤醒显示188再休眠这个现象很奇怪不知道是什么原因。通过硬件、软件的分析都没定位到问题所在最终测试发现问题还是会出现。那我们追溯一下软件版本履历看看这个现象是什么时候开始的。五、对比修改履历寻找规律刚好我们用AW31N做过一款产品已经走到了量产但是但是从来没出现过这种现象那我们用对比工具对比一下看看软件上有什么差异通过对软件框架的梳理发现两个项目差异点在RTC上当前出问题的项目样机使用了RTC外设AW31N的RTC外设是模拟出来的思索了一番发现这个RTC的方案可以优化把RTC的功能去掉之后依然不影响整机功能于是开始动手改吧。优化了一版之后整了12台样机测试测试了5天都没发现异常至此问题是出在这个RTC外设上虽然问题解决了但是根本的原因其实还是没有找到要想找到根本原因还是得找原厂来分析平台内部的逻辑。六、总结有时候分析问题就是这样要结合软、硬件的思维共同去分析尤其是没有充足的数据来定性是软件还是硬件问题的时候有些问题的表象看似软件分析找到问题背后的规律最后结论是硬件问题有些问题的表象看着像硬件问题最后结果是软件导致。所以没有十足把握的数据、信号来判断定性的时候不要贸然下结论更不要扯皮扯皮是最没有意义的浪费时间。
返回列表