概述 安卓系統支持多種 USB 外圍設備,提供兩種模式來支持實現 USB 外設接入系統:USB 配件模式和 USB 主機模式。 在 USB 配件模式下,接入的 USB 設備充當 USB 主機,併為 USB 匯流排供電。USB 配件產品包括USB轉接設備、診斷和音樂設備、讀卡器等,遵循 Android ...
概述
安卓系統支持多種 USB 外圍設備,提供兩種模式來支持實現 USB 外設接入系統:USB 配件模式和 USB 主機模式。
在 USB 配件模式下,接入的 USB 設備充當 USB 主機,併為 USB 匯流排供電。USB 配件產品包括USB轉接設備、診斷和音樂設備、讀卡器等,遵循 Android 附件通信協議(Android Accessory Communication Protocol)。這種模式使不具備主機功能的 Android 設備具有了與 USB 硬體交互的能力。
在 USB 主機模式下,Android 設備扮演主機的角色。這種設備的例子包括鍵鼠、U盤和游戲手柄等。
下圖展示了兩種模式的異同。當 Android 設備處於主機模式時,它扮演 USB 主機的角色併為匯流排供電。當 Android 設備處於配件模式時,連接的 USB 外設扮演主機角色並給安卓設備供電。本博客主要介紹安卓設備通過USB擴展串口的應用場景。
安卓設備工作在主機模式
使用安卓免驅USB設備庫
USB 主機模式僅在 Android 3.1 及其更高版本的系統中被支持。與 USB 相關的 API 都被保存在 android.hardware.usb 包中,開發者可以直接使用包中的類和方法直接與 USB 設備通訊。
通常情況下,開發者需要通過 UsbManager 實例去獲取所需的 UsbDevice 實例,進而從 UsbDevice 實例中查找合適的 UsbInterface,並確定要用於通信的 UsbEndpoint,最後建立 UsbDeviceConnection 與 USB 設備的通信。
針對 USB 轉串口晶元廠家一般都會提供配套的應用庫和開發資料,工程師使用時無需瞭解 USB 協議,僅關註串口相關的配置和數據通訊即可。以 CH340/CH341 為例,可參考如下博客:《CH340/CH341安卓應用開髮指南》。若客戶的產品面向的是使用安卓手機的客戶,則建議使用此種方式來,優點在於無需 root 許可權和移植設備驅動,用戶僅需要安裝 APP 軟體即可。
使用USB轉串口Linux設備驅動
區別於以上方式,當使用 USB 轉串口 Linux 設備驅動來訪問其生成的虛擬串口時,對串口的操作和 Linux 系統下的操作沒有差別,此種方式的適用於面向安卓平板或定製設備的客戶,系統需要 root 許可權來訪問 ttyUSB 設備(也可以廠家修改系統中關於設備的許可權)。關於 Linux 系統操作 USB 轉串口設備和訪問串口可以參考博客:《CH341/CH340Linux驅動使用教程》、《Linux串口編程》
安卓設備工作在配件模式
USB 配件模式允許 Android 設備以配件形式連接到 USB 主機上,其必須遵循 Android AOA 協議。與 USB 相關的 API 都被保存在 android.hardware.usb 及 accessory 包中,開發者可以直接使用包中的類和方法直接與 USB 主機通訊。
採用支持配件模式的 USB 轉串口產品的優勢在於可以實現 USB 產品邊充電邊通訊的功能,且支持的安卓設備要比 USB 主機方式應用下更廣泛。(因部分安卓設備廠商會關閉OTG功能)應用也無需移植設備驅動,僅需要設備上安裝免驅的 APP 軟體即可。可參考方案《USB Android AOA轉接方案》
以上就是安卓系統訪問 USB 轉串口的設備的常用方式了,有問題歡迎大家隨時交流~