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

Jetson AGX Orin串口设备仅可用一次,退出后无法通信求助

Jetson平台Zebra MS4717扫描器退出程序后无法通信的问题排查

问题概况

  • 设备:Zebra MS4717条码扫描器,通过USB CDC的SSI协议通信,稳定挂载为/dev/ttyACM0
  • 异常现象:自研程序运行时通信完全正常,但程序退出后,无论是重启自研程序,还是用screen /dev/ttyACM0 9600、pyserial miniterm工具连接,都无法和扫描器通信,唯一恢复方式是重新插拔设备
  • 排除硬件问题:该扫描器在其他电脑上运行无异常,问题出在Jetson平台
  • 自研程序使用pyserial的核心代码片段:
import serial
serial_port = "/dev/ttyACM0"
baud_rate = 9600
with serial.Serial(serial_port, baud_rate, timeout=0.1) as device_serial:
    device_serial.flush()
    while True:
        try:
            # read a line from the serial port
            barcode_byte_string = device_serial.readline()
            if len(barcode_byte_string) > 0:
                # convert the byte string to a string and strip the newline character
                barcode = barcode_byte_string.decode("utf-8").rstrip()
                # publish the barcode to the topic
                self.publish_barcode(barcode, serial_port)
        except serial.SerialException as e:
            # exit with error code 1. This will cause the application to be restarted.
            sys.exit(1)
        except Exception as e:
            break

排查与解决思路

1. 强制串口资源释放,避免异常泄漏

虽然代码用了with上下文管理器理论上会自动关闭串口,但遇到serial.SerialException直接sys.exit(1)可能绕过资源释放流程,导致设备被残留进程占用。

  • 修改异常处理逻辑,手动关闭串口并重置信号后再退出:
except serial.SerialException as e:
    device_serial.dtr = False
    device_serial.rts = False
    device_serial.close()
    sys.exit(1)
except Exception as e:
    device_serial.dtr = False
    device_serial.rts = False
    device_serial.close()
    break
  • 退出程序后,用lsof /dev/ttyACM0命令检查是否有残留进程占用串口,存在的话用kill -9 <进程ID>强制终止。

2. 重新加载USB CDC驱动

Jetson的USB CDC驱动可能存在设备状态异常问题,无需插拔设备,尝试重新加载驱动恢复:

sudo rmmod cdc_acm
sudo modprobe cdc_acm

可以将这两行命令做成脚本,快速恢复通信,验证是否为驱动层面的问题。

3. 调整串口控制信号

部分USB串口设备会根据DTR/RTS信号状态切换工作模式,程序退出时如果这些信号未恢复默认状态,设备可能进入休眠或不可用状态,在代码退出前手动重置这些信号(如上面代码修改示例)。

4. 检查系统权限与串口锁定

  • 确认当前用户拥有tty和dialout组权限,运行groups查看,没有的话执行:
sudo usermod -aG tty,dialout $USER
  • 检查/var/lock目录下是否存在对应串口的锁定文件,若有则删除后尝试重新连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:27:51