1. RK3568 RISC-V核UART5输入功能排查背景
最近在调试RK3568开发板时遇到一个棘手问题:RISC-V核的UART5串口无法正常接收数据。作为一款集成了Cortex-A55和RISC-V双架构的处理器,RK3568的AMP(非对称多处理)特性本应让开发更灵活,但实际调试中却遇到了意想不到的障碍。
这个问题特别典型,因为UART5在硬件上连接到了RISC-V核,而默认的Linux设备树配置往往只关注A55核心的外设。当我们需要在RISC-V核上运行RT-Thread或裸机程序时,串口配置的遗漏就会导致通信失败。下面我将完整还原排查过程,包括关键的技术细节和最终解决方案。
2. 硬件架构与问题现象分析
2.1 RK3568的混合计算架构
RK3568采用4核Cortex-A55 + 单核RISC-V的独特设计:
- A55集群:主频最高2.0GHz,运行Linux/Android等复杂OS
- RISC-V核:通常用于实时任务或协处理,支持裸机或RT-Thread
- 外设分配:部分外设可动态分配给不同架构核心
关键点:UART控制器在硬件上可以灵活映射到不同CPU核,但需要正确配置
2.2 问题具体表现
当尝试通过RISC-V核的UART5接收数据时:
- 发送数据正常(TX工作)
- 接收端无任何数据(RX失效)
- 使用示波器测量RX引脚有信号电平变化
- Linux端dmesg无相关错误日志
3. 排查过程全记录
3.1 第一步:验证物理连接
使用万用表和示波器检查:
- RX/TX线路阻抗:正常(约50Ω)
- 信号电平:3.3V TTL符合预期
- 波特率匹配:115200bps配置正确
- 引脚复用确认:GPIO未冲突
排查结论:硬件连接无异常
3.2 第二步:检查设备树配置
关键设备树节点分析:
c复制// 默认配置(存在问题)
&uart5 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart5m1_xfer>;
};
发现问题:
- 缺少
dma-names和dmas属性 - 未指定CPU亲和性
- 中
