标签:通信 模块 errors nec sleep wak 浮点 rip wait
低功耗蓝牙应用对功耗要求越低越好,功耗越低电池续航时间就越长,用户体验就越好。当你发现你板子功耗偏高时,建议按照如下步骤进行自检:
1) 确认理论功耗值。BLE功耗跟广播间隔或者连接间隔是成正比关系的,所以20ms连接间隔下的功耗几乎是1s状态下的50倍!,单纯地问“1mA功耗高不高?”是没有意义的,必须结合特定的应用场景才有意义。不管是广播还是连接,特定的使用场景会有一个理论功耗值,大家可以访问网址: https://devzone.nordicsemi.com/power/,以获得你的使用场景下理论功耗多少,比如连接模式下,每1秒钟发20个字节的数据包,这种模式下理论功耗为:7.6uA
2) 确定板子漏电流。如果板子包含的元器件比较多,那么也有可能是其他非nRF5元器件导致的高功耗,比如传感器,codec,或者电路设计本身的问题等。为了确定高功耗是来自nRF5器件还是其他器件,根据自己的情况,有如下三个方法供你参考:一如果你的固件可以直接在Nordic官方DK上运行,那么你可以把你的固件直接下载到DK上,然后通过DK测量nRF5芯片的功耗,如果这个功耗正常,那么大电流应该是由其他非nRF5元器件引起的;如果这个功耗偏高,那么大电流的确是由nRF5芯片固件引起的,此时请参考后续操作步骤说明。二如果你的固件不能在DK上直接运行,那么可以让nRF5芯片进入深度睡眠模式(System OFF模式),此时nRF5芯片功耗只有零点几微安,nRF5芯片所有IO口将处于floating状态,此时再测量板子电流。如果板子电流恢复正常,那么大电流应该是由nRF5芯片固件引起的;如果板子电流还是不正常,那么大电流应该由其他非nRF5元器件引起的。关于如何进入深度睡眠模式,你可以参考工程:nRF5_SDK_15.0.0_a53641a\examples\peripheral\ram_retention\pca10040\blank\arm5_no_packs,或者参考ble_app_hrs工程中函数:sleep_mode_enter。三如果你的板子太复杂,无法按照上面两种方法来确定漏电流,那么只能将板子其他非必需元器件焊下来,只留下一个nRF5最小工作系统,然后再测量此时的板子电流是否正常。
3) 确定板子已经退出J-Link模式。如果板子一直是电池供电,那么在某些情况下,即使程序下载完成而且运行正常,此时板子有可能还处在J-Link模式。J-Link模式下板子会有2mA左右的额外电流。要退出J-Link模式,有2种方式,一是给板子进行上电复位,二是通过nrfjprog发出—pinreset(nRF51系列)或者—reset指令(nRF52系列)。两种方式都能让板子退出J-Link模式,从而进入应用模式。
4) 如果最终确认大电流的确是由nRF5芯片引起的,那么几乎可以肯定系统在进入idle模式(System ON模式)之前,没有关掉不需要的模块。模块没有关掉,它就一直在耗电,从而导致功耗过大。Idle模式下,如下模块会耗费比较多的电流,若允许建议全部关掉。
sd_app_evt_wait
无softdevice时进入idle模式的代码是:
__WFE(); // Clear the internal event register. __SEV(); __WFE();
这里我们顺便把进入sleep模式的函数也贴出来,供大家对比参考。有softdevice时进入sleep模式的函数是:
sd_power_system_off
无softdevice时进入sleep模式的代码是:
// Enter System OFF and wait for wake up from GPIO detect signal. NRF_POWER->SYSTEMOFF = 0x1;
GPIOTE_CONFIG_IN_SENSE_TOGGLE(false) //低功耗低精度IO口中断模式
/* Clear FPSCR register and clear pending FPU interrupts. This code is base on * nRF5x_release_notes.txt in documentation folder. It is necessary part of code when * application using power saving mode and after handling FPU errors in polling mode. */ __set_FPSCR(__get_FPSCR() & ~(FPU_EXCEPTION_MASK)); (void) __get_FPSCR(); NVIC_ClearPendingIRQ(FPU_IRQn);
标签:通信 模块 errors nec sleep wak 浮点 rip wait
原文地址:https://www.cnblogs.com/iini/p/9351048.html