簡易識別 USB 裝置

簡易識別 USB 裝置

偶而會有客戶丟個訊息過來,問到為什麼新買的開發板或是 USB 周邊插上電腦後毫無反應?是買到故障品嗎?本篇教您在幾大平台上的簡單偵測與識別方法,不需要安裝比較專業的軟體或是 USB Analyzer,就能快速確認 USB 裝置未能正常運作的問題所在。

首先,先以系統工程的角度來思考一下插上 USB 後應該發生什麼事?應該是系統與 USB 要先握手寒暄一下吧?事實上絕大多數情況下這裡都不會發生任何問題,因為現代硬體製造良率都非常高、趨近完美。問題幾乎都出現在軟體上,而軟體有什麼問題呢?主要是現代作業系統為了存取便利、系統管理、與資訊安全的考量,透過內建或是需要系統管理者身份安裝對應的驅動程式,才能讓使用者的應用程式進行存取。這裡就成為問題的淵藪,同時也是確認問題是軟體還是硬體的分水嶺。

以下操作方式,就是直接向系統獲取 USB 匯流排上的裝置基本資訊,不需要透過 USB 驅動程式,當然也就能協助判別問題是來自於硬體或軟體。

Linux 與 MacOS

在這類 Unix 平台上,只要開啟終端機,輕易、快速地透過命令列執行 lsusb,就能列出所有連接到系統上的 USB 裝置。如果找不到這個命令,可能需要用系統對應的套件管理程式安裝一下非常容易。譬如下列執行 lsusb 與結果:

1$ lsusb
2Bus 000 Device 003: ID 1058:2653 Western Digital Technologies, Inc. Game Drive  Serial: 323130394E4E343030353431
3Bus 020 Device 003: ID 8564:4100 8564 USB3.1 Hub 
4Bus 020 Device 004: ID 0781:55b0 SanDisk Corporation Portable SSD  Serial: 323130394B5A343032393634
5Bus 020 Device 001: ID 05ac:8511 Apple Inc. FaceTime HD Camera (Built-in)  Serial: CCG917703VZH5DFP2
6Bus 020 Device 006: ID 2109:0100 VIA Labs, Inc. USB 2.0 BILLBOARD  Serial: 0000000000000001

其中 Bus 編號是指主機或 USB Hub,Device 則是指匯流排控制器或實際裝置,ID 以 : 分成兩個部分,前四碼是 VID (Vendor ID) 廠商編號,後四碼則是 PID (Product ID) 產品編號,而最後則是裝置廠牌、功能等描述文字,在 MacOS 版本下安裝的 lsusb 同時會顯示裝置序號,非常方便。

在插、拔裝置前後直接 lsusb 看看兩者結果之間的差異,就能很簡單的辨識出該 USB 裝置的基本資訊。

極少情況下會發發現前後結果沒有變化,那應該是 USB 硬體周邊發生問題了。在 Linux 上依然有個很簡單的方法再深入看一下 kernel log,就是執行下列命令(可能需要 sudo):

1tail -F /var/log/messages

持續更新的訊息就會反映 USB 周邊通訊的狀況。我們曾經就看到過某牌的裝置在插入時,Linux Kernel 一直跳針回報 SETUP 問題。遇到這個現象,或者是插入時完全沒有任何反應,才是遇到真正故障的硬體。當然也不排除是遇到後面提到的 二次開發的韌體 問題可以進行修復。

Windows

在 Windows 上可以查看系統/硬體管理員的內容,但是操作上比較繁瑣囉唆,也不易一下子清楚辨識到底是哪個裝置。建議可以安裝 Temple 這個小工具,以 Windows 命令列安裝方式為

1winget install the-sz.Temple

或是到 Temple::USB Device Info - the sz development 下載安裝。顯示的內容也很簡潔明確。

二次開發的韌體與特殊 Reset

另外有個狀況要留意一下,因為很多周邊的 USB 裝置韌體屬於「二次開發」。也就是 USB 裝置的韌體會分為兩層,第一層是初始狀態下 USB SoC 本身的 VID:PID。在燒錄 USB 裝置實際功能的韌體運作後,又變成是另一套 VID:PID。

另外有時 USB 裝置實際功能的韌體資料毀損導致不能正常運作時,或是用特殊方式(按鍵組合之類的)插入使用,會看到 USB 周邊顯示的是初始狀態下的 VID:PID,這在開發 USB 韌體時還滿常遇到的。另一個可能則是板載燒錄器的韌體掛了,也會如此。

另外更常遇到的狀況是,過去 Arduino 或其他的 MCU 為了透過 USB 進行燒錄,都是前置一顆專用燒錄晶片(如 TI, ST, Nordic... 等官方開發板)或是 USB 轉 TTL 的通訊晶片,所以即使不論是 MCU 軟體或硬體掛了,仍然可以透過 USB 連接開發板。但是現在很多 MCU 已經內建 USB 了,為了簡省成本就塞了個 bootloader,利用 MCU 本身的 USB 接口進行燒錄。這類的 MCU 開發板設計如 Raspberry Pi Pico 等,很可能都需要使用者手動按鍵進入所謂的 boot mode,才能透過 USB 以原始可燒錄狀態連接,需要仔細閱讀 Getting Started 之類的段落,找出正確的 reset 步驟。

基本上這類問題都是可以解決的,就是按照原廠說明、工具操作或查閱熱心網友的經驗分享,重新燒錄正確的韌體即可!

檢查線材

最後還有一種狀況,就是目前很多 USB 線材僅具備充電功能,尤其是那種一對多的線材很多都只是為了充電方便,特別是 Type-C 的導線設計較爲複雜,廠商最可能乾脆省略傳輸功能。所以最好再次確認不是拿到這種線材來連接的烏龍事件。

總結

以上就是開發工具無法進行 USB 連接識別時的簡易故障排除!基本上這類電子產品良率都已經非常高了,再加上出廠前都會有 QC 程序、或甚至是燒錄預設韌體。所以碰到機王問題的機會實在小之又小。以我們本身出貨前測試幾千塊開發板的經驗來看,幾乎都是在測試連接時沒插好 USB 線才會造成無法連接問題,但是基本上也只需要重新插入確認連接就可以修復,不是什麼大問題!