当前位置: 首页 > news >正文

【jetson】串口通信测试和异常问题排查

本文完成 Jetson 串口收发功能测试,完整记录长报文接收异常故障的排查过程

一、环境说明

  1. 硬件:Jetson Orin Nano 40Pin排针
  2. 系统:JetPack 6.2.2 / L4T R36.5
  3. 串口:/dev/ttyTHS1(硬件UARTA)
  4. 引脚对应
  • Pin8:UART1 TX 发送引脚
  • Pin10:UART1 RX 接收引脚

二、引脚复用配置(启用UART1)

出厂40Pin引脚默认为GPIO,必须切换功能才能使用串口

  1. 打开引脚配置工具
sudo/opt/nvidia/jetson-io/jetson-io.py
  1. 进入40pin配置,将Pin8、Pin10设置为uarta
  2. 保存配置,重启设备生效;
  3. 校验引脚状态,确认复用配置正常
sudocat/sys/kernel/debug/pinctrl/2430000.pinmux/pinconf-groups|grep-A5"uart1"

标准正常输出:

122 (uart1_rx_pr3): pull=2 tristate=1 enable-input=1 open-drain=0 io-reset=0 123 (uart1_tx_pr2): pull=0 tristate=0 enable-input=0 open-drain=0 io-reset=0

注释:RX为输入带上拉,TX为推挽输出,IO无硬件复位,串口硬件通路就绪。

三、硬件接线

1. 自回环测试(自发自收,排除外部设备干扰)

杜邦线直接短接 Pin8 ↔ Pin10,完成串口闭环测试。

2. 外接电脑串口模块测试

Pin8(TX) → 模块RX;Pin10(RX) → 模块TX;共GND。


四、Python串口测试环境部署

依赖安装(推荐系统apt包,稳定无冲突)

sudoaptupdatesudoaptinstallpython3-serial

校验库是否正常导入:

python3-c"import serial; print(serial.__version__)"

实时收发测试脚本 uart_test.py

importserialimporttimedefmain():ser=Nonelast_send_time=0send_interval=1counter=1try:ser=serial.Serial(port="/dev/ttyTHS1",baudrate=115200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=0)print("✅ 串口打开成功 /dev/ttyTHS1 @115200")print("每1秒自动发送递增数字,实时打印接收数据")whileTrue:current_time=time.time()# 定时发送数据ifcurrent_time-last_send_time>=send_interval:send_data=f"{counter}\n"ser.write(send_data.encode("utf-8"))print("发送:",send_data.strip())counter+=1last_send_time=current_time# 非阻塞读取接收缓存ifser.in_waiting>0:raw_data=ser.read(ser.in_waiting)try:recv_str=raw_data.decode("utf-8").strip()print("实时收到:",recv_str)except:print("原始十六进制数据:",raw_data.hex())time.sleep(0.001)# 降低空循环CPU占用exceptKeyboardInterrupt:print("\n检测到中断,程序退出")finally:ifser:ser.close()print("✅ 串口资源已关闭")if__name__=="__main__":main()

正常接收发送

五、故障现象复现与根因分析

现象1:单包≤7字节,收发完全正常

测试数据:b'123456\n'共7字节

发送长度: 7 字节 发送HEX: 31 32 33 34 35 36 0a 接收长度: 7 字节 接收HEX: 31 32 33 34 35 36 0a ✅ 收发正常

注:硬件FIFO未达到8字节触发阈值,走PIO超时中断,驱动无异常。

现象2:单包≥8字节,接收数据全0损坏

测试数据:b'1234567\n'共8字节

发送长度: 8 字节 发送HEX: 31 32 33 34 35 36 37 0a 接收长度: 8 字节 接收HEX: 00 00 00 00 00 00 00 00 ❌ 数据异常

更长64字节字符串表现一致:前半段全部为0x00,仅末尾不足8字节片段数据正常。

故障根源

L4T R36.5 内置Tegra UART驱动可能存在DMA缺陷:
串口接收FIFO累计满8字节后自动切换DMA批量搬运模式,内核未将DMA缓存数据正常下发至用户态,上层读取到未初始化空内存(全0)。
英伟达官方论坛有关该问题讨论:
https://forums.developer.nvidia.com/t/dma-on-dev-ttyths1-corrupts-receiving-data/369191

两种处理方案

方案1:底层根治

按论坛方式修改设备树,删除UART1serial@3100000节点DMA相关配置,强制串口运行PIO中断模式,彻底消除8字节限制,长短报文均可正常收发。(暂未进行实测验证

方案2:不修改设备树,拆包处理,软件临时兼容方案

对长数据做分包发送,每包最大7字节,包与包之间增加1ms延时,保证硬件FIFO不会积累到8字节,规避DMA异常触发。
缺点:仅适用于可自主控制发送逻辑的场景;外部设备主动下发长报文时,仍会出现数据损坏。

七、总结

  1. 硬件接线、引脚复用配置无误时,短报文串口通信正常;
  2. 单包数据长度≥8字节会触发内核DMA驱动Bug,数据收发全零损坏;
  3. 稳定长期使用推荐修改设备树关闭DMA;不改动系统底层则只能采用7字节分包发送临时兼容。
http://www.jsqmd.com/news/1185423/

相关文章:

  • 基于CNN的手势识别技术原理与游戏交互实践
  • 格拉苏蒂偏心保养服务流程与注意事项权威公示(2026年7月最新) - 亨得利钟表维修中心
  • TMC7300与STM32F401RB的电机控制方案解析
  • TLP241A与PIC18F85J10构建高可靠性电气隔离方案
  • 做了好几个后台系统之后,我把这套多租户中后台底座开源了(XiHan.BasicApp 基于.NET 10 + Vue 3)
  • AI智能体评估体系构建:挑战与实践
  • C++:2.类与对象
  • 2026年7月最新雅典北京燕莎友谊商城(金源店)维修保养服务电话 - 亨得利钟表维修中心
  • Windows系统核心工具异常排查指南:CMD与记事本闪退的深度修复方案
  • 【ChatGPT用户反馈分析实战指南】:20年AI产品专家亲授3大高价值洞察模型与7类典型噪声过滤法
  • AI图像生成技术实战:从扩散模型原理到职业形象生成应用
  • 元初混沌 6G 全域通感一体化体系架构 第一卷二阶第二十二篇 三才组网故障自修复内生逻辑
  • windows网络适配器驱动开发-NetAdapterCx 接收端缩放(下)
  • 终极指南:快速检测微信单向好友的完整解决方案
  • 雅典官方更换表蒙价格查询|网点地址与电话权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • 扩散模型、UNet、时间序列与SAM模块组合实践指南
  • 多设备多档位性能基线怎么建:低端机、中端机、高帧机的风险分级
  • Windows Server 2012 R2上部署IIS 8.5:从零到生产环境的完整指南
  • 从ERROR 1045到安全登录:MySQL 8.0 root密码重置的完整避坑指南
  • Chrome 插件离线安装:3步解决“程序包无效”与 _metadata 报错
  • 模板驱动型文档自动化:从Word手工到流水线生产的底层逻辑
  • Unity敌人自动寻路
  • 基于PIC18F86J55与PAM8904的低功耗智能音频报警系统设计
  • 2026 年新消息:资溪靠谱的随车吊出租厂家有哪些,别急着找吊车,这笔钱你可能白花了 - 企业推荐官【认证官方】
  • 多语言机器翻译与本地化:AI模型在全球化交流中的桥梁作用
  • 高精度ADC系统设计:基于ADS127L11与PIC18F25K50的信号采集方案
  • Actus F8一键神器:鼠标连点与键盘自动化全攻略
  • C++ XML解析利器CMarkup:轻量级单文件库的流式导航实战
  • ct-cockpit开发者指南:如何基于现有框架进行二次开发的完整教程
  • 基于PyTorch与ResNet18的轻量级图像分类实战:从数据采集到模型部署