【FAQ】全志R329如何在平台修改uboot阶段CPU频率? (转载)

在启动优化过程,有一个优化项是提高uboot阶段CPU运行频率,CPU默认配置启动频率为1G,提高CPU频率确实可以提升开机速度,但是在提升CPU频率的时候,需要同步提升 VDD-CPU 的电压,该电压配置需要与芯片的 VF 表一致。

下面以 R818 evb2 方案为例,介绍如何在uboot节点提升 CPU 频率。

  • 查看平台的 vf 表,R818当前的 vf 表在内核的dts中有配置,详细的配置参考内核dts的 cpu_opp_l_table 配置即可。R818 1.5G时,VDD-CPU需要配置为1.18V,得到该信息之后,uboot中将配置为该频率启动。

  • 方案的 sys_config.fex 中,boot_clock 为uboot阶段CPU频率,当前我们需要以1.5G频率启动,则修改为 boot_clock = 1512。

  • 同步修改 VDD-CPU 电压,R818 evb2 方案中,DCDCA输出连接到VDD-CPU,所以需要在uboot阶段,将DCDCA的电压修改为1.18V。配置为 dcdca_vol = 1001180。

  • 由于evb2方案没有BMU,uboot中的方案配置需要去掉BMU的配置,将需要修改uboot中,平台defconfig中的配置。

上述总的修改如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JnhbwyqO-1637743992682)(https://bbs.aw-ol.com/assets/uploads/files/1637740287942-fc0883e8aba945c28a4554e6d5461216.jfif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7lQQqQL-1637743992685)(https://bbs.aw-ol.com/assets/uploads/files/1637740292279-32e61aa8493b44179f2c1ba39964b1b5.jfif)]

补丁如下:

// 方案sys_config.fex 中的修改
diff --git a/configs/evb2/sys_config.fex b/configs/evb2/sys_config.fex
index 8c99868..f86464e 100644
--- a/configs/evb2/sys_config.fex
+++ b/configs/evb2/sys_config.fex
@@ -20,7 +20,7 @@ debug_mode  = 8
 ;power_mode    = axp_type,   0:axp81X, 1:dummy, 2:axp806, 3:axp2202, 4:axp858
 ;----------------------------------------------------------------------------------
 [target]
-boot_clock     = 1008
+boot_clock     = 1512
 storage_type    = 2
 advert_enable   = 0
 burn_key        = 1
@@ -38,6 +38,7 @@ power_mode            = 2
 ;dldo1_vol                                                     ---set dldo1 voltage,mV,500-3500,100mV/step
 ;----------------------------------------------------------------------------------
 [power_sply]
+dcdca_vol = 1001180

 [card_boot]
 logical_start   = 40960

// uboot 中,平台defconfig的修改
diff --git a/configs/sun50iw10p1_tina_defconfig b/configs/sun50iw10p1_tina_defconfig
index 581e4b84a6..bc42673f67 100644
--- a/configs/sun50iw10p1_tina_defconfig
+++ b/configs/sun50iw10p1_tina_defconfig
@@ -39,7 +39,7 @@ CONFIG_R_I2C0_ENABLE=y
 CONFIG_SUNXI_POWER=y

 CONFIG_SUNXI_PMU=y
-CONFIG_SUNXI_BMU=y
+#CONFIG_SUNXI_BMU=y
 CONFIG_AXP81X_POWER=y
 CONFIG_AXP81X_SUNXI_I2C_SLAVE=0x34
 CONFIG_AXP858_POWER=y

在修改完成之后,uboot的启动log将可以看到下面的信息:

[00.794]dcdca_vol = 1180, onoff=1
[00.802]CPU=1512 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz  MBus=400Mhz

启动log中有上述信息则修改成功。

其他的平台、方案、频率如何修改?

其他的平台、方案、频率修改都是类似的,只要确定期望uboot启动的CPU频率之后,确认在该频点下,VDD-CPU需要的电压,然后通过原理图确认VDD-CPU是由哪一路DCDC供电的,而后修改sys_config.fex中的boot_clock和power_sply的配置即可。而uboot中的修改,根据实际使用方案,配置PMU和BMU即可,如果发现uboot中的电压没有配置正确,则在uboot中搜索”power_sply“字段信息,查看代码解析"/soc/power_sply"逻辑后修改即可。

转载地址: https://bbs.aw-ol.com/topic/630

LED 是否在**硬件阶段**就能点亮,还是需要等到**U-Boot 阶段**才能点亮,取决于 **LED 的连接方式** 和 **系统设计意图**。下面从硬件设计、软件控制、功能需求等多个角度详细解释原因。 --- ## ✅ 一、LED 在硬件阶段就能点亮的原因 ### 1. **硬件直接连接电源(VCC)** - LED 一端接电源(如 3.3V),另一端通过限流电阻接地(GND)。 - 这种方式下,只要系统上电,LED 就会亮,与软件无关。 - **优点**:实现简单、成本低、可靠性高。 - **缺点**:无法通过软件控制 LED 状态。 ```text LED 电路示例: +3.3V ----|>|---- resistor ---- GND ``` ### 2. **接在电源管理芯片输出端** - 有些板子使用 PMIC(电源管理芯片)为系统供电。 - 某些 PMIC 的输出引脚在上电后自动输出高电平,用于指示电源状态。 - LED 接在这些输出引脚上,也会在上电后立即亮起。 --- ## ✅ 二、LED 需要到 U-Boot 阶段才能点亮的原因 ### 1. **LED 接在 GPIO 引脚上** - LED 接在处理器的 GPIO 引脚上,初始状态为高阻态(Hi-Z)或低电平。 - 只有当 U-Boot 初始化 GPIO 并设置为输出高电平时,LED 才会点亮。 ```text GPIO_PIN ----|>|---- resistor ---- GND ``` ### 2. **软件控制需求** - 如果需要通过 LED 显示系统状态(如启动中、运行中、错误等),就需要软件控制。 - U-Boot 或 Linux 可以根据系统状态动态控制 LED。 ### 3. **防止误亮或误操作** - 在某些系统中,LED 可能用于指示系统状态,如果在硬件阶段就点亮,可能误导用户系统已启动完成。 - 因此,设计为由软件控制,确保 LED 的状态与系统运行状态一致。 --- ## ✅ 三、为什么不同板子会有不同的设计? ### 1. **设计目的不同** - **调试用途的板子**:LED 常用于指示启动状态,因此由 U-Boot 控制。 - **产品级板子**:可能希望上电就有电源指示灯,因此硬件直接点亮。 ### 2. **系统复杂度不同** - 简单嵌入式设备可能不需要软件控制 LED。 - 高级嵌入式系统需要动态 LED 状态反馈,因此必须由软件控制。 ### 3. **功耗与安全考虑** - 某些低功耗系统可能希望 LED 在未运行时关闭,以节省电量。 - 或者在系统崩溃时通过 LED 状态提示错误信息。 --- ## ✅ 四、如何判断 LED 是硬件点亮还是软件点亮? | 方法 | 硬件点亮 | 软件点亮 | |------|----------|----------| | 断电后 LED 是否亮 | 是 | 否 | | 上电瞬间 LED 是否亮 | 是 | 否 | | 修改 U-Boot 代码后 LED 是否不亮 | 否 | 是 | | Linux 是否能控制 LED | 否 | 是(如果驱动配置正确) | --- ## ✅ 五、示例对比 ### 示例 1:硬件点亮 LED(无需软件控制) ```dts // 设备树中可能没有 LED 的描述 ``` ### 示例 2:U-Boot 点亮 LED(GPIO 控制) ```dts leds { compatible = "gpio-leds"; power-led { label = "power"; gpios = <&gpio1 47 GPIO_ACTIVE_HIGH>; default-state = "off"; }; }; ``` 在 U-Boot 中: ```c gpio_request(GPIO_POWER_LED, "power_led"); gpio_direction_output(GPIO_POWER_LED, 1); // 点亮 LED ``` --- ## ✅ 总结 | 问题 | 回答 | |------|------| | 为什么有的板子 LED 在硬件阶段就亮? | 因为 LED 是直接连接电源或 PMIC 输出,不需要软件控制。 | | 为什么有的板子要到 U-Boot 阶段才亮? | 因为 LED 是通过 GPIO 控制的,需要软件初始化后才能点亮。 | | 两者设计有何不同? | 硬件点亮简单可靠但无法控制;软件点亮灵活但需要初始化。 | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值