USB是英文Universal Serial BUS(通用串行總線)的縮寫,而其中文簡稱為“通用串行總線“,是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB發展到現在已經有USB1.0/1.1/2.0/3.0等多個版本。目前用的最多的就是USB1.1和USB2.0,USB3.0目前已經開始普及。
CKS32F4xx系列自帶的USB符合USB2.0規范。標準USB共四根線組成,除VCC/GND外,另外為D+和D-,這兩根數據線采用的是差分電壓的方式進行數據傳輸的。在USB主機上,D-和D+都是接了15K的電阻到地的,所以在沒有設備接入的時候,D+、D-均是低電平。而在USB設備中,如果是高速設備,則會在D+上接一個1.5K的電阻到VCC,而如果是低速設備,則會在D-上接一個1.5K的電阻到VCC。這樣當設備接入主機的時候,主機就可以判斷是否有設備接入,并能判斷設備是高速設備還是低速設備。 CKS32F4xx系列芯片自帶有USB OTG FS(全速)和USB OTG HS(高速),其中HS需要外擴高速PHY芯片實現,我們本章節對USB OTG FS進行介紹。
USB OTG FS主要特性
CKS32F4xx系列的USB OTG FS是一款雙角色設備(DRD)控制器,同時支持從機功能和主機功能,完全符合USB2.0規范的On-The-Go補充標準。此外,該控制器也可配置為“僅主機”模式或“僅從機”模式,完全符合USB2.0規范。在主機模式下,OTGFS支持全速(FS,12Mb/s)和低速(LS,1.5Mb/s)收發器,而從機模式下則僅支持全速(FS,12Mb/s)收發器。OTG FS同時支持HNP和SRP。CKS32F4xx系列的USB OTG FS主要特性可分為三類:通用特性、主機模式特性和從機模式特性。
- 通用特性 -
1、經USB-IF認證,符合通用串行總線規范第2.0版
2、集成全速PHY,且完全支持定義在標準規范OTG補充第1.3版中的OTG協議:
支持A-B器件識別(ID線)
支持主機協商協議(HNP)和會話請求協議(SRP)
允許主機關閉VBUS以在OTG應用中節省電池電量
支持通過內部比較器對VBUS電平采取監控
支持主機到從機的角色動態切換
3、可通過軟件配置為以下角色:
具有SRP功能的USB FS從機(B器件)
具有SRP功能的USB FS/LS主機(A器件)
USB On-The-Go全速雙角色設備
4、支持FS SOF和LS Keep-alive令牌
SOF脈沖可通過PAD輸出
可配置的幀周期
可配置的幀結束中斷
5、具有省電功能,例如在USB掛起期間停止系統、關閉數字模塊時鐘、對PHY和DFIFO電源加以管理
6、具有采用高級FIFO控制的1.25KB專用RAM
可將RAM空間劃分為不同FIFO,以便靈活有效地使用RAM
每個FIFO可存儲多個數據包
動態分配存儲區
FIFO大小可配置為非2的冪次方值,以便連續使用存儲單元
7、一幀之內可以無需要應用程序干預,以達到最大USB帶寬
- 主機(Host)模式特性 -
1、通過外部電荷泵生成VBUS電壓
2、多達8個主機通道(管道):每個通道都可以動態實現重新配置,可支持任何類型的USB傳輸
3、內置硬件調度器:
在周期性硬件隊列中存儲多達8個中斷加同步傳輸請求
在非周期性硬件隊列中存儲多達8個控制加批量傳輸請求
4、管理一個共享RX FIFO、一個周期性TX FIFO和一個非周期性TX FIFO,以有效使用USB數據RAM
- 從機(Slave/Device)模式特性 -
1、1個雙向控制端點0
2、3個IN端點(EP),可配置為支持批量傳輸、中斷傳輸或同步傳輸
3、3個OUT端點(EP),可配置為支持批量傳輸、中斷傳輸或同步傳輸
4、管理一個共享Rx FIFO和一個Tx-OUT FIFO,以高效使用USB數據RAM
5、管理多達4個專用Tx-IN FIFO(分別用于每個使能的IN EP),降低應用程序負荷支持軟斷開功能
圖1USB OTG FS框圖
對于USB OTG FS功能模塊,CKS32F4xx系列通過AHB總線訪問(AHB頻率必須大于14.2Mhz),其中48Mhz的USB時鐘,是來自時鐘樹圖里面的PLL48CK(和SDIO共用)。不過,我們提供了一套完整的 USB OTG驅動庫(包括主機和設備),通過這個庫可以很方便的實現所要的功能。
軟件設計
圖2USB配置代碼
配置時,我們重點要配置的就是USB_APP文件夾下面的代碼。 usb_bsp.c提供了幾個USB庫需要用到的底層初始化函數,包括:IO設置、中斷設置、VBUS配置以及延時函數等。USB Device(Slave)和USB Host共用這個.c文件。 usbd_usr.c提供用戶應用層接口函數,即USB設備類的一些回調函數,當USB狀態機處理完不同事務的時候,會調用這些回調函數,我們通過這些回調函數,就可以知道USB當前狀態,比如:是否枚舉成功、是否連接、是否斷開等,根據這些狀態,用戶應用程序可以執行不同操作,完成特定功能。 要使用USB OTG FS,必須在編譯器的全局宏定義里面,定義:USE_USB_OTG_FS 具體的USB庫調用函數篇幅較大,不再詳細描述,以下為main函數代碼:
int main(void) { u32t; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(168); uart_init(115200); LED_GPIO_Init(); USBH_Init(&USB_OTG_Core_dev,USB_OTG_FS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks); while(1) { USBH_Process(&USB_OTG_Core_dev, &USB_Host); if(bDeviceState==1)//á??ó?¨á¢á? { if(USBH_Check_HIDCommDead(&USB_OTG_Core_dev,&HID_Machine)) { USBH_HID_Reconnect(); } }else { if(USBH_Check_EnumeDead(&USB_Host)) { USBH_HID_Reconnect(); } } t++; if(t==200000) { LED1=!LED1; t=0; } } }
-
mcu
+關注
關注
146文章
17267瀏覽量
352004 -
收發器
+關注
關注
10文章
3445瀏覽量
106130 -
控制器
+關注
關注
112文章
16421瀏覽量
178840 -
usb
+關注
關注
60文章
7969瀏覽量
265343
原文標題:MCU微課堂|CKS32F4xx系列OTG_FS功能
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論