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权限):
- 确保启用UBoot overlay功能,找到并取消注释(或添加):
enable_uboot_overlays=1 - 添加UART4的overlay加载项:
(注:部分系统中overlay文件名可能为uboot_overlay_addr4=/lib/firmware/BB-UART4-00A0.dtboBB-UART4.dtbo,可通过ls /lib/firmware/BB-UART4*.dtbo确认) - 保存文件后重启系统:
sudo reboot
2. 确认配置成功的方法:
- 临时配置后,使用以下命令检查引脚模式:
正常输出应为:config-pin -q P9_13P9_13 Mode: uart - 查看UART设备状态:
应显示设备节点存在,且权限正常(通常属于ls -l /dev/ttyS4tty或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. 代码中的两个关键修正:
- 头文件笔误:代码中
#include<string.h>`存在错误的反引号,应修正为:#include<string.h> - 设备节点路径: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
相关产品推荐
相关产品推荐

