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