使用nordic芯片遇到休眠功耗的问题

  19年5月第一次接触nordic的芯片,用的是nrf51822,SDK版本12,比较老,在同事的代码框架上添加应用代码,功能测试OK了之后板子拿给硬件同事看了之后跟我说休眠的功耗大,记得跟我说有60uA,那时候代码大概长这样:代码由sdk12的某个ble demo改过来的,利用初始化的时候RTC注册了一个调用一次的5ms的应用程序,应用程序进入休眠的时候会关掉ed灯和外设,然后把当前的这个定时器任务关掉,然后再注册一个休眠前的任务(印象中是这样),然后在进入休眠。

那时候现象大概是这样,我发现休眠的时候我按 按键 居然表上看到电流会变化.....那应该是输入的IO脚在休眠的时候还工作,我先把它休眠的时候设为浮空,发现的确功耗减低了为16uA(印象中是这个值),然后看到有个更好的接口函数是把IO口设为默认状态(应该是高阻态),效果一样,然后为了证明这个东西我去翻了nrf51的specification,nrf51在休眠的时候IO口跟外设都会保持原来的状态

然后我烧录了这个程序,然后拿板子给硬件,第二天跟我说又有问题,休眠功耗为206uA(印象中的值),我惊呆了,啥子哦怎么改了更大,然后我就自己拿个表侧休眠电流,发现10次休眠有6-7次是16uA,剩下的就是206uA。懵逼,为啥有时候好有时候不好,多出来的这190uA又是哪里来的。

我把所有代码过了一遍,除了ADC没啥外设了啊难道休眠的时候有时候ADC没关掉?于是我在休眠前的deinit的代码里把关闭ADC的代码注释掉,然后测试休眠电流,测了10次都是206uA..... 起码可以证明这多出来的就是ADC没关引起的。

然后我把nrf_log打开 看串口打印出来的信息发现:由于休眠的任务开始时不会马上进入休眠会做一些例如检查是否需要写flash的操作所以这个handle可能会跑了2-3次才进入休眠,然后会跑一次关掉的那个应用程序任务的handle...有时候adc task的定时器到了刚好就执行了然后ADC外设又打开了,好吧我理解为:执行timer close的时候不会马上关掉需要一定的时间,所以我在进入休眠之前再调用一次deinit解决了这个问题。

发布了11 篇原创文章 · 获赞 0 · 访问量 110

猜你喜欢

转载自blog.csdn.net/weixin_39945910/article/details/104066153