UART2 串口通讯问题

你好!关于 S100 开发板 UART2 串口通讯的设备树修改问题,结合社区最新资源,给你以下直接可操作的解决方案


:bullseye: 核心结论

你有两种方案可选:

方案 适用场景 难度 风险
方案 A:安装官方 Deb 包(推荐新手) 快速调试、短期项目 :star: 需备份数据
方案 B:修改设备树源码编译 长期项目、深度定制 :star::star::star: 需 SDK 环境

:white_check_mark: 方案 A:安装官方 Deb 包(强烈推荐)

这是官方提供的临时便捷方案,无需修改设备树、无需编译源码。

步骤:

  1. 备份重要数据:warning: 必须操作)

    # 备份你的项目文件、配置文件等
    
  2. 下载 Deb 包

  3. 安装 Deb 包

    sudo dpkg -i <下载的deb包名称>.deb
    
  4. 重启设备

    sudo reboot
    
  5. 验证串口

    ls -l /dev/ttyS*
    # 应该能看到 /dev/ttyS2(UART2)
    

:warning: 注意事项:

  • 要求系统版本:RDK S100 系统版本 ≥ 4.0.5(2026-03-05)
  • UART2 与 I2C5 互斥,启用 UART2 后 I2C5 将不可用
  • 如安装后无法启动,需重新烧录系统恢复

:wrench: 方案 B:修改设备树源码编译(进阶用户)

如果你需要深度定制或使用旧版本系统,需按以下步骤操作:

步骤 1:获取 BSP 源码

# 访问官方文档下载 SDK
# https://developer.d-robotics.cc/rdk_doc/rdk_s/Advanced_development/rdk_gen

步骤 2:找到设备树文件

设备树文件位置:

kernel/arch/arm64/boot/dts/hobot/drobot-s100-soc.dtsi

步骤 3:修改设备树

找到 uart2 节点,确保配置如下:

uart2: uart@394C0000 {
    power-domains = <&scmi_smc_pd PD_IDX_LSPERI_TOP>;
    compatible = "snps,dw-apb-uart";
    reg = <0x0 0x394C0000 0x0 0x10000>;
    reg-shift = <2>;
    reg-io-width = <4>;
    interrupts = <GIC_SPI PERISYS_UART2_INTR PERISYS_UART2_INTR_TRIG_TYPE>;
    clock-frequency = <200000000>;
    pinctrl-names = "default";
    pinctrl-0 = <&peri_uart2>;
    status = "okay";  // 确保是 "okay"
};

同时禁用 I2C5(避免引脚冲突):

&i2c5 {
    status = "disabled";
};

步骤 4:编译并烧录

# 清理编译环境
make clean
make mrproper

# 编译内核
./mk_kernel.sh

# 编译系统
./mk_debian.sh

# 打包镜像
./pack_image.sh -l

# 使用 D-Robotics 烧录工具烧录

:pushpin: 拨码开关确认

确保你的拨码开关设置正确:

  • PCM0 拨码:向右拨 → 40pin
  • 40pin 拨码:向右拨 → UART2

:magnifying_glass_tilted_left: 验证串口是否可用

烧录完成后,登录开发板验证:

# 查看串口设备
ls -l /dev/ttyS*

# 查看串口信息
dmesg | grep uart

# 测试串口(需连接另一设备)
screen /dev/ttyS2 921600
# 或
minicom -D /dev/ttyS2 -b 921600

:books: 相关资源


:red_question_mark: 如果还有问题

请提供以下信息,我可以进一步帮你排查:

  1. 当前系统版本(cat /etc/issue
  2. 是否已尝试 Deb 包方案
  3. 具体的错误日志(dmesg 输出)

建议优先尝试方案 A(Deb 包),5 分钟即可完成配置!:rocket: