1.1簡介
實現(xiàn)USB2.0全速設(shè)備和APB1間的接口
支持掛起/恢復(fù),可以停止設(shè)備時鐘實現(xiàn)低功耗。
1.2主要的特征
1、符合USB2.0全速技術(shù)規(guī)范
2、可配置1到8個USB端點 【8個雙向端點,16個單向端點】
3、CRC生成、校驗,NRZI編碼、解碼、位填充【硬件實現(xiàn),可以通過抓取數(shù)據(jù)來實現(xiàn)】
4、支持同步傳輸
5、支持批量、同步端點的雙緩沖區(qū)機制
6、支持USB掛起、恢復(fù)操作【通過檢測3ms內(nèi)沒有sof信號為掛起】
7、幀鎖定時鐘脈沖生成
1.3功能描述
1、PC機與微控制器之間的數(shù)據(jù)傳輸共享一專用的數(shù)據(jù)緩沖區(qū)
2、緩沖區(qū)的大小由端點的數(shù)目與每個端點最大的數(shù)據(jù)分組決定,每個端點最大可使用512字節(jié),最多可使用16個單向或8個雙向端點。
3、USB模塊同主機通信,根據(jù)USB的規(guī)范實現(xiàn)了令牌分組,數(shù)據(jù)發(fā)送、接收和握手的處理。
4、硬件實現(xiàn)傳輸?shù)母袷,如CRC生成、校驗。
5、每個端點都有一個緩沖區(qū)描述塊,描述了緩沖區(qū)地址、大小、和需要傳輸?shù)淖止?jié)數(shù)。【端點配置描述符】
6、當數(shù)據(jù)和端點已配置,USB模塊識別有效的令牌分組時,將發(fā)生數(shù)據(jù)傳輸
7、USB模塊通過一個內(nèi)部的16位寄存器實現(xiàn)端口與專用緩沖區(qū)的數(shù)據(jù)交換。
8、根據(jù)傳輸?shù)姆较蚺c需求,發(fā)送或接收適當?shù)奈帐址纸M
9、數(shù)據(jù)傳輸結(jié)束,通過中斷處理程序可以得到端點需要的服務(wù)【讀取寄存器的狀態(tài),分揀出不同的中斷要求】
10、在同步傳輸和高吞吐量的批量傳輸中提供了雙緩沖機制
11、支持低功耗模式【通過寫控制寄存器,使模塊處于SUSPEND模式】
12、支持喚醒USB模式【在低功耗模式下,檢測USB數(shù)據(jù)線上的數(shù)據(jù)傳輸/將中斷源接到喚醒引腳上】
13、支持直接啟動或停止時鐘系統(tǒng)
1.4USB功能模塊描述
USB模塊實現(xiàn)了USB接口的所有特性:
1、串行接口控制器(SIE),實現(xiàn)的功能:幀頭同步域識別,位填充,CRC產(chǎn)生和校驗,PID驗證/產(chǎn)生,握手處理。 與USB收發(fā)器交互,利用分組緩沖接口提供的虛擬緩沖區(qū)存儲局部數(shù)據(jù)。 根據(jù)USB相關(guān)的事件產(chǎn)生相關(guān)的端點信號。如sof、USB復(fù)位,數(shù)據(jù)錯誤
2、定時器 :產(chǎn)生與幀開始同步的時鐘脈沖,并在3ms內(nèi)沒有數(shù)據(jù)傳輸,檢測為掛起狀態(tài)。
3、分組緩沖器。根據(jù)SIE的要求分配合適的緩沖區(qū),并定位到端點寄存器所指向的存儲區(qū)地址。地址自增。記錄傳輸?shù)淖止?jié)數(shù)防止緩存器溢出。
4、端點相關(guān)寄存器。 對于單向或單緩沖器的端點,一個寄存器可以實現(xiàn)兩個不同的端點。
一共8個寄存器,可以實現(xiàn)16個單向 /單緩沖的端點或者7個雙緩沖的端點或者這些端點的組合。
5、控制寄存器:包含USB的狀態(tài)信息,掛起低功耗等
6、中斷寄存器:獲取中斷源和中斷信息。
端點0作為單緩沖模式下的控制端點。
APB1接口部分
1、分組緩沖區(qū) 大小為512字節(jié)
2、仲裁器:通過向APB1提供較高的訪問優(yōu)先級來解決總線沖突。采用分時復(fù)用的策略
實現(xiàn)了虛擬雙端口SRAM.
3、寄存器映射單元: 把USB的寄存器映射成被APB1尋址的16位寬度的內(nèi)存集合。
4、APB1封裝:將整個USB模塊映射到APB1地址空間。
5、中斷映射單元:
USB低優(yōu)先級中斷(通道20):所有USB事件觸發(fā)。
USB高優(yōu)先級中斷(通道19):僅能由同步和雙緩沖批量的正確傳輸事件觸發(fā)。
USB喚醒中斷(通道42):由USB掛起模式的喚醒事件觸發(fā)。
1.5 USB模塊與應(yīng)運程序的交互
1、系統(tǒng)復(fù)位或上電 流程 先配時鐘信號再清除復(fù)位信號
2、分組緩沖區(qū)的結(jié)構(gòu)與用途 接口APB1的一半周期用于微控周期的訪問,一半周期用于USB模塊的訪問。USB模塊使用固定的時鐘48MHZ,APB1總線的時鐘必須大于8MHz.
3、端點初始化
第一步是把適當?shù)闹祵懙紸DDRn_TX或ADDRn_RX寄存器中, USB_EpnR寄存器的EP_TYPE位確定端點的基本類型, EP_KIND位確定端點的特殊特性。作為發(fā)送方,需要設(shè)置USB_EpnR寄存器的STAT_TX位來使能端點,并配置COUNTn_TX位決定發(fā)送長度。作為接收方,需要設(shè)置STAT_RX位來使能端點,并且設(shè)置BL_SIZE和NUM_BLOCK位,確定接收緩沖區(qū)的大小,以檢測緩沖區(qū)溢出的異常。
4、IN分組
第一步接收到一IN令牌,訪問相應(yīng)的ADDRn_TX和COUNTn_TX寄存器,并將這些寄存器中的數(shù)值存儲到內(nèi)部的16位寄存器ADDR和COUNT。第二步,根據(jù)DTOG_TX位發(fā)送DATA0或DATA1分組,并訪問緩沖區(qū)。第三步,從緩沖區(qū)讀到的第一個字節(jié)將被裝載到輸出移位寄存器中,并開始發(fā)送。四,接收到主機響應(yīng)的ACK,應(yīng)用程序需要通過USB_ISTR寄存器的EP_ID和DIR位識別產(chǎn)生中斷的USB端點。五、CTR_TX事件的中斷服務(wù)程序需要首先清除中斷標志位,然后準備好需要發(fā)送的數(shù)據(jù)緩沖區(qū),更新COUNTn_TX為下次需要傳輸?shù)淖止?jié)數(shù),最后再設(shè)置STAT_TX位為’11’(端點有效),再次使能數(shù)據(jù)傳輸。
5、OUT分組和SETUP分組
第一步,找到與該端點相關(guān)的ADDRn_RX和COUNTn_RX寄存器,并將ADDRn_RX 寄 存 器 的 值 保 存 在 內(nèi) 部 ADDR 寄 存 器 中 。第二步,初始化內(nèi)部寄存器。第三步:存儲數(shù)據(jù)到ADDR指向的分組緩沖區(qū)中。第三步,分步揍做校驗。
6、控制傳輸
第一步,建立過程。第二步,可選的數(shù)據(jù)過程。第三步,狀態(tài)過程。
1.6 雙緩沖機制
第一,將USB_EPnR寄存器的EP_TYPE位設(shè)為’00’,定義端點為批量端點
第二,將USB_EPnR寄存器的EP_KIND位設(shè)為’1’,定義端點為雙緩沖端點
1.7同步傳輸
第一,配置同步端點,
第二,雙緩沖機制配置
第三,初始化DTOG位。
第四,數(shù)據(jù)傳輸。
1.8掛起事件
第一,將USB_CNTR寄存器的FSUSP置為’1’,這將使USB模塊進入掛起狀態(tài)。
第二,將USB_CNTR寄存器的LP_MODE位置為’1’,這將消除模擬USB收發(fā)器的靜態(tài)電流消耗,但仍能檢測到喚醒信號。
第三,可以選擇關(guān)閉外部振蕩器和設(shè)備的PLL,以停止設(shè)備內(nèi)部的任何活動。
1.9喚醒事件
第一,清零USB_CNTR寄存器的FSUSP位。
第二,喚醒過程將由主機PC完成,可以利用USB_FNR寄存器的RXDP和
RXDM位來判斷喚醒是否完成。
2.0通用寄存器
1、控制寄存器、
2、中斷寄存器
3、幀編號寄存器
4、設(shè)備地址寄存器
5、分組緩沖區(qū)地址寄存器
2.1端點寄存器
2.2緩沖區(qū)描述表
1、發(fā)送緩沖區(qū)地址寄存器
2、發(fā)送緩沖區(qū)字節(jié)寄存器、
3、接收緩沖區(qū)地址寄存器
4、接收數(shù)據(jù)字節(jié)寄存器