进了睡眠模式时,电流达不到规格书标称的电流值时,需要检查是否有哪些因素导致睡眠异常。 如进入不了睡眠 ,功耗偏大等等 (1)[PMU] prevent_status=00000200 这里有任何一位置位,都不会进入睡眠状态,用于查看是哪个事件阻止睡眠。 (2)[PMU] wakeup_pin=00000000(cur_level=00000000 sleep_level=00000000) 这里主要是看哪个GPIO设置了唤醒功能,且处于唤醒电平状态。导致不能进入睡眠 (3)[PMU] pull_up=00100173(cur_level=00100173) pull_down=7FEFC000(cur_level=08450000) all_cur_level=08550773 这里主要查看是否有些IO口电平和内部上下拉的设置不匹配。如果不匹配,每个GPIO约有10uA的漏电。 (4)[PMU] clocking: CPU(48MHz) SRAM(FFFF) RTC(WDT) UART0 GPIO 这里主要观察开启了哪些外设或者,看看有没有要关而未关的。 参考功耗曲线图(电流测试自 6220A3) 举例分析I/O口电流漏电问题 1- 在Timer事件中,打印IO口状态 { ..... pmu_dump(printf) ..... } 2- Log info打印信息 [PMU] prevent_status=00000200 [PMU] wakeup_pin=00000000(cur_level=00000000 sleep_level=00000000) [PMU] pull_up=00100173(cur_level=00100173) pull_down=7FEFC000(cur_level=08450000) all_cur_level=08550773 [PMU] clocking: CPU(48MHz) SRAM(FFFF) RTC(WDT) UART0 GPIO 3- 分析打印IO的上拉漏电情况,如果上拉Mask位为1(上拉),Cur_LEVEL对应该的位置为0(低电平),则会漏电。 pull___up=(16进)00100173=(2进)0000 0000 0001 0000 0000 0001 0111 0011 cur_level=(16进)00100173=(2进) 0000 0000 0001 0000 0000 0001 0111 0011 如果发现外围低电平漏电: 需要修改对应位为和实际电平一致的下拉。 如上面没有发现电平不匹配漏电情况。 4- 分析打印IO的下拉漏电情况,如下下拉Mask位为1(下拉),Cur_LEVEL对应该的位置为1(高电平),则会漏电。 pull_down=(16进)7FEFC000= (2进)0111 1111 1110 1111 1100 0000 0000 0000 cur_level=(16进)08450000= (2进)0000 1000 0100 0101 0000 0000 0000 0000 如果发现外围高电平漏电: 需要修改对应位为和实现电平一致的上拉。如上面 GPIO16,初始化为下拉,实际高电平。因此会有漏电。 |