You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BeagleBone Black UART4无法通过C程序发送数据的故障排查求助

解决BeagleBone Black Rev C UART4无输出问题

核心问题:UART4引脚未启用复用

BBB默认不会自动启用所有UART外设的引脚复用,即使/dev/ttyO4或/dev/ttyS4节点存在,P9_13引脚可能仍处于默认的GPIO或其他功能状态,无法输出UART数据。


1. 必须启用UART端口及引脚,操作步骤如下:

临时配置(重启后失效)

使用系统自带的config-pin工具直接配置引脚模式:

sudo config-pin P9_13 uart  # 配置P9_13为UART4_TXD
sudo config-pin P9_11 uart  # 如果需要接收数据,配置P9_11为UART4_RXD

永久配置(重启后保持生效)

编辑/boot/uEnv.txt文件(需sudo权限):

  1. 确保启用UBoot overlay功能,找到并取消注释(或添加):
    enable_uboot_overlays=1
    
  2. 添加UART4的overlay加载项:
    uboot_overlay_addr4=/lib/firmware/BB-UART4-00A0.dtbo
    
    (注:部分系统中overlay文件名可能为BB-UART4.dtbo,可通过ls /lib/firmware/BB-UART4*.dtbo确认)
  3. 保存文件后重启系统:sudo reboot

2. 确认配置成功的方法:

  • 临时配置后,使用以下命令检查引脚模式:
    config-pin -q P9_13
    
    正常输出应为:P9_13 Mode: uart
  • 查看UART设备状态:
    ls -l /dev/ttyS4
    
    应显示设备节点存在,且权限正常(通常属于tty或dialout组)
  • 若配置永久生效,重启后再次执行config-pin -q P9_13,模式仍为uart

3. 关于线控线(CTS/RTS):不需要

你的代码中设置了CLOCAL标志(options.c_cflag = B115200 | CS8 | CREAD | CLOCAL;),该标志会忽略所有调制解调器控制线(如CTS、RTS、DTR等),因此无需外接这些线,只需连接**TXD(P9_13)、RXD(P9_11)和GND(P9_1或P9_2)**即可。

注意:BBB的UART是3.3V电平,不能直接连接PC的RS232接口(RS232为±12V电平),必须使用电平转换模块(如MAX3232)才能和PC端的串口设备通信。


4. 代码中的两个关键修正:

  1. 头文件笔误:代码中#include<string.h>`存在错误的反引号,应修正为:
    #include<string.h>
    
  2. 设备节点路径:Debian 9(内核4.14)下,BBB的UART设备已统一命名为ttySx,而非旧版的ttyOx,建议将打开设备的代码修改为:
    if ((file = open("/dev/ttyS4", O_RDWR | O_NOCTTY | O_NDELAY))<0)
    
    (虽然ttyO4可能是ttyS4的软链接,但直接使用标准命名更可靠)

内容的提问来源于stack exchange,提问作者Norm_Analog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:08:10