WCH-Link 无法在 linux 上识别出 ttyACM0 串口

最近尝试在 linux 上开发 gd32v103 , 通过下载 linux 版本的 MounRiver Studio, 根据 beforeinstall 目录的 start.sh 脚本的描述.执行完之后可以识别到 wch-link 设备,但是无法识别出 /dev/ttyACMx 设备.具体的消息如下:

```

[676439.922047] usb 1-4.2: new full-speed USB device number 51 using xhci_hcd

[676440.003539] usb 1-4.2: New USB device found, idVendor=1a86, idProduct=8010, bcdDevice= 2.01

[676440.003547] usb 1-4.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[676440.003551] usb 1-4.2: Product: WCH-Link

[676440.003555] usb 1-4.2: Manufacturer: wch.cn [676440.003558] usb 1-4.2: SerialNumber: 0001A0000001 [676440.023873] cdc_acm 1-4.2:1.1: Separate call control interface. That is not fully supported.

[676440.023884] cdc_acm: probe of 1-4.2:1.1 failed with error -22

```

我用的 linux 的内核版本是: Linux red.WS 5.8.15-201.fc32.x86_64 #1 SMP Thu Oct 15 15:56:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

请问这个可能是内核的原因吗? 还是 wch-link 固件目前还不能很好的适配 linux(可以 probe 出 /dev/ttyACMx 设备)呢?

我debian10也不行,lsusb有CDC接口,但是/dev/下没有ttyACM

```

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    |__ Port 11: Dev 53, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 71, If 0, Class=Vendor Specific Class, Driver=, 12M
        |__ Port 1: Dev 71, If 1, Class=Communications, Driver=, 12M
        |__ Port 1: Dev 71, If 2, Class=CDC Data, Driver=, 12M

```

我在Ubuntu20下,WCH-Link的串口不能用,lsusb与楼上的情况一样。

用Python向CDC接口的两个端点读写数据,能用115200bps波特率通信,目前不能设置其他波特率,下面贴一下实时接收的脚本。

可能是由于WCH-Link的CDC接口缺少用于配置串口设置的控制端点,不符合CDC接口标准,电脑就无法识别了。

#!/bin/python
import usb.core
import usb.util

def wchlink_cdc(vid=0x1a86, pid=0x8010):
    dev = usb.core.find(idVendor=vid, idProduct=pid)
    if dev is None:
        raise usb.core.USBError('找不到WCH-Link')
    if dev.is_kernel_driver_active(0):
        dev.detach_kernel_driver(0)
    dev.reset()                          # 复位设备
    cfg = dev.get_active_configuration() # 获取配置
    cdc = cfg.interfaces()[2]            # 获取CDC接口
    ep_read = usb.util.find_descriptor(cdc, custom_match=lambda e: e.bEndpointAddress==0x83)  # RxD
    ep_write = usb.util.find_descriptor(cdc, custom_match=lambda e: e.bEndpointAddress==0x03)  # TxD
    return dev, ep_read, ep_write


dev, ep_read, ep_write = wchlink_cdc()

# 实时接收数据并打印
while True:
    try:
        data = ep_read.read(64)
    except usb.core.USBTimeoutError:
        pass
    else:
        print(bytes(data).decode(), end='')

# 发送数据
# ep_write.write(b'example send data')



你好,该问题已经解决,更新link固件即可。可以将需求发我邮箱:wangyy@wch.cn,我可以先发测试固件。


你好,相关情况已经通过邮箱和你联系,希望可以提供驱动我这边测试一下,


我也遇到相同问题 http://www.wch.cn/bbs/thread-71088-2.html#20


使用2.2 测试版本的固件, /dev/ttyACM0 出来了,就是 串口的波特率不能高, 会工作不正常, 比如我这边测试 115200正常,460800 接收就会出问题


emmm,上面波特率应该是硬件问题,刚刚想起WCH-Link 没有外部晶振


WCH does not NAK baudrates they cant support. 460800 baudrate is too high, the firmware cant select a correct divisor @48MHz to support 460k8. 115k2 should work. Maybe also 230k4.


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