2022-12-08

解決 Linux 連接使用 CH340晶片 的 Arduino 後不能建立 /dev/ttyUSB* 的問題

最近在下整理一些電子零件
發現一些微控制器開發板全部不能被 Arduino IDE 偵測,但電腦系統卻能辨識到
這些微控制器開發板過去都能夠使用,表面上亦沒有損壞,因此在下嘗試了解情況及解決問題
預覽
在下將 Arduino UNO Rev3 兼容板 及 Arduino Nano 兼容板 經 USB 接駁到 電腦系統,都無法在 Arduino IDE 偵測
但在下到 Terminal 輸入:
lsusb
卻能夠顯示
Bus 001 Device 015: ID 1a86:7523 QinHeng Electronics CH340 serial converter
證明 Arduino UNO Rev3 兼容板 及 Arduino Nano 兼容板 能夠正常運作

在下將 Arduino UNO Rev 3 原裝板 經 USB 接駁到 電腦系統,則能夠被 Arduino IDE 偵測
亦能上載 Sketch ,運作正常

在下再嘗試檢查 /devtty 檔案,在 Terminal 輸入:
ls -l /dev/tty*
發現 Arduino UNO Rev 3 原裝板 能顯示 /dev/ttyACM* ,但 Arduino兼容板 使用 CH340晶片 卻不能顯示 /dev/ttyUSB*
因此在網上尋找問題成因

發現網上都有其他使用者有相同情況,最後發現因為 brltty 佔用了 /dev/ttyUSB*
由於 Arduino兼容板 同樣是 /dev/ttyUSB* 的裝置,導致連接 Arduino兼容板 時無法建立 /dev/ttyUSB*
因此將 brltty 移除
sudo apt purge --purge brltty
再重新開機後, Arduino IDE 終於能夠偵測到 Arduino兼容板

總結

brltty 其實是讓 Terminal 或 tty 模式能夠將文字內容
讓電腦系統連接 USB點字顯示器 時,將一般文字轉換成點字文字的 常駐程式 (Daemon)
如果閣下不是視障人士,移除 brltty 並不會影響操作

見下文
但如果果閣下是視障人士,移除 brltty 會導會點字顯示器失效,影響操作體驗
可以修改 /usr/lib/udev/rules.d/85-brltty.rules 來迴避與 CH340晶片 衝突的問題
由於 CH340晶片 的 ID 是 1a86:7523 ,開啟 85-brltty.rules 後,尋找 1a86:7523
再將 規則 移除或註解(不執行規則),再在 Terminal 輸入
sudo udevadm control --reload-rules
便可以避免與 brltty 有衝突,但仍然有機會因為點字顯示器使用 CH340晶片 而無法使用

但以上方法都只是二選一的結果,如果要兩者同時存在及使用,可以將 85-brltty.rules 的 選取描述再只仔細一點
例如增加 ATTRS{serial} 限制指定的序列編號為 點字顯示器
可以讓其他使用相同 晶片 的裝置都能同時使用

參考資料

沒有留言 :

張貼留言