2459|2

1379

帖子

2

TA的资源

五彩晶圆(初级)

楼主
 

【NXP Rapid IoT评测】给CPU (K64)降频省点电 [复制链接]

本帖最后由 cruelfox 于 2019-1-19 17:42 编辑

  这个 Rapid-IoT kit 真是“电老虎”,其中最主要用电大户是 K64 MCU, 因为我发现从在线开发环境下载来的工程,竟然将CPU频率设定在最高支持的 120MHz. 从 clock_config.h 中这个宏定义可以体现:


不过,改变这个宏并不能改变实际 CPU 的频率,因为在配置硬件时钟的代码里面,它只是用来给一个全局变量赋值:

实际起配置作用的是上面那些代码,其使用的参数在另外的地方定义了。

  为了简单的 IoT 应用,就将 K64 运行在 120MHz 太浪费电池了。于是我想到改变时钟配置,给 CPU 降频。读手册,K64 的时钟分配和我最熟悉的那些 MCU 截然不同,手册的风格也不一样。费了些时间读,仍然没弄明白要配那些寄存器。这个图还算比较清楚的:

但是 MCG 部分的描述就让我一头雾水了


  除了PLL, 还有FLL又是啥?按照现在的代码分析,应该是 PLL 输出作为基本时钟的。进入PLL的时钟预先经过12分频,再由PLL得到30倍频率,是120MHz, 那么原始时钟应该为48MHz——这和我想的外部12MHz晶振频率不一样。要直接用外部晶振的 12MHz 作为基本时钟,我不会设,没有时间去细究了。那么改变PLL的系数吧来得容易,可是PLL倍频限制最低为24倍,比30倍降一点点;输入PLL的频率最小2MHz, 也就是 PLL 最低输出就是48MHz. 想要系统时钟更低,只好使用后面的分频器,比如除以4,得到12MHz.
  最后确定要改的是这里:在 clock_config.c 中定义的结构常量

  第一个红圈里是 PLL 的 PRDIV 和 VDIV 值,我将它改到使 PLL 输出 48MHz. 第二个红圈是负责分频的,这个值会写到 SIM 的 CLKDIV1 寄存器。于是我将几个分频系数都变为 4, 就使频率处于 12MHz 了。
  改动后重新编译,果然电流下降了几十个mA.

  下面向大家介绍下如果不自己本地编译怎么改频率:用二进制编辑工具直接改在线生成的 .bin 文件。
1. 搜索二进制字节 02 60 0B 06 00 03 00 00 00 00 00 44 01

这对应我上面红圈标的两个地方,将 0B 06 改为 17 00, 将 44 01 改为 33 33


2. 上面改动使 CPU, 总线频率都变成了 12MHz. 但是 FreeRTOS 还以为CPU是120MHz, 因为 SystemCoreClock 的值还没有改。再次搜索二进制字节 "04 00 20 00 0E 27 07", 后面的数 0x07270E00 就是十进制 120000000.

将它改成 0x00B71B00, 就对应实际频率了。

  有需要的朋友可以尝试一下,看能将电池续航时间延长多少。
此帖出自无线连接论坛

最新回复

感觉低功耗模式没有启动,不知道有没有常试添加低功耗模式呢  详情 回复 发表于 2019-1-21 08:37
点赞 关注(1)
 

回复
举报

9792

帖子

24

TA的资源

版主

沙发
 
估计能省点儿电
此帖出自无线连接论坛
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

190

帖子

10

TA的资源

一粒金砂(中级)

板凳
 
感觉低功耗模式没有启动,不知道有没有常试添加低功耗模式呢
此帖出自无线连接论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表