OTGFS介紹
AT32F435/437包含2個獨立的OTGFS,編號OTGFS1和OTGFS2,本章將描述OTGFS支持的一些基本功能。 OTGFS1和OTGFS2特性完全相同。
圖1 OTGFS框圖
OTGFS特性
OTGFS通用特性:
支持USB2.0協(xié)議
內(nèi)置獨立1280字節(jié)SRAM
內(nèi)置全速PHY
內(nèi)置上下拉電阻
SOF信號輸出
低功耗模式
支持忽略VBUS狀態(tài)
支持ID檢測以切換主機設(shè)備模式
不支持HNP/SRP協(xié)議(PHY不支持,不能動態(tài)切換模式,只能根據(jù)ID狀態(tài)切換模式)
AHB時鐘大于30MHz
OTGFS設(shè)備模式特性:
僅支持全速設(shè)備
支持內(nèi)部1.5KΩ上拉
支持軟件斷開連接
支持1個雙向控制端點0
支持7個IN端點,端點號1-7
支持7個OUT端點,端點號1-7
支持控制傳輸,大容量傳輸,中斷傳輸,同步傳輸
端點接收FIFO共享
端點發(fā)送FIFO專用
支持無晶振(crystal-less)
OTGFS主機模式特性:
支持全速和低速
支持內(nèi)部15KΩ下拉
支持16個主機通道
支持控制傳輸,大容量傳輸,中斷傳輸,同步傳輸
通道接收FIFO共享
通道發(fā)送FIFO專用
OTGFS全速PHY
OTGFS內(nèi)置支持全速/低速的PHY,為主機和設(shè)備模式提供通信支持。
1、DP和DM內(nèi)置上下拉電阻,由OTGFS根據(jù)模式自動使能上下拉電阻
當(dāng)OTGFS處于設(shè)備模式時,DP 1.5KΩ上拉自動使能
當(dāng)OTGFS處于主機模式時,DP和DM 15KΩ下拉自動使能
2、ID線內(nèi)置上拉
ID線為高電平,默認為設(shè)備模式
ID線為低電平,為主機模式
3、設(shè)備模式下的VBUS檢測(可忽略VBUS檢測)
設(shè)備模式下,僅支持VBUS高低電平檢測,當(dāng)VBUS為高電平,OTGFS認為是有效電平,將使能DP的上拉電阻,讓主機識別到設(shè)備插入。 當(dāng)VBUS為低電平,OTGFS認為是無效電平,此時不使能DP上拉,處于斷開模式。
在設(shè)備模式下,如果想不檢測VBUS,可通過設(shè)置寄存器OTGFS_GCCFG. VBUSIG=1來實現(xiàn),此時可將檢測VBUS的引腳釋放出來給其它外設(shè)使用。
4、PHY的低功耗模式
OTGFS全速PHY支持低功耗模式,可以通過設(shè)置寄存器OTGFS_GCCFG. LP_MODE=1讓PHY處于低功耗模式。
OTGFS GPIO引腳
435/437 OTGFS1/2使用GPIO引腳如下表所示:
表1 OTGFS1 GPIO引腳
表2 OTGFS2 GPIO引腳
注:USB_OE信號當(dāng)USB在傳輸數(shù)據(jù)時,會翻轉(zhuǎn)此信號
OTGFS 48MHz時鐘
需要給OTGFS提供48MHz±0.25%的時鐘來用于USB總線采樣。 48MHz時鐘可以直接來源HICK,也可以通過PLLCLK分頻得到。
圖2 USB 48MHz時鐘來源
注意:當(dāng)OTGFS作為HOST時,必須使用外部晶振通過PLL分頻作為USB 48MHz時鐘。
USB時鐘選擇HICK
通過設(shè)置如下寄存器選擇HICK:
1、CRM_MISC1。??说戏?1;
HICK是否分頻,1表示不分頻,0表示6分頻
2、CRM_MISC1。HICK_TO_USB=1;
1 表示USB 48MHz時鐘來源是HICK,0表示來源為PLL分頻。
如果USB 48MHz時鐘來源選擇HICK時,在設(shè)備模式下需要開啟ACC(HICK自動校準)功能,ACC功能利用USB產(chǎn)生的SOF信號來作為參考信號,實現(xiàn)對HICK時鐘的采樣和校準。 詳細功能可參考RM HICK自動時鐘校準(ACC)章節(jié)。
注意:當(dāng)OTGFS作為HOST時,必須使用外部晶振通過PLL分頻作為USB 48MHz時鐘,因為在HOST模式下不能通過ACC校準HICK。
使用HICK作為USB 48MHz時鐘代碼示例:
USB時鐘選擇PLLCK****分頻
USB 48MHz時鐘默認是由PLL通過分頻得到,435/437系統(tǒng)時鐘最高可達到288Mhz,通過配置USB分頻因子,達到為USB提供48MHz時鐘。
通過配置已下寄存器進行PLL分頻:
CRM_MISC2. USBDIV=USB分頻因子
USB分頻因子支持:1.5分頻,不分頻,2.5分頻,2分頻,3.5分頻,3分頻,4.5分頻,4分頻,5.5分頻,5分頻,6.5分頻,6分頻,7分頻。
使用PLL分頻作為USB 48MHz時鐘代碼示例:
OTGFS數(shù)據(jù)FIFO管理
OTGFS分配專用的1280 Byte SRAM作為數(shù)據(jù)FIFO,在主機或設(shè)備模式下,可通過軟件配置寄存器給端點/通道分配FIFO。
注意:分配的FIFO總大小不要超過**1280 Byte
設(shè)備模式下的FIFO分配
設(shè)備模式下所有端點的接收共享一個接收FIFO,每個端點的發(fā)送對應(yīng)一個專有的發(fā)送FIFO。
圖3 設(shè)備模式FIFO分配
1、RX_FIFO
所有端點的接收共享這一塊FIFO,配置寄存器OTGFS_GRXFSIZ. RXFDEP,此寄存器值表示接收FIFO大小,注意單位為word(4Byte)。
2、TX_FIFO0
端點0的發(fā)送FIFO,配置寄存器OTGFS_DIEPTXF0,需要配置起始地址和FIFO大小。
OTGFS_DIEPTXF0。INEPT0TXSTADDR=OTGFS_GRXFSIZ.RXFDEP
OTGFS_DIEPTXF0. INEPT0TXDEP=端點0發(fā)送FIFO大小
3、TX_FIFO1
端點1的發(fā)送FIFO,配置寄存器OTGFS_DIEPTXF1,需要配置起始地址和FIFO大小。
OTGFS_DIEPTXF1. INEPTXFSTADDR=OTGFS_GRXFSIZ. RXFDEP+端點0發(fā)送FIFO大小OTGFS_DIEPTXF1. INEPTXFDEP=端點1發(fā)送FIFO大小
...
注意:對應(yīng)端點FIFO配置寄存器中FIFO大小值的單位都是word(4Byte)。
注意:發(fā)送端點的起始地址一般配置為前面所有端點已占用的FIFO大小,例程如端點2的發(fā)送FIFO起始地址為**RX_FIFO大小+TX_ FIFO0大小+TX_FIFO1**大小。
主機模式下的FIFO分配
主機模式下,所有通道共享一個接收FIFO,通道發(fā)送FIFO分為非周期性發(fā)送FIFO和周期性發(fā)送FIFO。
非周期性和周期性通過傳輸類型來區(qū)分,每個主機通道寄存器都有配置傳輸類型,包含4種傳輸類型:控制傳輸(Control),同步傳輸(ISO),批量傳輸(Bulk),中斷傳輸(Interrupt)
非周期性:控制傳輸(Control),批量傳輸(Bulk)
周期性傳輸:同步傳輸(ISO),中斷傳輸(Interrupt)
圖4 主機模式下FIFO分配
1、RX_FIFO
所有主機通道的接收共享這一塊FIFO,配置寄存器OTGFS_GRXFSIZ. RXFDEP,此寄存器值表示接收FIFO大小,注意單位為word(4Byte)。
2、非周期性TxFIFO
非周期性的主機通道發(fā)送FIFO,配置寄存器OTGFS_GNPTXFSIZ,需要配置起始地址和FIFO大小。
OTGFS_GNPTXFSIZ。NPTXFSTADDR=OTGFS_GRXFSIZ.RXFDEP
OTGFS_GNPTXFSIZ. NPTXFDEP=非周期性發(fā)送FIFO大小
3、Periodic_TxFIFO
周期性的主機通道發(fā)送FIFO,配置寄存器OTGFS_HPTXFSIZ,需要配置起始地址和FIFO大小。
OTGFS_HPTXFSIZ。PTXFSTADDR=OTGFS_GRXFSIZ.RXFDEP+OTGFS_GNPTXFSIZ.NPTXFDEP
OTGFS_HPTXFSIZ. PTXFSIZE=周期性發(fā)送FIFO大小
注意:對應(yīng)FIFO配置寄存器中FIFO大小值的單位都是word(4Byte)
OTGFS中斷結(jié)構(gòu)
圖5 OTGFS中斷結(jié)構(gòu)
全局常用中斷OTGFS_GINTSTS,此寄存器中包含了主機和設(shè)備的中斷標志,部分中斷標志只在設(shè)備模式或者主機模式下有效。
1、設(shè)備和主機模式都有效中斷標志
OTGFS_GINTSTS. MODEMIS:模式不匹配(主機和設(shè)備都適用)
OTGFS_GINTSTS. SOF:SOF中斷(主機和設(shè)備都適用)
OTGFS_GINTSTS. RXFLVL:接收FIFO非空(主機和設(shè)備都適用)
OTGFS_GINTSTS. CONIDSCHG:ID線狀態(tài)變化(主機和設(shè)備都適用)
OTGFS_GINTSTS. WKUPINT:喚醒信號中斷(主機和設(shè)備都適用)
2、僅主機模式下有效中斷標志
OTGFS_GINTSTS. NPTXFEMP:非周期發(fā)送FIFO為空(主機適用)
OTGFS_GINTSTS. PRTINT:主機端口中斷(主機適用)
OTGFS_GINTSTS. HCHINT:主機通道中斷(主機適用)
OTGFS_GINTSTS. PTXFEMP:周期性發(fā)送FIFO為空(主機適用)
OTGFS_GINTSTS. DISCONINT:設(shè)備斷開(主機適用)
3、僅設(shè)備模式下有效中斷標志
OTGFS_GINTSTS. USBSUSP:設(shè)備掛起(設(shè)備適用)
OTGFS_GINTSTS. USBRST:USB復(fù)位(設(shè)備適用)
OTGFS_GINTSTS. ENUMDONE:枚舉速度完成(設(shè)備適用)
OTGFS_GINTSTS. ISOOUTDROP:同步OUT包丟失(設(shè)備適用)
OTGFS_GINTSTS. IEPTINT:IN端點中斷(設(shè)備適用)
OTGFS_GINTSTS. OEPTINT:OUT端點中斷(設(shè)備適用)
OTGFS_GINTSTS. INCOMPISOIN:未完成的同步IN傳輸(設(shè)備適用)
圖6 中斷處理流程
OTGFS模式
通過配置如下寄存器讓OTGFS處于OTG模式:
OTGFS_GUSBCFG. FDEVMODE=0(非強制設(shè)備模式)
OTGFS_GUSBCFG. FHSTMODE=0(非強制主機模式)
435/437 OTGFS可以通過檢測ID線上的狀態(tài)來確定當(dāng)前處于設(shè)備模式還是主機模式。 當(dāng)ID狀態(tài)為高電平時為設(shè)備模式,當(dāng)ID狀態(tài)為低電平時為主機模式。
寄存器GINTSTS.CURMOD=0,表示當(dāng)前為設(shè)備模式
寄存器GINTSTS.CURMOD=1,表示當(dāng)前為主機模式
另外可以根據(jù)GINTSTS. CONIDSCHG中斷來檢測當(dāng)前ID線的狀態(tài)是否有變化,當(dāng)檢測到ID線有變化時,根據(jù)當(dāng)前的模式位(GINTSTS.CURMOD),應(yīng)用程序選擇初始化主機程序還是設(shè)備程序。
圖7 OTG模式連接示意圖
設(shè)備模式
435/437 OTGFS作為設(shè)備時僅支持全速設(shè)備,不支持低速和高速設(shè)備。 支持8個IN端點(包括端點0),8個OUT端點(包括端點0)。
OTGFS強制作為設(shè)備
通過設(shè)定如下寄存器將OTGFS強制作為設(shè)備:
OTGFS_GUSBCFG. FDEVMODE=1(強制設(shè)備模式)
OTGFS_GUSBCFG. FHSTMODE=0(非強制主機模式)
圖8 設(shè)備模式連接示意圖
注意:綠色線表示可選連接,當(dāng)使能VBUSIG信號時,VBUS**引腳可作為普通I/O。
OTGFS設(shè)備常用功能
本節(jié)介紹OTGFS作為設(shè)備模式時的一些功能。
1、軟件斷開
可以通過配置設(shè)備模式下的寄存器,達到讓設(shè)備斷開與主機的連接。 原理是通過控制DP的上拉使能來控制連接狀態(tài)。
配置OTGFS_DCTL. SFTDISCON=1,DP上拉不使能,斷開連接。
配置OTGFS_DCTL. SFTDISCON=0,DP上拉使能,開始連接。
2、Remote wakeup喚醒
當(dāng)設(shè)備進入掛起狀態(tài)之后,可以通過Remote wakeup功能喚醒主機。
喚醒流程:
設(shè)置OTGFS_DCTL. RWKUPSIG=1;
延遲1-15ms
設(shè)置OTGFS_DCTL. RWKUPSIG=0;
3、忽略VBUS信號
在設(shè)備模式下,可以忽略VBUS信號,此模式可以釋放VBUS引腳給其它外設(shè)使用。 通過配置OTGFS_GCCFG. VBUSIG=1來忽略VBUS信號。
OTGFS設(shè)備端點配置
本節(jié)簡單介紹OTGFS端點寄存器的配置。
IN 端點放置
IN端點寄存器OTGFS_DIEPCTLx(x為0~7),端點寄存器存放端點的基本信息。
如下是一個IN端點的基本配置選項:
OTGFS_DIEPCTLx.MPS(最大包長度)
OTGFS_DIEPCTLx.EPTYPE(端點類型:控制傳輸,同步傳輸,塊傳輸,中斷傳輸)
OTGFS_DIEPCTLxTXFNUM(發(fā)送FIFO編號,正常跟端點號相同)
OTGFS_DIEPCTLx.USBACEPT(激活端點)
OTGFS_DIEPCTLx.SNAK(設(shè)置端點為NAK狀態(tài))
OTGFS_DIEPCTLx.CNAK(清除端點NAK狀態(tài))
OTGFS_DIEPCTLx.STALL(設(shè)置端點為STALL狀態(tài))
OTGFS_DIEPCTLx.EPTENA(開始傳輸數(shù)據(jù))
輸出端點放置
OUT端點寄存器OTGFS_DOEPCTLx(x為0~7),端點寄存器存放端點的基本信息。
如下是一個OUT端點的基本配置選項:
OTGFS_DOEPCTLx.MPS(最大包長度)
OTGFS_DOEPCTLx.EPTYPE(端點類型:控制傳輸,同步傳輸,塊傳輸,中斷傳輸)
OTGFS_DOEPCTLx.USBACEPT(激活端點)
OTGFS_DOEPCTLx.SNAK(設(shè)置端點為NAK狀態(tài))
OTGFS_DOEPCTLx.CNAK(清除端點NAK狀態(tài))
OTGFS_DOEPCTLx.STALL(設(shè)置端點為STALL狀態(tài))
OTGFS_DOEPCTLx.EPTENA(開始傳輸數(shù)據(jù))
主機模式
435/437 OTGFS作為主機模式時支持全速/低速設(shè)備,同時支持16個主機通道。
OTGFS強制作為主機
通過設(shè)定如下寄存器將OTGFS強制作為主機,此時DP/DM下拉自動使能:
OTGFS_GUSBCFG. FDEVMODE=0(非強制設(shè)備模式)
OTGFS_GUSBCFG. FHSTMODE=1(強制主機模式)
圖9 主機模式連接示意圖
OTGFS主機常用功能
1、支持全速和低速設(shè)備
通過OTGFS_HPRT. PRTSDP判斷當(dāng)前連接的設(shè)備是全速設(shè)備還是低速設(shè)備;
OTGFS_HPRT. PRTSDP=1表示全速
OTGFS_HPRT. PRTSDP=2表示低速
2、復(fù)位
通過設(shè)置OTGFS_HPRT. PRTRST來設(shè)置端口復(fù)位;
OTGFS_HPRT。PRTRST=1;
延時10ms
OTGFS_HPRT。PRTRST=0;
3、掛起
通過設(shè)置OTGFS_HPRT. PRTSUP=1來設(shè)置端口掛起,此時主機停止發(fā)送SOF;
OTGFS主機通道配置
主機通道配置寄存器OTGFS_HCCHARx(x為0~15),通道寄存器存放通道的基本信息。
如下是一個通道的基本配置選項:
OTGFS_HCCHARx.MPS(最大包長度)
OTGFS_HCCHARx.EPTNUM(指示設(shè)備端點號)
OTGFS_HCCHARx.EPTDIR(指示設(shè)備端點方向 OUT/IN)
OTGFS_HCCHARx.LSPDDEV(低速設(shè)備)
OTGFS_HCCHARx.EPTYPE(端點類型:控制傳輸,同步傳輸,塊傳輸,中斷傳輸)
OTGFS_HCCHARx.MC(周期性傳輸在每幀內(nèi)傳輸?shù)氖聞?wù)個數(shù))
OTGFS_HCCHARx.DEVADDR(設(shè)備地址)
OTGFS_HCCHARx.ODDFRM(周期性傳輸奇數(shù)幀/偶數(shù)幀)
OTGFS_HCCHARx.CHDIS(通道禁止)
OTGFS_HCCHARx.CHENA(通道使能)
-
usb
+關(guān)注
關(guān)注
60文章
7846瀏覽量
263304 -
主機
+關(guān)注
關(guān)注
0文章
970瀏覽量
34963 -
PHY
+關(guān)注
關(guān)注
2文章
299瀏覽量
51617 -
GPIO
+關(guān)注
關(guān)注
16文章
1182瀏覽量
51738 -
AT32
+關(guān)注
關(guān)注
1文章
110瀏覽量
2046
原文標題:AT32講堂047 | 雅特力AT32F435/437 OTGFS應(yīng)用筆記
文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論