極海APM32F407系列USB模塊介紹
極海APM32F407系列工業(yè)級高性能MCU,支持USB2.0協(xié)議,兼容低速(1.5Mbps)、全速(12Mbps)和高速模式(480Mbps)。高速模式下集成了內部的PHY(物理層),可以節(jié)約外部器件成本,操作簡便。
APM32F407高速模式下支持4K字節(jié)的專用RAM管理數據FIFO傳輸。單獨一幀不需要應用程序參與,從而達到最大的傳輸帶寬。作為設備時,支持最多6個端點,作為主機則支持最多12個通道。支持OTG標準,允許在主機和設備之間進行動態(tài)角色切換,支持模塊內嵌的DMA傳輸。
在功耗方面,APM32F407內置電源管理模塊,在USB模塊掛起時可關閉USB模塊所有時鐘源來降低功耗,還能通過停止物理層時鐘節(jié)省其翻轉而產生的動態(tài)功耗,同時支持OTG應用的主機關閉Vbus降低功耗。由此可知,APM32F407的USB模塊可高效地實現(xiàn)USB2.0協(xié)議,通過多個管道和FIFO緩存區(qū)使傳輸達到最大的USB帶寬,符合OTG補充標準,功耗管理表現(xiàn)優(yōu)秀。
USB簡介
USB(Universal Serial Bus)即通用串行總線,作為一種傳輸速度快、使用方便、連接靈活的數據通信技術被市場廣泛使用,但大家對它的了解有多少呢?今天極海芯君就與大家來聊聊USB的發(fā)展歷程、通訊形式。
USB傳輸標準進化史
自1996年USB-IF(USB Implementers Forum)組織發(fā)布USB 1.0標準以來,USB已經演化了諸多版本。其中 USB1.1支持1.5Mbps低速模式和12Mbps全速模式,而USB2.0作為MCU常用數據通信版本,在兼容低速和全速的同時,還支持480Mbps的高速模式。
USB標準版本
USB通信組件
USB通信由主機和設備(從機)組成,主機發(fā)起通信,符合條件的設備做出響應。最前線的端點接收主機數據,多個“志同道合”的端點組成接口,多個接口組成配置,一個設備可有個配置,然后USB通過四線電纜傳輸信號和電源。
Q:數據線(D-/D+)和端點有什么關系?
A:數據線是傳送帶,端點負責向傳送帶收放數據,而對應的主機則是使用通道來收放數據。端點存在設備內部,用于管理數據。
USB描述符
Q:如何區(qū)分設備呢?
A:這就涉及到USB描述符了。描述符是USB協(xié)議規(guī)定的符號集,可以分為設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符等。
*需注意,接口描述符和端點描述符通常是和配置描述符綁定的。配置描述符自身長度為9字節(jié),接口、端口等描述符銜接在配置描述符后面。所以主機只需要獲取配置描述符集合就能知道設備的通信信息。
Q:什么是USB的類?
A:USB常見的傳輸形式有鼠標、U盤、音視頻等,不同類型的傳輸有著不同的傳輸規(guī)則,同類型傳輸規(guī)則則保持一致,這就產生了“類”的概念。主機識別出設備的類代碼,就會按照該類的規(guī)則來傳輸。不同基類還有自己的子類和協(xié)議。類代碼一般存放于接口描述符,少數存放于設備描述符。
USB請求
USB規(guī)定了8個字節(jié)作為一個請求,通過主機發(fā)送標準的獲取描述符請求,設備接收到請求后,將對應描述符發(fā)送至主機。
USB設備請求結構
表注:D0表示字節(jié)的第0位,D1表示第1位,依次類推
USB標準請求
表注:B后綴表示二進制
利用標準請求即可實現(xiàn)設備枚舉,枚舉的過程其實就是主機識別設備的過程。枚舉的大致流程:
*除了標準請求外,還有類請求、供應商請求,當請求中bmRequestType的第5、6位的值對應為類請求時,該8個字節(jié)請求的規(guī)范就會按照類的規(guī)則來定義。
USB控制傳輸
主機發(fā)送請求至設備,設備返回描述符至主機,主機收到設備發(fā)過來的描述符,需要返回一個0數據包表示狀態(tài),表明成功接收數據,這個傳輸方式在USB中稱為控制傳輸。
一次USB控制傳輸需要Setup事務發(fā)送請求至設備,然后根據請求判斷數據傳輸方向及數據長度,數據事務(IN或OUT)之后,數據的接收方需要發(fā)送一個0長度數據事務(IN或OUT)來結束控制傳輸??刂苽鬏敱仨氂兄鳈C的請求(Setup),而數據過程取決于該請求,若無數據,則直接到狀態(tài)過程。狀態(tài)過程屬于數據包,但它沒有內容。
USB事務構成
USB包構成
令牌包由主機發(fā)出,設備接到令牌包后,如果為Setup,則接收數據包(8字節(jié)請求);如果為IN令牌,則發(fā)送數據至主機,OUT令牌相反。
握手包是在數據包結束之后,數據的接收方進行應答,應答方式有ACK(確認)、NAK(未就緒)、STALL(出錯)和NYET(高速OUT事務中表示無空間)。
MCU中USB設備的數據流
數據緩沖區(qū)-FIFO
MCU一般使用FIFO作為數據緩存區(qū),MCU里的FIFO它是一種先進先出的數據緩存寄存器。USB在事務和包中,我們可以了解到,當設備收到主機的令牌包后,根據不同的令牌包,進行接收或發(fā)送數據。比如收到了Setup令牌,那設備會先將數據保存在接收FIFO中,置起相關標準位,設備就可以去接收FIFO中取出Setup請求;比如收到的是IN令牌,那設備會從發(fā)送FIFO中發(fā)送預先壓棧的數據,若發(fā)送FIFO無數據則返回NAK握手包。