USB OTG插入檢測識別
一 USB引腳一般四根線,定義如下:
為支援OTG功能,mini/micro usb介面擴充套件了一個ID引腳(第4腳)
A裝置端ID腳接地,則初始狀態為Host,例如PC和支援OTG裝置做主裝置時
B裝置端ID腳懸空,預設上拉為高電平,則初始狀態為Device,例如U盤和支援OTG裝置做從裝置時
1. 移動裝置如需支援OTG,內部ID引腳需要預設上拉為高
2. VBUS是輸入輸出雙向引腳。對於Device是power supply輸入腳;對於Host需要串一個5V電源輸出給device。
二 USB插入檢測過程,看下面一個簡單電路,Samsung Exynos4412平臺:
電路描述:CON1為micro usb聯結器,VBUS連線系統XuotgVBUS腳,同時提供一箇中斷輸出腳到XEINT28
同時外部一個DC5V經過控制晶片也輸出到XuotgVBUS,作為host時需要用到給外部供電
ID腳上拉1.8V作為Host/Slave檢測,同時提供另一箇中斷輸入腳到XEINT29
該裝置支援OTG,下面說下裝置的發現過程:
作為從裝置插入PC埠時:
1. 系統檢測到VBUS上的XEINT28上升沿觸發中斷,因為PC端會有一個5V從VBUS給過來,進入中斷處理函式進一步確認ID腳狀態,ID腳為低則狀態錯誤,ID腳為高表示裝置應該切換到從裝置模式
2. 通知usb gadget使能vbus,按照device模式使能PHY。gadget在probe時註冊了一個SPI軟中斷IRQ_USB_HSOTG,用於響應資料接收
3. 開啟usb clk,使能PHY,此時外部5V電源供給系統XuotgVBUS,gadget收到IRQ_USB_HSOTG中斷要求重啟OTG core
4. USB DP(高速裝置為DP,低速裝置為DM)上產生一個高電平脈衝,此時PC識別到一個USB裝置插入,windows會提示使用者
5. 後續就是SETUP,GET DISCRIPTOR的過程
作為主裝置發現裝置插入時:
1. 系統檢測到ID腳上XEINT29下降沿觸發中斷(實際是插入的usb公口第四腳直接連線到第五腳地上面),進入中斷處理,切換到主裝置模式
2. 關中斷,使能DC5V給VBUS上電,喚醒ehci與ohci
3. usb core在核心初始化時註冊了一個名為khubd的核心執行緒,由khubd監控port event。(實際過程我理解是從設別由VUBS供電後,會在DP或DM上產生一個高電平脈衝
ehci在接收到脈衝訊號後識別到裝置插入,僅僅是理解,這一點未驗證)
3. khubd獲取port,speed後交給ehci,接下來就是usb的SETUP,GET DISCRIPTOR過程