问题描述
这个坑我踩得特别隐蔽,足足排查了很久!
RK3506这类瑞芯微SoC的时钟树管控非常严格:设备树里串口节点status已经设为okay、引脚pinctrl配置也完全正确,但串口就是完全没有数据输出,打印空白、无法通信。
核心原因
U-Boot设备树中没有显式配置串口时钟、时钟频率和门控时钟源。
如果uart3节点缺失assigned-clocks、assigned-clock-rates配置,或是没有绑定正确的clocks时钟源,底层CLK驱动初始化时,会判定串口时钟频率为0、时钟源无效,直接无法使能串口外设。
简单来说,时钟源彻底断供,串口硬件逻辑电路完全处于静默状态,哪怕引脚和状态配置再正确,也完全无法工作。
给大家贴出我最终调试通过的完整设备树配置,uboot阶段串口时钟频率必须手动配置,缺一不可:
powershell
&uart3 {
status = "okay";
pinctrl-names = "default";
clock-frequency = <24000000>; // uboot下一定要配置串口时钟频率
pinctrl-0 = <&rm_io10_uart3_tx &rm_io11_uart3_rx>;
};
在调试U-Boot功能、打印日志、串口交互时,如果遇到串口不工作,优先排查时钟配置,不要盲目排查引脚和驱动逻辑,这是瑞芯微平台极易忽略的关键细节!