Ubuntu20.04, CH340c, 未打开串口时持续disconnect

用的是CH340C

1. 在Win10下未出现此问题, 在Ubuntu20.04下存在

2. CH340C的RX断开连接, 或目标芯片不发送数据时, 不会disconnect

3. CH340C的RX连接目标芯片, 且目标芯片持续发送数据时, 会定时disconnect, 间隔是固定的, 大概5秒左右

4. 如果在3的情况下, 用 cutecom 打开串口, 或用命令行 screen /dev/ttyUSB0 115200 打开串口, ch340就不会disconnect了, 问题消失


猜测是驱动的问题, 在无软件操作, 且RX不断有接收时接收溢出导致USB重启? 有其他人遇到这个问题吗?


dmesg日志

[?6785.293860]?usb?1-2:?USB?disconnect,?device?number?9
[?6785.294399]?ch341-uart?ttyUSB0:?ch341-uart?converter?now?disconnected?from?ttyUSB0
[?6785.294449]?ch341?1-2:1.0:?device?disconnected
[?6787.514022]?usb?1-2:?new?full-speed?USB?device?number?10?using?xhci_hcd
[?6787.663705]?usb?1-2:?New?USB?device?found,?idVendor=1a86,?idProduct=7523,?bcdDevice=81.32
[?6787.663725]?usb?1-2:?New?USB?device?strings:?Mfr=0,?Product=2,?SerialNumber=0
[?6787.663734]?usb?1-2:?Product:?USB?Serial
[?6787.666624]?ch341?1-2:1.0:?ch341-uart?converter?detected
[?6787.667417]?usb?1-2:?ch341-uart?converter?now?attached?to?ttyUSB0
[?6793.398198]?usb?1-2:?USB?disconnect,?device?number?10
[?6793.398810]?ch341-uart?ttyUSB0:?ch341-uart?converter?now?disconnected?from?ttyUSB0
[?6793.398868]?ch341?1-2:1.0:?device?disconnected
[?6795.514293]?usb?1-2:?new?full-speed?USB?device?number?11?using?xhci_hcd
[?6795.664682]?usb?1-2:?New?USB?device?found,?idVendor=1a86,?idProduct=7523,?bcdDevice=81.32
[?6795.664700]?usb?1-2:?New?USB?device?strings:?Mfr=0,?Product=2,?SerialNumber=0
[?6795.664709]?usb?1-2:?Product:?USB?Serial
[?6795.669218]?ch341?1-2:1.0:?ch341-uart?converter?detected
[?6795.670888]?usb?1-2:?ch341-uart?converter?now?attached?to?ttyUSB0
[?6800.942508]?usb?1-2:?USB?disconnect,?device?number?11
[?6800.943136]?ch341-uart?ttyUSB0:?ch341-uart?converter?now?disconnected?from?ttyUSB0
[?6800.943191]?ch341?1-2:1.0:?device?disconnected
[?6803.030516]?usb?1-2:?new?full-speed?USB?device?number?12?using?xhci_hcd
[?6803.180155]?usb?1-2:?New?USB?device?found,?idVendor=1a86,?idProduct=7523,?bcdDevice=81.32
[?6803.180174]?usb?1-2:?New?USB?device?strings:?Mfr=0,?Product=2,?SerialNumber=0
[?6803.180183]?usb?1-2:?Product:?USB?Serial
[?6803.183633]?ch341?1-2:1.0:?ch341-uart?converter?detected
[?6803.184633]?usb?1-2:?ch341-uart?converter?now?attached?to?ttyUSB0


lsusb -v output


Bus 001 Device 072: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               1.10

  bDeviceClass          255 Vendor Specific Class

  bDeviceSubClass         0 

  bDeviceProtocol         0 

  bMaxPacketSize0         8

  idVendor           0x1a86 QinHeng Electronics

  idProduct          0x7523 HL-340 USB-Serial adapter

  bcdDevice           81.32

  iManufacturer           0 

  iProduct                2 USB Serial

  iSerial                 0 

  bNumConfigurations      1

  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength       0x0027

    bNumInterfaces          1

    bConfigurationValue     1

    iConfiguration          0 

    bmAttributes         0x80

      (Bus Powered)

    MaxPower              100mA

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           3

      bInterfaceClass       255 Vendor Specific Class

      bInterfaceSubClass      1 

      bInterfaceProtocol      2 

      iInterface              0 

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x82  EP 2 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0020  1x 32 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x02  EP 2 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0020  1x 32 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x81  EP 1 IN

        bmAttributes            3

          Transfer Type            Interrupt

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0008  1x 8 bytes

        bInterval               1

can't get debug descriptor: Resource temporarily unavailable

Device Status:     0x0000

  (Bus Powered)



您好,为排除驱动软件影响,建议先更新驱动程序看下现象是否仍然存在,同时我们也会对比测试该内核自带驱动是否有类似现象。麻烦发送邮件到我司技术邮箱:tech@wch.cn 获取最新驱动。


驱动在 Ubuntu20.04 下无法编译, 已经更新至 issues 中, 麻烦技术排查.


您好,已更新,麻烦重新下载尝试。


按说明编译并替换为新的驱动, 问题依然存在, 甚至更严重了, 现在每三秒就会disconnect一次


以下是dmesg信息


== 载入新驱动


[ 9625.113986] ch341: loading out-of-tree module taints kernel.

[ 9625.114034] ch341: module verification failed: signature and/or required key missing - tainting kernel

[ 9625.114438] usbcore: registered new interface driver usb_ch341

[ 9625.114439] ch341: USB serial driver for ch340, ch341, etc.

[ 9625.114440] ch341: V1.7 On 2022.08.23


== 插入CH340C之后


[ 9833.778228] usb 2-3: new full-speed USB device number 21 using xhci_hcd

[ 9833.927577] usb 2-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.32

[ 9833.927591] usb 2-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 9833.927597] usb 2-3: Product: USB Serial

[ 9833.929259] usb_ch341 2-3:1.0: ttyCH341USB0: ch341 USB device

[ 9838.207279] usb 2-3: USB disconnect, device number 21

[ 9838.207662] usb_ch341 2-3:1.0: ch341 usb device disconnect.

[ 9840.470202] usb 2-3: new full-speed USB device number 22 using xhci_hcd

[ 9840.619301] usb 2-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.32

[ 9840.619315] usb 2-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 9840.619321] usb 2-3: Product: USB Serial

[ 9840.620851] usb_ch341 2-3:1.0: ttyCH341USB0: ch341 USB device

[ 9843.920954] usb 2-3: USB disconnect, device number 22

[ 9843.921395] usb_ch341 2-3:1.0: ch341 usb device disconnect.

[ 9846.186150] usb 2-3: new full-speed USB device number 23 using xhci_hcd

[ 9846.335506] usb 2-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.32

[ 9846.335521] usb 2-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 9846.335527] usb 2-3: Product: USB Serial

[ 9846.337151] usb_ch341 2-3:1.0: ttyCH341USB0: ch341 USB device

[ 9849.633677] usb 2-3: USB disconnect, device number 23

[ 9849.634128] usb_ch341 2-3:1.0: ch341 usb device disconnect.

[ 9851.898162] usb 2-3: new full-speed USB device number 24 using xhci_hcd

[ 9852.047286] usb 2-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.32

[ 9852.047300] usb 2-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 9852.047306] usb 2-3: Product: USB Serial

[ 9852.051420] usb_ch341 2-3:1.0: ttyCH341USB0: ch341 USB device

[ 9855.346542] usb 2-3: USB disconnect, device number 24

[ 9855.346879] usb_ch341 2-3:1.0: ch341 usb device disconnect.

[ 9857.610115] usb 2-3: new full-speed USB device number 25 using xhci_hcd

[ 9857.763530] usb 2-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice=81.32

[ 9857.763545] usb 2-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[ 9857.763551] usb 2-3: Product: USB Serial

[ 9857.765407] usb_ch341 2-3:1.0: ttyCH341USB0: ch341 USB device

[ 9861.058856] usb 2-3: USB disconnect, device number 25


如果用 cutecom 打开, 就不会 disconnect 


搜了一下, 发现有类似的问题存在

https://forum.odroid.com/viewtopic.php?t=40931

另外找到一个解决方案,?

https://stackoverflow.com/questions/70123431/why-would-ch341-uart-is-disconnected-from-ttyusb?

但是这个方案试了不起作用. 在Ubuntu20.04上没有 90-brltty-device.rules 和? ?90-brltty-uinput.rules 这两个文件, 只有一个 85-brltty.rules, 并且这个文件中并没有出现endor为 1a86 的设备规则, 将这个规则文件禁用之后问题依然存在




不知道为什么修改完会多出一篇, 请删除


您好,从如上提示信息来看,这个掉线属于物理层掉线并不是驱动的提示。这个掉线和USB移除一样,拔掉USB端会得到相同的提示信息。麻烦把设计原理图也发下看下。


之前板子比较复杂不好测, 今天用面包板搭了一个测试电路还原了一下现场. 这是一片新的CH340C, 单独焊在转接板上便于调试.



ch340c-test.jpg

电路如下所示, 就是一个最简单的STC8H的下载电路. 最开始猜测是3.3V LDO带不动STC8H, 特意将STC8H单独供电(上图右侧), 仅将 RX, TX, GND与CH340C相连. 结果发现这样还是能复现CH340C每隔5~6秒断开一次的问题.


症状: 在Ubuntu20.04下, 如果STC8H通过串口给CH340C发送数据, 并且没有使用任何串口软件(Cutecom, screen这些)打开串口, 那么在dmesg里就能观察到CH340C每隔5~6秒断开一次, 然后再连上. 

如果用Cutecom或者screen打开串口观察输出, 那么这个问题就会消失, dmesg里看不会再产生新的自动disconnect的记录.

如果Cutecom或者screen断开串口, 问题就会再次出现.


1662562537413434.png

dmesg日志输出

1662562537154637.png



换了一片CH340N测试, 复现同样的问题

1662565020290944.jpg


绿线上方, 用cutecom打开串口, 没有disconnect, 绿线下方, cutecom关闭连接, 就开始出现disconnect了


1662565020184748.png



请问有反馈吗? 或者是我的电路有问题? 


您好,针对如上情况,有以下几点建议:

1、芯片VCC采用5V供电时,V3建议连接退耦电容104(0.1uF),太大了影响效果。

2、VCC端常规建议大电容并连小电容(如:10uF或22uF并联0.1uF)。

3、USB通讯不建议用面包板飞线测试,因USB规范走线有等距差分的要求,并且飞线线材不同阻抗也可能不匹配。

您可申请我司demo同步对比验证。


  1. 电容容值V3用104也测过, 一样的问题

  2. 5V改10uF+104, 这个明天会测

  3. 面包板是用于复现问题的, 原先是PCB, 因为存在这样的问题, 又存在其它电路, 我并不能确定是CH340C的原因, 才用面包板复现的. 飞线都是硅胶线, 电阻很低, 不是普通的杜邦线. 关于差分同距是有考虑到的, 否则不可能在打开cutecom时长时间正常通信.


这是最开始测出上面问题的板子, 这个问题和飞线一点关系没有.


ch340-pcb.png


我想确认的是: 

贵司技术是否在Ubuntu20.04下用CH340C和CH340N测试了? 测的结果是什么? 

如果没测的话, 建议先测一下看看结果.

如果实在无法复现, 我再申请你们的demo对比.


早上测试了 5V电容换成10u+104, 3V3电容换成104, 还是一样的问题


您好,Ubuntu20.04系统我们内测和客户处使用均可以正常工作的。如上反馈现象确有特殊之处,当不操作串口USB才会掉线这个现象较反常,还有个可能性就是系统监测未使用该设备主动断线。您这边使用的是虚拟机还是真实环境的主机,在其他Linux主机也可做下对比,排除系统差异性。


只有登录才能回复,可以选择微信账号登录