查看: 1498|回复: 0

[原创] LPC43xx系列 (deep) power down 唤醒注意事项

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20098
最后登录
2024-5-1
发表于 2022-3-7 16:29:51 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2022-3-7 16:29 编辑

LPC43xx系列 (deep) power down 唤醒注意事项
1 问题描述
    LPC43xx系列在运行LPCOpen低功耗例程 misc_pmc_states时,遇到power down和deep power down这两种模式无法成功通过Alarm Timer唤醒问题,本文对该系列问题进行分析并提供了相应的解决方法。通过RTC唤醒同样存在相同问题和解决方案。 
2 原因分析
    唤醒失败的原因包括以下三方面:
    -  SRAM掉电问题lpc43xx系列在power down 模式下,只有8KSRAM不掉电,其它SRAM掉电。而从power down模式唤醒后,程序继续向后执行,并非reset, 所以应保证进入power down时,stack在不掉电的8K SRAM中,数据不丢失。 
    -  Alarm timer中断使能问题LPC43xx系列 Alarm timer中断使能不能立即生效,需要一段时间。如果进入低功耗前,没有成功使能,依然无法从低功耗模式下唤醒。
    - Downcounter寄存器问题LPC43xx系列,为了确保指定时间唤醒,需要判断设定值成功写入Downcounter寄存器。
    powerdowndeep powerdown这两种模式唤醒失败原因表格总结如下:

表格问题汇总.jpg

3 解决方法
    对于power down 唤醒失败需根据三种问题分别解决;
    对于deep power down 唤醒不存在数据丢失问题,因为从deep power down 模式唤醒后,程序重新复位执行,不需要之前的数据。所以解决方案跳过第一条,只需要3.2和3.3.
3.1 SRAM掉电问题解决方法
    如手册所示,LPC43xx系列Power-down模式下仅有8kB local SRAM中不会失电。注意:带内部flash 不带内部flash芯片的8K SRAM地址范围不同。
内部寄存器.png
    对于 LPC4330/LPC4350/LPC4370这类不带内部flash系列产品,此8K SRAM地址范围是0x10090000– 0x10092000(8KB)地址范围, 而LPC4337/LPC4367这类带内部flash的芯片地址范围是0x10088000 –0x1008A000(8KB)时.将stack放到此8KSRAM区域就可以解决丢失数据的问题。
以LPC4350为例,在MCUXpressoIDE中设置方法如下:

    1 按 Project \ Properties \ C\C++ Build\MCU settings路径找到以下界面,单独定义此8K SRAM,地址为0x10090000,大小设置为0x2000。
SRAM设置1.jpg
    2 进入Project \ Properties \ C\C++ Build \Settings\MCULinker\Managed Linker Script路径,将Heap and Stackplacement切换为MCUXpressoStyle,并将Stack区域改为上一步所设置的SRAM。
空间地址设置2.jpg
    此时,SRAM区域失电问题设置完成。

3.2 Alarm timer中断使能问题解决方法
    为确保使能ATarm timer 中断,在其后添加while循环查询,直到成功使能。以src\pmc_states.c路径进入函数,在相应case模式的Chip_ATIMER_IntEnable(LPC_ATIMER);函数语句之后添加while((LPC_ATIMER->ENABLE& 0x01) != 0x01){}。
代码1.jpg

3.3 Downcounter寄存器写入问题解决方法
    此问题解决方案与3.2类似,仍以src\pmc_states.c路径进入函数,在相应mode的case中(与3.2位置一致)找到LPC_ATIMER->DOWNCOUNTER= RTC_ALARM_TIME*1000;
    在其后添加while判断语句:
while(LPC_ATIMER->DOWNCOUNTER != RTC_ALARM_TIME*1000);
    如下图。
Downcounter .jpg

4 验证注意事项
    在没有内部flash 开发板上测试(如:LPC4370,LPC4350…)时,例如Hitex LPC4350Evaluation board,需要将启动配置为外部 flash 启动,参考图片如下。
边上flash启动.png
    在启动时需要将引脚P2_9,P2_8,P1_2,P1-1设置为低低低高的形式,以SPIFI形式启动。跳线设置如图。
Jump改.jpg

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-5-2 05:38 , Processed in 0.121194 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表