社区导航

 

搜索
查看: 621|回复: 2

[分享] 【NXP Rapid IoT评测】给CPU (K64)降频省点电

[复制链接]

1256

TA的帖子

1

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2019-1-19 17:42 | 显示全部楼层 |阅读模式
本帖最后由 cruelfox 于 2019-1-19 17:42 编辑

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

不过,改变这个宏并不能改变实际 CPU 的频率,因为在配置硬件时钟的代码里面,它只是用来给一个全局变量赋值:
clockset.PNG
实际起配置作用的是上面那些代码,其使用的参数在另外的地方定义了。

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

  除了PLL, 还有FLL又是啥?按照现在的代码分析,应该是 PLL 输出作为基本时钟的。进入PLL的时钟预先经过12分频,再由PLL得到30倍频率,是120MHz, 那么原始时钟应该为48MHz——这和我想的外部12MHz晶振频率不一样。要直接用外部晶振的 12MHz 作为基本时钟,我不会设,没有时间去细究了。那么改变PLL的系数吧来得容易,可是PLL倍频限制最低为24倍,比30倍降一点点;输入PLL的频率最小2MHz, 也就是 PLL 最低输出就是48MHz. 想要系统时钟更低,只好使用后面的分频器,比如除以4,得到12MHz.
  最后确定要改的是这里:在 clock_config.c 中定义的结构常量
clkcfg.png
  第一个红圈里是 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
mod1.png
这对应我上面红圈标的两个地方,将 0B 06 改为 17 00, 将 44 01 改为 33 33
mod1e.PNG

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

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


回复

使用道具 举报

6899

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2019-1-19 18:42 | 显示全部楼层
估计能省点儿电
虾扯蛋


回复

使用道具 举报

216

TA的帖子

10

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-1-21 08:37 | 显示全部楼层
感觉低功耗模式没有启动,不知道有没有常试添加低功耗模式呢


回复

使用道具 举报

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

关闭

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

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-2-27 03:04 , Processed in 0.117611 second(s), 15 queries , Gzip On, MemCache On.

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