USB转串口掉线问题

CH341 CH348

Posted by LXG on December 10, 2024

USB 测试指南

CH341 & CH348

CH340与CH341的常见问题解答

ChatGPT 回答

类别 可能原因 检查方法 解决方案
硬件问题 电源不稳定 测量 USB 电源电压是否稳定在 5V 使用外部供电或在电源线上加滤波电容
  接口接触不良 更换 USB 数据线或检查接头和接口是否松动 使用高质量的 USB 数据线和接口
  外部电磁干扰 检查设备周围是否有高频或强磁干扰源 添加屏蔽层,数据线上增加磁环
  硬件损坏 更换 USB 转串口设备或接口模块 更换故障模块
软件/驱动问题 驱动不兼容 查看 dmesg 日志,检查驱动报错信息 更新驱动或使用设备官方提供的驱动
  数据流量过大或缓冲区溢出 测试传输速率,检查是否超出设备限制 降低波特率或减少数据传输频率
  串口被意外挂起 查看 dmesg 是否有 USB disconnect 类信息 禁用 USB 自动挂起
系统配置问题 波特率或协议配置错误 确认应用程序设置的串口参数与设备实际支持的一致 修改应用程序中的串口参数
  串口资源冲突 检查是否有其他程序占用了相同串口 确保每个串口设备有唯一的分配
数据链路问题 数据丢失或错误 使用调试助手监控数据帧是否丢失或校验错误 使用带校验的通信协议
  数据冲突 降低每路串口通信频率 使用队列机制调度串口数据
系统性能问题 CPU 性能不足 查看系统 CPU 使用率是否过高 优化程序逻辑或减小数据量
  内核线程阻塞 查看 dmesg 或系统内核日志 优化线程调度
固件问题 芯片固件存在 Bug 查看是否有最新固件版本 更新 USB 转串口芯片固件或嵌入式设备固件

可能原因

电磁干扰(EMI)

  • 设备附近有强电磁干扰源:如高功率电机、无线电设备等。
  • 线缆未屏蔽:多路串口信号容易受干扰。
  • 接地不良:设备接地电位差导致干扰信号增大。

供电问题

  • 供电不足:
    1. USB接口供电能力不足(如主机或USB HUB供电不够)。
    2. 多路串口设备消耗的电流超出USB供电能力。
  • 供电不稳定:劣质电源或过长的USB线缆导致电压降。

串口通信问题

  • 波特率过高:高波特率增加通信敏感性,易受干扰。
  • 流控设置不当:硬件流控(RTS/CTS)或软件流控(XON/XOFF)配置错误。
  • 协议配置不匹配:多路设备数据格式(如校验位、停止位)不一致。

USB接口问题

  • 带宽不足:USB 2.0或USB 3.0接口带宽被多个设备占用。
  • 接口质量问题:松动或接触不良导致掉线。
  • 设备过多:USB Hub下挂载的设备超出支持能力。

环境因素

  • 高温或低温:极端温度影响设备稳定性。
  • 机械振动:接口松动或线缆接触不良。

驱动或系统问题

  • 驱动不兼容:USB转串口芯片(如FTDI、CH340、PL2303等)驱动版本过旧或与系统不兼容。
  • 系统资源不足:嵌入式设备或PC负载高时,串口通信可能中断。
  • 驱动冲突:多个相同型号的串口设备导致资源冲突

硬件设计缺陷

  • 芯片质量问题:低成本的USB转串口芯片可能存在性能缺陷。
  • PCB布局不合理:信号线未正确屏蔽或滤波。

解决方法

减少电磁干扰

  • 使用屏蔽线缆:确保USB线和串口线有良好的屏蔽层。
  • 加装磁环:在USB线和串口线缆上安装磁环,抑制高频干扰。
  • 远离干扰源:将设备和线缆放置在远离强电磁场的环境中。
  • 检查接地:确保设备和电源系统接地良好。

优化供电

  • 独立供电:
    1. 使用外部供电的USB Hub,避免仅依赖主机USB供电。
    2. 确保电源输出电流满足多路串口设备的需求。
  • 高质量电源:选择低纹波、高稳定性的电源适配器。
  • 避免长线缆:减少电压降引起的不稳定。

调整通信参数

  • 降低波特率:将波特率设置为设备支持的较低值(如9600bps)。
    1. 一致的协议参数:
    2. 校验位、数据位、停止位保持一致。
  • 确认流控设置正确。
  • 避免多线程竞争:在软件中优化对多路串口的访问。

改善USB接口条件

  • 升级USB接口:
    1. 使用USB 3.0接口以提高带宽和供电能力。
    2. 避免多个设备共享一个USB Hub。
  • 检查接口连接:确保接口紧固,避免松动。
  • 使用高质量线缆:选择低阻抗、短线长的USB线缆。

软件和驱动优化

  • 更新驱动:使用最新的串口芯片驱动程序(如CH340、FTDI等)。
  • 优化系统资源:
    1. 在PC端减少不必要的任务负载。
    2. 嵌入式设备中避免高CPU占用。
  • 检查驱动冲突:避免多个设备使用相同的驱动导致冲突。

硬件升级

  • 更换高质量设备:选择性能可靠的USB转串口模块。
  • 优化PCB设计:
    1. 加强电源滤波。
    2. 增加信号屏蔽和地线布局。
  • 引入缓冲芯片:在多路串口通信链路中加入缓冲芯片提高抗干扰能力。

环境改进

  • 稳定温湿度:确保设备工作在适宜的温度和湿度环境中。
  • 固定设备和线缆:避免因机械振动造成接口松动。

案例-USB驱动有明显报错日志


[    0.298197] usbcore: registered new interface driver usbfs
[    0.303834] usbcore: registered new interface driver hub
[    0.309288] usbcore: registered new device driver usb
[    0.862768] usbcore: registered new interface driver asix
[    0.868921] usbcore: registered new interface driver ax88179_178a
[    0.875842] usbcore: registered new interface driver cdc_ether
[    0.882441] usbcore: registered new interface driver cdc_eem
[    0.888890] usbcore: registered new interface driver rndis_host
[    0.895637] usbcore: registered new interface driver cdc_ncm
[    0.902045] usbcore: registered new interface driver qmi_wwan
[    0.908571] usbcore: registered new interface driver cdc_mbim
[    1.249949] usbcore: registered new interface driver cdc_acm
[    1.265413] usbcore: registered new interface driver cdc_wdm
[    1.272022] usbcore: registered new interface driver uas
[    1.278143] usbcore: registered new interface driver usb-storage
[    1.284946] usbcore: registered new interface driver ums-alauda
[    1.291852] usbcore: registered new interface driver ums-cypress
[    1.298702] usbcore: registered new interface driver ums-datafab
[    1.305539] usbcore: registered new interface driver ums_eneub6250
[    1.312533] usbcore: registered new interface driver ums-freecom
[    1.319354] usbcore: registered new interface driver ums-isd200
[    1.326074] usbcore: registered new interface driver ums-jumpshot
[    1.332969] usbcore: registered new interface driver ums-karma
[    1.339611] usbcore: registered new interface driver ums-onetouch
[    1.346541] usbcore: registered new interface driver ums-realtek
[    1.353342] usbcore: registered new interface driver ums-sddr09
[    1.360309] usbcore: registered new interface driver ums-sddr55
[    1.367177] usbcore: registered new interface driver ums-usbat
[    1.373902] usbcore: registered new interface driver usb_ch341
[    1.408009] usbcore: registered new interface driver usb_ch9344
[    3.115363] usb 1-1: new high-speed USB device number 3 using sunxi-ehci
[    3.435591] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    3.444674] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    3.505322] usb 1-1: device descriptor read/64, error -71
[    3.936104] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    3.945026] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    4.005839] usb 1-1: device descriptor read/64, error -71
[    4.126466] usb usb1-port1: attempt power cycle
[    4.765699] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    4.774617] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    4.835282] usb 1-1: new high-speed USB device number 4 using sunxi-ehci
[    5.285265] usb 1-1: device not accepting address 4, error -71
[    5.585445] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    5.594356] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    5.655274] usb 1-1: new high-speed USB device number 5 using sunxi-ehci
[    6.105275] usb 1-1: device not accepting address 5, error -71
[    6.111893] usb usb1-port1: unable to enumerate USB device
[    6.118128] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    6.127046] sunxi-ohci 4200400.ohci1-controller: ohci_irq: fullspeed or lowspeed device connect
[    6.262487] sunxi_usb_udc 4100000.udc-controller: 4100000.udc-controller supply udc not found, using dummy regulator
[    6.615328] usb 2-1: new full-speed USB device number 2 using sunxi-ohci
[    6.878370] usb 2-1: not running at top speed; connect to a high speed hub
[    6.904688] hub 2-1:1.0: USB hub found
[    6.910385] hub 2-1:1.0: 4 ports detected
[    7.245331] usb 2-1.4: new full-speed USB device number 3 using sunxi-ohci
[    7.418365] usb 2-1.4: not running at top speed; connect to a high speed hub
[    7.464252] usbcore: registered new interface driver rtk_btusb
[   10.306737] usbcore: registered new interface driver rtl8723du
[   10.635364] android_work: sent uevent USB_STATE=CONNECTED
[   10.753612] configfs-gadget gadget: high-speed config #1: c
[   10.761406] android_work: sent uevent USB_STATE=CONFIGURED
[  780.965266] usb 2-1.2: new low-speed USB device number 4 using sunxi-ohci
[  781.148165] input: SIGMACHIP Usb Mouse as /devices/platform/soc@3000000/4200400.ohci1-controller/usb2/2-1/2-1.2/2-1.2:1.0/0003:1C4F:0034.0001/input/input6
[  781.170119] hid-generic 0003:1C4F:0034.0001: input,hidraw0: USB HID v1.10 Mouse [SIGMACHIP Usb Mouse] on usb-sunxi-ohci-1.2/input0
[  783.485308] usb 2-1.2: reset low-speed USB device number 4 using sunxi-ohci
[  806.905318] usb 2-1.2: reset low-speed USB device number 4 using sunxi-ohci
[  807.808308] usb 2-1.2: USB disconnect, device number 4

设备描述符读取失败 (error -71)

-71 错误通常表示 USB 设备协议错误,可能的原因包括:

  1. 设备硬件故障
  2. USB 接口接触不良
  3. USB 供电问题
  4. USB 线缆或端口不兼容

[    3.115363] usb 1-1: new high-speed USB device number 3 using sunxi-ehci
[    3.435591] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    3.444674] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    3.505322] usb 1-1: device descriptor read/64, error -71
[    3.936104] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    3.945026] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    4.005839] usb 1-1: device descriptor read/64, error -71
[    4.126466] usb usb1-port1: attempt power cycle
[    4.765699] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    4.774617] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    4.835282] usb 1-1: new high-speed USB device number 4 using sunxi-ehci
[    5.285265] usb 1-1: device not accepting address 4, error -71
[    5.585445] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device disconnect
[    5.594356] sunxi-ehci 4200000.ehci1-controller: ehci_irq: highspeed device connect
[    5.655274] usb 1-1: new high-speed USB device number 5 using sunxi-ehci
[    6.105275] usb 1-1: device not accepting address 5, error -71

日志解析


这里插入的是鼠标

这两行日志显示 USB 设备在低速模式下被重置了两次,间隔约 23 秒。这通常表示设备在通信过程中出现问题,系统尝试重置设备以恢复正常工作。

[  780.965266] usb 2-1.2: new low-speed USB device number 4 using sunxi-ohci
[  781.148165] input: SIGMACHIP Usb Mouse as /devices/platform/soc@3000000/4200400.ohci1-controller/usb2/2-1/2-1.2/2-1.2:1.0/0003:1C4F:0034.0001/input/input6
[  781.170119] hid-generic 0003:1C4F:0034.0001: input,hidraw0: USB HID v1.10 Mouse [SIGMACHIP Usb Mouse] on usb-sunxi-ohci-1.2/input0
[  783.485308] usb 2-1.2: reset low-speed USB device number 4 using sunxi-ohci
[  806.905318] usb 2-1.2: reset low-speed USB device number 4 using sunxi-ohci