打印
[技术问题解答]

KL25切换为VLPR模式不成功

[复制链接]
2263|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flyriz|  楼主 | 2015-7-21 16:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大家好,我这几天在调试KL25低功耗方面的东西,发现进入VLPR总是不成功
首先在system_MKL25Z4.c文件中将头文件中的宏定义做如下修改,改成BLPE时钟模式

然后,再进入main函数后设置时钟分频,core&system clock = 4 MHz;bus&flash clock = 1 MHz;



再进入VLPR;这两个函数是直接从 [Kinetis] 手把手系列之官方例程讲解大全-Kinetis系列\第5-7篇:Kinetis KL25 低功耗模式\KL25 Sample Code 的文件里面复制过来的。




但是功耗没下来,大概在2.7mA,我查看(SMC->PMSTAT & SMC_PMSTAT_PMSTAT_MASK)里面的值的时候,是1,仍然留在RUN模式。
求教各位大神,哪里出问题了?

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-7-22 12:59 | 只看该作者
楼主你功耗测试点没有问题吧?
用的什么板子?
如果你直接用官方的KL25例程是否能够进入VLPR?

使用特权

评论回复
板凳
flyriz|  楼主 | 2015-7-22 14:23 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 12:59
楼主你功耗测试点没有问题吧?
用的什么板子?
如果你直接用官方的KL25例程是否能够进入VLPR? ...

我们自己做的。
但是这个代码我在KL25-FRDM上也试过的,功耗也差不多是这样。

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-7-22 14:24 | 只看该作者
flyriz 发表于 2015-7-22 14:23
我们自己做的。
但是这个代码我在KL25-FRDM上也试过的,功耗也差不多是这样。 ...

那应该是代码问题,你有没有用FRDM-KL25的代码跑官方进入VLPR模式的程序,然后,你测试功耗是VLPR的功耗吗?

使用特权

评论回复
5
flyriz|  楼主 | 2015-7-22 14:27 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 14:24
那应该是代码问题,你有没有用FRDM-KL25的代码跑官方进入VLPR模式的程序,然后,你测试功耗是VLPR的功耗 ...

测试功耗就是VLPR的功耗。
FRDM-KL25的代码跑官方进入VLPR模式的程序我试过,大概500uA,我现在是想把代码简化下来,流程应该就是这样子的吧。

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2015-7-22 14:52 | 只看该作者
基本思想是对的,简化后,你直接进入BLPE,然后把busclock输出,用示波器看看,你的时钟对不对。
另外,你的enter_vlpr()函数里面有没有被你动过?

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2015-7-22 14:55 | 只看该作者
还有一点,非常重要。
在操作进入低功耗之前,你SMC_PMPROT这个寄存器有没有控制过?
你仔细检查下,建议你进入低功耗的时候,先不管debug口,
然后单步走,看看使能SMC_PMPROT中AVLP位是否成功?
SMC_PMPROT这个寄存器是复位后一次操作的,所以如果你之前在启动文件中已经写过,比如都写0,那么后面你再使能,也是无效的在,这样也会导致进入VLPR失败。
以前很多网友不能进入相应功耗,就是忽略了这一点。
所以你自己检查下,看看你进入VLPR的函数中,使能AVLP位是否成功了?

使用特权

评论回复
8
flyriz|  楼主 | 2015-7-22 15:36 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 14:55
还有一点,非常重要。
在操作进入低功耗之前,你SMC_PMPROT这个寄存器有没有控制过?
你仔细检查下,建议你 ...

不能进入VLPR的原因找到了,RM文档中有一段很不起眼的话没看到:
在进入之前加上这一条代码就可以了: MCG->C2 |= MCG_C2_IRCS_MASK;    // select fast irc
现在enter_vlpr返回的值是0x4,说明是成功进入VLPR模式的。
但是有一个问题,功耗降低还是不理想啊,在不打开任何外设的情况下,功耗仍然有1.44mA.
是不是哪里还要设置呢?

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-7-22 15:44 | 只看该作者
本帖最后由 FSL_TICS_ZJJ 于 2015-7-22 15:50 编辑
flyriz 发表于 2015-7-22 15:36
不能进入VLPR的原因找到了,RM文档中有一段很不起眼的话没看到:
在进入之前加上这一条代码就可以了: MC ...

把你工程上传给我这边看看,你是使用外部8M晶振对吗。
或者,你把你现在的代码,放到FRDM-KL25的板子上测试下,看看是不是VLPR的功耗。如果同样的代码,自己的板子和官方板子的功耗不一样,那么就是板子的问题了。

使用特权

评论回复
10
FSL_TICS_ZJJ| | 2015-7-22 15:59 | 只看该作者
把你现在建的工程上传吧,我帮你把VLPR调的成功进入。

使用特权

评论回复
11
flyriz|  楼主 | 2015-7-22 16:08 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 15:44
把你工程上传给我这边看看,你是使用外部8M晶振对吗。
或者,你把你现在的代码,放到FRDM-KL25的板子上测 ...

KL25_LPR_TEST.zip (210.49 KB)

外部8M晶振,FRDM板子上也试过了,1.3mA多一点。
谢谢了!

使用特权

评论回复
12
奥德赛| | 2015-7-22 16:44 | 只看该作者
有可能cpu就没进入VLPR模式

使用特权

评论回复
13
flyriz|  楼主 | 2015-7-22 17:00 | 只看该作者
奥德赛 发表于 2015-7-22 16:44
有可能cpu就没进入VLPR模式

enter_vlpr返回的值是0x4,说明是成功进入VLPR模式的。

使用特权

评论回复
14
FSL_TICS_ZJJ| | 2015-7-22 17:41 | 只看该作者
flyriz 发表于 2015-7-22 17:00
enter_vlpr返回的值是0x4,说明是成功进入VLPR模式的。

你好。
配置MCG->C2 = (uint8_t)0x97U;
你选择的外部晶振的范围不对了。
RANGE0=High frequency range selected for the crystal oscillator .
不要选择为1X,这样功耗就下来了。

使用特权

评论回复
15
flyriz|  楼主 | 2015-7-22 19:13 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 17:41
你好。
配置MCG->C2 = (uint8_t)0x97U;
你选择的外部晶振的范围不对了。

是不是MCG->C2的值不能随便写的啊,我不小心把97写成07了,烧进去之后,再次烧写就会出现:
:'(

使用特权

评论回复
16
flyriz|  楼主 | 2015-7-22 19:39 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 17:41
你好。
配置MCG->C2 = (uint8_t)0x97U;
你选择的外部晶振的范围不对了。

在FRDM板子上试了一下,MCG->C2写入0x97的时候功耗下降到1MA以下了。又试着写了一下0x07和0x17,结果这块板子上也出现了上面的问题,祸不单行啊,全玩坏了。大神救救

使用特权

评论回复
17
FSL_TICS_ZJJ| | 2015-7-22 20:56 | 只看该作者
flyriz 发表于 2015-7-22 19:39
在FRDM板子上试了一下,MCG->C2写入0x97的时候功耗下降到1MA以下了。又试着写了一下0x07和0x17,结果这块 ...

没关系,把FRDM-KL25板子上固件烧成JLINK的,然后用JLINK-commander输入:unlock kinetis
全片擦除下试试。

使用特权

评论回复
18
flyriz|  楼主 | 2015-7-23 08:57 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-22 20:56
没关系,把FRDM-KL25板子上固件烧成JLINK的,然后用JLINK-commander输入:unlock kinetis
全片擦除下试 ...

我按照这个方法试了,还是不行啊:


昨天你也加班了,:handshake

使用特权

评论回复
19
FSL_TICS_ZJJ| | 2015-7-23 09:18 | 只看该作者
flyriz 发表于 2015-7-23 08:57
我按照这个方法试了,还是不行啊:

昨天上了下论坛,正好看到你的问题。
你在FRDM板子上,写了MCG_C2为0X07还是17就出问题了?
我这边试下。

使用特权

评论回复
20
flyriz|  楼主 | 2015-7-23 09:25 | 只看该作者
本帖最后由 flyriz 于 2015-7-23 09:27 编辑
FSL_TICS_ZJJ 发表于 2015-7-23 09:18
昨天上了下论坛,正好看到你的问题。
你在FRDM板子上,写了MCG_C2为0X07还是17就出问题了?
我这边试下。 ...

先写了07,再写17就烧不进去了,我也不确定是哪一个值出的问题。就是在我昨天上传的工程里面改的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

439

帖子

7

粉丝