轉(zhuǎn)載請(qǐng)標(biāo)注原文地址:http://blog.csdn.net/uranus_wm/article/details/9838847
一 USB引腳一般四根線,定義如下:
為支持OTG功能,mini/micro usb接口擴(kuò)展了一個(gè)ID引腳(第4腳) A設(shè)備端ID腳接地,則初始狀態(tài)為Host,例如PC和支持OTG設(shè)備做主設(shè)備時(shí) B設(shè)備端ID腳懸空,默認(rèn)上拉為高電平,則初始狀態(tài)為Device,例如U盤(pán)和支持OTG設(shè)備做從設(shè)備時(shí) 1. 移動(dòng)設(shè)備如需支持OTG,內(nèi)部ID引腳需要默認(rèn)上拉為高 2. VBUS是輸入輸出雙向引腳。對(duì)于Device是power supply輸入腳;對(duì)于Host需要串一個(gè)5V電源輸出給device。
二 USB插入檢測(cè)過(guò)程,看下面一個(gè)簡(jiǎn)單電路,Samsung Exynos4412平臺(tái):
電路描述:CON1為micro usb連接器,VBUS連接系統(tǒng)XuotgVBUS腳,同時(shí)提供一個(gè)中斷輸出腳到XEINT28 同時(shí)外部一個(gè)DC5V經(jīng)過(guò)控制芯片也輸出到XuotgVBUS,作為host時(shí)需要用到給外部供電 ID腳上拉1.8V作為Host/Slave檢測(cè),同時(shí)提供另一個(gè)中斷輸入腳到XEINT29
該設(shè)備支持OTG,下面說(shuō)下設(shè)備的發(fā)現(xiàn)過(guò)程: 作為從設(shè)備插入PC端口時(shí): 1. 系統(tǒng)檢測(cè)到VBUS上的XEINT28上升沿觸發(fā)中斷,因?yàn)镻C端會(huì)有一個(gè)5V從VBUS給過(guò)來(lái),進(jìn)入中斷處理函數(shù)進(jìn)一步確認(rèn)ID腳狀態(tài),ID腳為低則狀態(tài)錯(cuò)誤,ID腳為高表示設(shè)備應(yīng)該切換到從設(shè)備模式 2. 通知usb gadget使能vbus,按照device模式使能PHY。gadget在probe時(shí)注冊(cè)了一個(gè)SPI軟中斷IRQ_USB_HSOTG,用于響應(yīng)數(shù)據(jù)接收 3. 開(kāi)啟usb clk,使能PHY,此時(shí)外部5V電源供給系統(tǒng)XuotgVBUS,gadget收到IRQ_USB_HSOTG中斷要求重啟OTG core 4. USB DP(高速設(shè)備為DP,低速設(shè)備為DM)上產(chǎn)生一個(gè)高電平脈沖,此時(shí)PC識(shí)別到一個(gè)USB設(shè)備插入,windows會(huì)提示用戶 5. 后續(xù)就是SETUP,GET DISCRIPTOR的過(guò)程
作為主設(shè)備發(fā)現(xiàn)設(shè)備插入時(shí): 1. 系統(tǒng)檢測(cè)到ID腳上XEINT29下降沿觸發(fā)中斷(實(shí)際是插入的usb公口第四腳直接連接到第五腳地上面),進(jìn)入中斷處理,切換到主設(shè)備模式 2. 關(guān)中斷,使能DC5V給VBUS上電,喚醒ehci與ohci 3. usb core在內(nèi)核初始化時(shí)注冊(cè)了一個(gè)名為khubd的內(nèi)核線程,由khubd監(jiān)控port event。(實(shí)際過(guò)程我理解是從設(shè)別由VUBS供電后,會(huì)在DP或DM上產(chǎn)生一個(gè)高電平脈沖 ehci在接收到脈沖信號(hào)后識(shí)別到設(shè)備插入,僅僅是理解,這一點(diǎn)未驗(yàn)證) 3. khubd獲取port,speed后交給ehci,接下來(lái)就是usb的SETUP,GET DISCRIPTOR過(guò)程
|
|
來(lái)自: yng326309158 > 《接口》