ubuntu16.04使用USB轉TTL(ch340)串口轉usb調試過程


以前搞過一次這個,但是時間長了又忘了。

今天用ch340在linux下調試,用以前寫好的串口調試程序不能發送數據了。只記得window下需要安裝驅動,實際linux下也需要驅動才能正常使用。默認linux是有這一驅動的,但是有些老舊,不能用。

今天的調試過程中,首先把ch340 一端插入電腦
輸入命令: lsmod | grep usbserial

輸出:usbserial              53248  1 ch341
成功發現了設備,識別出時 ch341  是我記錯了??
輸入:lsusb
輸出一下信息:
  Bus 002 Device 003: ID 17ef:4810 Lenovo Integrated Webcam [R5U877]
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 1a81:1004 Holtek Semiconductor, Inc. 
Bus 006 Device 003: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
發現了ch341的一些相關信息
輸入命令(查看USB轉串口接入狀態):dmesg
輸出相關信息,部分信息如下:
  [  429.184170] usb 6-1: new full-speed USB device number 3 using uhci_hcd
[  429.345937] usb 6-1: New USB device found, idVendor=1a86, idProduct=7523
[  429.345944] usb 6-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  429.345948] usb 6-1: Product: USB2.0-Ser!
[  429.368123] usbcore: registered new interface driver usbserial
[  429.368396] usbcore: registered new interface driver usbserial_generic
[  429.368875] usbserial: USB Serial support registered for generic
[  429.374125] usbcore: registered new interface driver ch341
[  429.374143] usbserial: USB Serial support registered for ch341-uart
[  429.374165] ch341 6-1:1.0: ch341-uart converter detected
[  429.386851] usb 6-1: ch341-uart converter now attached to ttyUSB0
ID信息與lsusb檢測到的一致,ch341-uart converter now attached to ttyUSB0  成功驅動,端口為ttyUSB0。

再此,確實能看到自帶了驅動,但不要高興太早。接着往下來

第二步:安裝串口終端軟件,搜到了一個minicom,動手試試:

首先:建議刷新一下源sudo apt-get update
然后安裝:sudo apt-get install minicom  


打印一些信息,輸入‘y’。
等待安裝成功,然后用sudo minicom -s 設置minicom的端口對應到ttyUSB0(對應使用dmesg命令看到的信息)。
出現配置菜單:
 
選擇“Serial port setup”,出現串口配置菜單:
 
輸入A,修改serial device 由/Dev/tty0修改為/dev/ttyusb0,波特率按實際硬件參數情況修改,我的修改為115200 8N1,也有19200 8N1的硬件等。

然后返回

選擇 Save setup as dfl

接着選擇Exit退出。

可以再進一次sudo minicom -s,看看參數是否保存好。

此時,使用串口調試工具,能看到ttyUSB0,但還是無法進行通信。

運行dmesg,顯示如下

 

 這個原因是,驅動版本太老舊,需要重裝驅動

1.首先去官網下載最新的驅動,參見某高人的博客:CH340各平台下驅動

2.下載下來linux版本的驅動

將其拷貝到Linux系統中,在使用之前首先需要將老驅動刪除掉,這樣才能防止即使安裝了新驅動老驅動仍然生效。系統的默認驅動目錄為:/lib/modules/$(uname -r)/kernel/drivers,老驅動的完整路徑名:/lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko,我們進入到該目錄下,然后將其刪除掉,如下所示:

 

3.解壓新驅動並進行編譯安裝,具體流程如下圖。

實際上操作起來就是四步:

 

  1.  
    root@ubuntu:/ #unzip CH341SER_LINUX.ZIP
  2.  
    root@ubuntu:/ #cd CH341SER_LINUX
  3.  
    root@ubuntu:/ #make
  4.  
    root@ubuntu:/ #make load

其中尤其要注意第三步 make 之后的執行過程和結果,如果沒有順利生成 ch34x.ko 那么就需要查看提示的報錯原因了,然后進行相應問題的查找或者咨詢 tech@wch.cn。在make load后插入 CH340 硬件,輸入命令:dmesg 查看系統日志信息,如下圖所示:

 

如果成功會出現上圖所示的信息,並且產生的設備節點名稱為 ttyUSB0,我們可以到 /dev 目錄下進行查看,會發現設備文件 /dev/ttyUSB0,然后剩下的操作就類似於 Windows 系統操作 COM 口一樣簡單了。

4.如果第3步的make出現錯誤,error: unknown type name ‘wait_queue_t’和implicit declaration of function ‘signal_pending’ [-Werror=implicit-function-declaration]的錯誤提示。

即編譯官方的ch34x驅動源碼時,出現:

1.error: unknown type name ‘wait_queue_t’;

2.implicit declaration of function ‘signal_pending’ [-Werror=implicit-function-declaration]

的錯誤提示。

 

需要進行如下解決:

需要使用vi編輯器,wait_queue_t 沒有被使用過,查找wait_queue_t(/wait_queue_t 定向找到它,只有一行),所以直接在源碼中注釋掉即可。

2引入頭文件#include <linux/sched/signal.h>。

然后問題就解決了,可以直接編譯 使用make 然后make load,加載到系統驅動中。

至此,串口終於可以通信了。

如果希望每次開機之后系統可以自動加載驅動的話,也很簡單只需要兩步,把生成的 ch34x.ko 文件拷貝到原先老驅動的目錄下,然后執行 depmod 命令就可以了,如果不夠明確可以參考博客:Linux系統開機自動加載驅動module

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM