天天看點

USB實作(1)-Ti AM335x系列CPU

本文參照了Ti AM335x的技術手冊。

AM335x處理器提供了兩個USB2.0 子產品。每個USB控制器都是圍繞Mentor USB OTG控制器(musbmhdrc)和TI PHY建構的。每個USB

控制器具有使用者可配置的32K位元組的端點FIFO。兩個USB子產品共享CPPI DMA控制器和相應的隊列管理器中斷步态器,電源管理子產品和PHY / UTMI時鐘。

下圖是AM335x的USB內建圖

USB實作(1)-Ti AM335x系列CPU

接下來詳細介紹USB控制器host和device模式的操作:

兩個USB子產品可以在一系列不同的環境中使用。 它們可以用作連接配接到正常USB主機(例如PC)的高速或全速USB外圍裝置點對點類型的安排。

對于一個USB外設配置,使用者可以選擇利用使用電纜端選擇角色通過連接配接電纜的mini或micro b(認為是利用 h/w option 也就是硬體控制),也可以選擇可選項方法:需要固件對相應的USB模式寄存器IDDIG位字段進行置1,使得USB控制器進入會話(session)也可以選擇利用firmware進行選擇(s/w option 軟體控制)。

同樣的,對于一個USB host配置,使用者可以選擇利用cable端進行選擇通過連接配接mini或者micro端(認為是利用 h/w option 也就是硬體控制),也可以選擇利用firmware進行選擇(s/w option 軟體控制)。

當使用軟體控制(sw option),USB ID 引腳是被忽略的,USB2.0 控制器判斷是host端還是device是利用 USB 模式寄存器 中的IDDIG位的狀态進行判斷,當IDDIG位在USB進入session之前被使用者程式設計置1時,會認為是device端,相反,如果IDDIG為0,控制器會認為是host端。

USB2.0 OTG 控制器開始決定運作模式(host or device)是當USB2.0 控制器進入到一個session中時,當發生以下事件時表示控制器進入到session:

1.探測到USBx_VBUSIN引腳的電壓>4.4v,并且控制器将DEVCTL[SESSION]位進行設定。

2.當固件置DEVCTL[SESSION]位時。

當DEVCTL[SESSION]位被置位時,控制器開始探測IDDIG的信号狀态,當信号狀态發現是低時(IDDIG被程式設計置為0)那麼USB2.0 控制器會認定角色是host,而當信号狀态發現是高時(IDDIG被程式設計置為1)會假定是device端,請注意,iddig是内部信号,可以通過固件從專用寄存器驅動為高電平或低電平。

當USB控制器确定其作為host主機的角色時,會将USBx_DRVVBUS引腳電平拉高來使能額外的power,也就是給外部device供電。USB2.0 控制器将等待USBx_VBUSIN引腳的電平拉高,在100ms後,如果沒有看到USBx_VBUSIN引腳電平拉高,會産生Vbus錯誤中斷;而當USBx_VBUSIN引腳電平拉高時,USB2.0控制器會等待一個device的連接配接,這是為了看到其中的一條資料線USB0 / 1_DP / DM被拉高。

當控制器确定其作為device角色時,也就是USB mode 寄存器的IDDIG位被程式設計置1,外部主機正在USBx_VBUSIN線上供電。那麼USB2.0控制器将設定DEVCTL [SESSION]位,訓示控制器進入會話。當控制器進入會話,它将強制USB2.0控制器感測iddig信号的狀态。一旦探測到iddig信号為高電平,它将使其1.5KΩ上拉電阻表示外部主機,它是一個Full-速度裝置。

接下來詳細分析USB作為host和device端的運作流程。

USB 控制器作為host端:

當USBx_ID引腳狀态接地或USB模式寄存器[iddig = bit8]被清除為0,USB控制器承擔主機的作用,當USB控制器進入會話時,應用/固件将DEVCTL [SESSION]位設定為1,它将承擔主機的角色。

1.進入挂起模式。 當作為主機運作時,可以提示USB控制器進入通過設定POWER寄存器中的SUSPENDM位來暫停模式。當該位被置位時,控制器将完成目前事務,然後停止事務排程程式和幀計數器。

2.發送恢複信令。 當應用程式要求控制器離開挂起模式,它需要清除POWER寄存器中的SUSPENDM位,将RESUME位置1 20ms。當RESUME位為高電平時,控制器将在總線上産生恢複信号。 後20 ms,CPU應清除RESUME位,此時幀計數器和事務處理排程程式将啟動。

3.響應遠端喚醒。 如果控制器處于從目标位置檢測到恢複信号在挂起模式下,UTMI + PHY将從低功耗模式退出,UTMI時鐘重新啟動。

然後,控制器将退出挂起模式,并自動将POWER中的RESUME位置1寄存器(位2)為'1'以接管從目标産生恢複信号。 如果恢複中斷使能,将産生中斷。

4.重置信号。 如果控制器在主機中,POWER寄存器(位3)中的RESET位置1模式,它将在總線上産生複位信号。 如果POWER寄存器(位5)中的HSENAB位為設定,也将嘗試談判高速運作。 軟體應保持RESET位置1至少20 ms,以確定正确重置目标裝置。 軟體清零後,控制器将啟動其幀計數器和事務排程器。 是否高速運作将由POWER寄存器(位4)的HSMODE位訓示。

USB 控制器作為device端:

當USBx_ID引腳懸空或USB模式時,USB控制器承擔外圍裝置的作用寄存器[iddig = bit8]設定為1(隻要iddig_mux,它是USB MODE寄存器的bit7也設定為1)之前的使用者應用程式進入會話。 當USB控制器進入會話時将承擔裝置的角色。

1.軟連接配接 - 在POR或USB子產品軟複位後,POWER寄存器(位6)的SOFTCONN位為清除為0.是以,控制器将顯示為斷開連接配接,直到軟體設定為SOFTCONN位到1.應用軟體可以選擇何時将PHY設定為其正常模式。 系統使用冗長的初始化過程可以使用此來確定初始化完成和系統

在連接配接USB之前準備執行枚舉。 一旦SOFTCONN位置1,該軟體還可以通過将該位清零來模拟斷開連接配接。

2.進入挂起模式 - 當作為外圍裝置運作時,控制器監視活動總線,當3毫秒沒有發生任何活動時,它進入挂起模式。 如果挂起中斷已啟用,此時将産生中斷。

3.此時,控制器可以保持活動狀态(是以能夠在Resume信号時檢測到在USB上發生),或者應用程式可能會通過停止其時鐘來安排禁用控制器。然而,如果時鐘不是,控制器将不能檢測USB上的恢複信号跑步 如果是這種情況,則需要外部硬體來檢測履歷信令(通過監視)DM和DP信号),以便可以重新啟動控制器的時鐘。

4.恢複信令 - 當總線上發生恢複信号時,首先必須是控制器的時鐘必要時重新啟動。 然後控制器将自動退出挂起模式。 如果恢複中斷是

将會産生一個中斷。

5.啟動遠端喚醒 - 如果軟體要在控制器處于啟動狀态時啟動遠端喚醒挂起模式,應将POWER [RESUME]位設定為1.軟體應該離開,然後将該位置1在将其重置為0之前約10 ms(最小2ms,最大15 ms)。

繼續閱讀