Files
TencentOS-tiny/examples/tos_meets_rust/docs/ch34x.md

3.3 KiB

CH34x 串口驱动

  • 基本原理

    在板子上有一个写有 CH340C 的电子元件, 这个就是电子元件的作用就是将 USB 协议转换为串口协议, 要让这个这个电子元件正常工作, 需要安装 CH340 驱动.

    在 USB 接口里有 4 根线, 外侧的两根长金手指负责供电, 即电源线, 内侧的两根金手指比较短, 用于数据传输, 即数据线.

    当我们在电脑上通过串口向板子传输数据时, 电脑端采用 USB 数据传输协议通过数据线传到板子上, 然后 CH340 驱动解析 USB 数据将其转换为串口数据传输给板子上的其他元器件.

    串口除了传输数据的功能之外, 还有调试功能, 板子上程序的输出一般都是被重定向到串口中, 然后打印出数据供调试用.

  • 驱动安装

    • 使用默认系统驱动

      默认情况下, linux 内核已经带了 ch34x 的驱动, 可以使用如下命令搜索

        ls -R /lib/modules/$(uname -r) | grep ch34
      

      输出类似如下

        ch341.h
        ch341.ko.xz
      

      然后挂载 ch341 模块

        sudo modprobe ch341
      

      查看是否挂载成功

        lsmod | grep ch34
      
    • 手动编译驱动

      下载地址位于这里, 下载之后解压, 其内容如下所示

        CH341SER_LINUX/
        +-- ch34x.c
        +-- Makefile
        +-- readme.txt
      

      我们需要将 ch34x.c 替换为内核中对应的代码, 可以使用 uname -r 查看内核, 假设内核版本为 5.11, 则下载地址如下

        curl -LO https://raw.githubusercontent.com/torvalds/linux/v5.11/drivers/usb/serial/ch341.c
        mv ch341.c ch34x.c
      

      然后编译该模块

        make clean
        make
        sudo make load
        sudo rmmod ch341
      
  • 使用方法

    当驱动 ch34x 加载之后, 使用如下命令监听外设连接情况

      sudo dmesg -w
    

    然后将串口插到电脑上, 其输出如下所示

      [ 3897.948205] usb 3-1: new full-speed USB device number 5 using xhci_hcd
      [ 3898.101841] usb 3-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
      [ 3898.101846] usb 3-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
      [ 3898.101848] usb 3-1: Product: USB Serial
      [ 3898.108866] ch341 3-1:1.0: ch341-uart converter detected
      [ 3898.122905] usb 3-1: ch341-uart converter now attached to ttyUSB0
    

    可以看到串口已经被绑定到 /dev/ttyUSB0 上了.

  • 虚拟机映射

    查看 ttyUSB0 所属组

      ls -l /dev/ttyUSB0
      crw-rw---- 1 root uucp 188, 0 Mar 28 17:49 /dev/ttyUSB0
    

    将其添加到该组

      sudo usermod -a -G uucp $USER
    

    添加完毕后, 务必重启电脑.

    然后打开 virtualbox, 关闭 ubuntu, 打开其设置, 定位到 serial port 项, 选择 Port 1, Port Number 为 COM1, Port Mode 为 Host Device, Path/Address 为 /dev/ttyUSB0, 如下所示:

    serial

    启动 ubuntu 虚拟机, ubuntu 虚拟机中的 /dev/ttyS0 就对应于 COM1, 也就是主机的 /dev/ttyUSB0.

参考