PIC18FX455/X550 系列器件包含全速和低速兼容的USB串行接口引擎(Serial Interface Engine,SIE),它允許在任何USB主機和PIC單片機之間進行高速通信。 可以利用內部收發器或通過外部收發器將SIE 直接連接到USB。內部的3.3V穩壓器也可以在5V的應用中被用作內部收發器的電源。
USB模塊還包含了某些特殊硬件以提高其工作性能。在器件的數據存儲空間(USB RAM)中提供了雙端口存儲器,以便單片機和 SIE 之間可以直接進行存儲器訪問。 此外,還提供了緩沖器描述符,允許用戶任意設置USB RAM 空間中供端點使用的存儲區。 此外還提供了并行通信端口以方便大量數據的不間斷傳輸,比如將數據等時傳送到外部存儲器緩沖器。
USB 狀態和控制
? USB控制寄存器(UCON ):用于控制模塊在傳輸過程中的操作, 此寄存器包含控制行為的配置位。USBEN,將此位置1 前還是需要預先對模塊進行全面的配置。PKTDIS位,當接受到SETUP令牌時,此位被SIE置1,以允許處理SETUP。單片機不能將此位置1,只能將此位清零,以允許SIE繼續發送和或接收。RESUME位,允許外設通過執行恢復信令來進行遠程喚醒。 要進行有效的遠程喚醒,固件必須將RESUME位置1 并保持此狀態10 ms ,然后將此位清零。SUSPND 位將模塊和支持電路(即穩壓器)置于低功耗模式。 SIE 的輸入時鐘也被禁止。響應IDLEIF 中斷時,該位必須由軟件置位。 在產生ACTVIF 中斷之后,由固件將此位復位。 當此位有效時,設備與與總線處于連接狀態,但是收發器輸出處于空閑狀態。 VUSB引腳上的電壓根據此位值的不同而變化。在 IDLEIF 請求之前將此位置1,將導致不可預料的總線行為。
? USB配置寄存器(UCFG ):在通過 USB通信之前,必須對與模塊相關的內部和 / 或外部硬件進行配置。 大部分配置是使用UCFG 寄存器獨立的。USB穩壓器也是通過此配置寄存器控制的。UFCG 寄存器中的控制位可用于控制USB模塊的絕大部分系統級行為,包括: ? 總線速度(全速和低速)? 片上上拉電阻使能 ? 片上收發器使能 ? 乒乓緩沖器的使用。
內部收發器,USB外設有一個內置的USB 2.0 全速和低速兼容的收發器,在USB內部與SIE 相連。 此功能部件在低成本的單芯片應用中很有用。UTRDIS 位控制收發器,它在默認情況下是使能的(UTRDIS=0)。FSEN 位控制收發器的速度,將此位置1將使能全速工作模式。片上USB上拉電阻由UPUEN 位控制。
外部收發器,此模塊為片外收發器提供支持。 在因為物理條件限制而要求收發器遠離SIE 的應用中要用到片外收發器。例如,需要與USB電氣隔離的應用可以通過某些隔離元件將外部收發器連接到單片機的SIE。通過將UTRDIS 位置1 可以使能外部收發器。模塊中有6 條信號線用來與外部收發器進行通信并控制外部收發器:
? VM :單端D-線路輸入 (VM 和VP 信號將串行總線上不能用RCV 信號捕捉的情況報告給SIE。這些信號的組合狀態和它們的說明在表17-1 和表17-2中列出。)
? VP: 單端D+線路輸入
? RCV:差分接收器輸入 (RCV信號是由外部收發器輸出到SIE 的,它表示將串行總線上的差分信號轉換為一串單脈沖序列)
? VMO:差分線路驅動器輸出 (VPO和VMO信號是由SIE 輸出到外部收發器的)
? VPO:差分線路驅動器輸出
? OE : 輸出使能
? USB傳輸狀態寄存器(USTAT):USB 狀態寄存器報告SIE 中的事務狀態。 當SIE 發出USB傳輸完成中斷信號時,應該讀USTAT以確定傳輸的狀態。 USTAT 包含傳輸端點編號、傳輸方向和乒乓緩沖器指針值(如果使用的話)。當SIE使用緩沖器讀寫數據結束后,它將更新USTAT寄存器。 如果在為事務完成中斷提供服務之前進行了另一次USB傳輸,SIE 將把下一次傳輸的狀態保存到狀態FIFO中。
? USB設備地址寄存器(UADDR):USB地址寄存器包含唯一的USB地址,當此地址有效時,可被外設識別。 當接收到由URSTIF 表示的USB復位信號,或接收到來自單片機的復位信息時,UADDR 復位為00h。 單片機必須在USB啟動階段(枚舉)寫入USB地址,該操作受Microchip USB固件支持。
? 幀編號寄存器(UFRMH:UFRML):幀編號寄存器包含 11 位幀編號。 低字節被保存在UFRML中,而高3 位則被保存在UFRMH 中。 不管是否接收到SOF令牌,都用當前幀編號更新該寄存器對。對于單片機而言,這些寄存器是只讀的。 幀編號寄存器主要用于同步傳輸。
? 端點使能寄存器0 到15(UEPn):
USB 端點控制:16個可用的雙向端點中的每一個都有自己獨立的控制寄存器UEPn(其中n 表示端點編號)。每個寄存器相應控制位的功能都是相同的。EPHSHK位控制端點握手,將此位置1將使能USB握手。 通常,除使用同步端點以外,此位總是置1 的。EPCONDIS位用于使能或禁止通過端點進行的USB控制操作(SETUP)。清零此位將使能SETUP 事務;注意必須將相應的EPINEN和EPOUTEN 位置1 以使能IN和OUT事務。 因為USB規范中端點0是默認控制端點,所以對于端點0 ,此位將總是被清零的。EPOUTEN 位用于使能或禁止主機的USBOUT事務。 將此位置1 則使能OUT事務。 同樣,EPINEN 位將使能或禁止主機的 USB IN事務。EPSTALL 位用于指示端點的 STALL 狀態。如果一個特殊的端點發出了一個STALL ,那么SIE 將把這對端點的EPSTALL位置1。 此位將保持置1 直到由固件清零或SIE 復位。
USB RAM:USB數據通過稱為USB RAM的存儲空間在單片機內核和SIE之間傳送。 USB RAM 是一個特殊的雙端口存儲器,被映射到普通數據存儲空間的Bank 4到Bank 7(400h到7FFh),總容量為 1KB。Bank 4 (400h到4FFh)專用于端點緩沖控制,而Bank 5到Bank7 可用于USB數據。根據所使用的緩沖類型,除了Bank 4的8 個字節之外,所有字節都可用作USB緩沖器空間。雖然USB RAM 可用作單片機的數據存儲器,但由SIE訪問的區域不能被單片機訪問。這里采用了一種信號機制來確定任意給定時間內對專用緩沖器的訪問。
幀:總線上的通信信息被劃分為多個1ms的時隙,稱為幀。每幀都包含多個設備和端點的多種事務。
USB規范中定義了四種傳輸類型:
? 同步:這種傳輸類型可確保及時傳遞大量數據(最大為1023字節),但是不能保證數據的完整性。 它適用于丟失少量數據無關緊要的通信應用,比如音頻數據。
? 批量:這種傳輸類型允許在傳輸大量數據的同時確保數據的完整性,但是傳輸時限不能保證。
? 中斷:這種傳輸類型可以確保及時傳輸少量數據,并確保數據的完整性。
? 控制:這種類型提供設備啟動控制。全速設備支持所有傳輸類型,而低速設備只能使用中斷和控制傳輸方式。
緩沖器描述符和緩沖器描述符表
Bank 4 中的寄存器組成稱為“緩沖器描述符表”(Buffer Descriptor Table,BDT )的結構,專門用于控制端點緩沖器。 這為用戶構建和控制各種長度和配置的端點緩沖器提供了靈活的方法。BDT 由緩沖描述符(Buffer Descriptor,BD)組成,它用于定義和控制USB RAM 空間中的實際緩沖器。 每個BD由四個寄存器組成,其中 n 代表64個可能的BD中的一個(范圍是0 到63):
? BDnSTAT: BD 狀態寄存器
? BDnCNT : BD 字節計數寄存器
? BDnADRL :BD低地址寄存器
? BDnADRH :BD高地址寄存器
BD 在序列中總是以一個四字節的數據塊BDnSTAT:BDnCNT:BDnADRL:BDnADRH)出現, BDnSTAT的地址總是一個相對于400h的偏移量4n(以十六進制數表示),其中 n 是緩沖器描述符編號。根據所使用的緩沖配置(第17.4.4 節“乒乓緩沖”),最多可以有32、33或64組緩沖器描述符。 BDT 至少要8 字節長,因為USB規范規定,每個設備必須具有初始啟動所需的輸入和輸出端點0。 根據端點和緩沖配置,BDT 可以有256 個字節。
雖然可以被看作特殊功能控制寄存器,緩沖器描述符的狀態和地址寄存器并不是硬件映射的,這與 Bank 15 中的傳統單片機SFR不同。 如果與特定BD對應的端點未被使能,則該端點的寄存器將不被使用。它表現為可用的RAM 空間,而不是未實現的地址。只能通過將UEPn《1》位置1 使能端點,才能將這些地址作為BD寄存器使用。 如同數據存儲區的任何單元一樣,BD寄存器的值在器件復位時都會是不確定的。
圖17-6 所示為一個BD的示例,該 BD用于從500h開始的40字節緩沖器。 如果已經使用UEPn 寄存器使能了對應的端點,就只有特定的BD寄存器組有效。 USBRAM中所有BD寄存器都可用。 在使能端點之前應該設置好每個端點的BD。
BD狀態和配置:緩沖器描述符不僅僅定義端點緩沖器的大小,還決定了它的配置和控制。 大部分配置都是通過BD狀態寄存器BDnSTAT完成的。 每個BD都有與自己一一對應的、帶編號的BDnSTAT寄存器。和其他控制寄存器不同,BDnSTAT 寄存器內的位的設置與具體應用息息相關。 有兩種不同的配置,決定特定時間修改BD和緩沖區的是單片機還是USB模塊。 只有一個位是這兩種配置共享的。
緩沖器所有權:因為CPU和USB模塊共享緩沖器及其BD,所以使用了簡單的信號機制來區分更新BD 和相關緩沖器的是CPU還是USB。可以使用UOWN(BDnSTAT《7》)作為信號來加以區分。UOWN 是兩種配置的BDnSTAT中唯一共享的位。
當UOWN清零時,BD 由單片機內核“所有”。 當UOWN位置1 時,BD和緩沖器模塊由USB外設“所有”,此時內核不能夠修改 BD 或相應的數據緩沖器。注意,當SIE 擁有緩沖器時單片機內核仍可以讀BDnSTAT ,反之亦然。
根據寄存器的更新源的不同,緩沖器描述符具有不同的意義。 在分配給USB外設所有權之前,用戶可以通過BDnSTAT 配置外設的基本操作。 此時,也可設置字節計數和緩沖器地址寄存器。
當UOWN置1 時,用戶就不能再依賴寫入BD的值了。此時,SIE 根據需要更新BD,改寫原來的 BD值。 SIE將使用PID 令牌來更新 BDnSTAT 寄存器,同時也將更新傳輸計數值BDnCNT 。在準備設置端點之前,BDT 的BDnSTAT 字節總是最后更新的字節。 當事務完成時,SIE 將清零UOWN位。 唯一例外的情況是在使能KEN和/ 或BSTALL 的時候。當UOWN位置1 時,硬件上并沒有任何機制來阻止單片機對存儲區的訪問。 因此,如果單片機嘗試在 SIE 擁有USB RAM 時更改該存儲區,可能會出現不可預料的后果。 同樣,在USB外設將USB RAM 所有權歸還給單片機之前,讀該存儲區也可能會導致數據出錯。
BDnSTAT 寄存器(CPU模式):當UOWN = 0 時,單片機內核擁有 BD。此時,該寄存器的其他七個位是控制位。保持使能位KEN(BDnSTAT《5》)決定BD 所有權的歸屬。 如果此位被置1,一旦 UOWN位被置1,BD將保持被SIE 擁有,而與端點活動無關。這將防止USTAT FIFO 被更新,同時防止端點的事務完成中斷標志被置1 。 只有在選擇并行端口而不是USB RAM作為數據I/O通道時,才使能此功能。
地址遞增禁止位INCDIS (BDnSTAT《4》)控制 SIE 的自動地址遞增功能。INCDIS 置1 將禁止SIE 在發送或接收每個字節時自動遞增緩沖器地址。只有在使用SPP端口時才使能此功能,此時每個數據字節都被發送到或來自同一個存儲單元。
數據Toggle 同步使能位DTSEN(BDnSTAT《3》)控制數據傳輸的奇偶校驗。將DTSEN置1 將使能SIE 的數據 Toggle 同步,將數據包的奇偶校驗位對照 DTS(BDnSTAT《6》)的值進行驗證。 如果包不是同步到達的,數據將被忽略,不會被寫入 USB RAM,并且 USB事務完成中斷標志也不會被置1 。 SIE 將把ACK令牌發回給主機對接收作出應答。 表17-3 匯總了DTSEN位對SIE 的影響。
緩沖器停止位BSTALL (BDnSTAT《2》)為控制傳輸提供支持,通常在端點0 只停止一次。它同時支持USB 規范第9 章中指定的SET_FEATURE/CLEAR_FEATURE命令,對默認控制端點外的任何端點為特有的連續STALL 。
BSTALL 位使能緩沖器停止。如果接收到的令牌要使用單元中的BD,BSTALL 置1 將導致SIE 將STALL 令牌返回到主機。 相應的UEPn 控制寄存器中的EPSTALL位被置1,并且在發送STALL 到主機時產生STALL 中斷。 UOWN 位保持置1 并且BD 不改變,除非接收到SETUP令牌。 在這種情況下,STALL 條件被清除并且BD的所有權返還給單片機內核。
BD9:BD8 位(BDnSTAT《1:0》 )存儲SIE 字節計數的高2 位,低8 位被存儲在相應的BDnCNT 寄存器中。
BDnSTAT 寄存器(SIE 模式):當BD及其緩沖器歸SIE 所有時,BDnSTAT 中的大部分位都有了不同的定義。 配置如寄存器17-6所示。 一旦UOWN置1,以前用戶寫入的任何數據或控制設置都會被來自SIE 的數據改寫。 SIE 使用令牌包標識符(Packet Identifier,PID )更新BDnSTAT寄存器,該PID 存儲在BDnSTAT《5:3》 中。對應的BDnCNT寄存器中的傳輸計數被更新,該八位寄存器的值溢出得到的計數值的高兩位,被保存在BDnSTAT《1:0》 中。
BD字節計數:字節計數代表將在一次IN 傳輸過程中被發送的字節總數。在IN傳輸之后,SIE 將返回發送到主機的字節數。在OUT傳輸過程中,字節計數代表可以被接收并存儲到USB RAM 中的最大字節數。 在OUT傳輸之后,SIE將返回實際接收到的字節數。 如果接收到的字節數超過設定的字節計數,數據包將被拒絕,同時還將產生NAK握手。 發生這種情況時,字節計數不被更新。
10位字節計數被分別保存到兩個寄存器中。 低8 位在BDnCNT寄存器中。 高2 位在BDnSTAT《1:0》 中。因此有效的字節計數范圍是0 到1023。
BD地址驗證:BD 地址寄存器對包含對應端點緩沖器的起始RAM地址。 為了讓端點起始單元有效,它必須在 USB RAM 中(地址為400h到7FFh)。 硬件中沒有相應的機制來驗證BD地址。 如果BD地址未指向USB RAM 中的單元,或者指向另一個端點緩沖器中的地址,數據將很可能丟失或被改寫。 同樣,接收緩沖器(OUT端點)和正在使用的 BD單元重疊也將導致不可預料的結果。 在開發USB應用程序時,用戶需要考慮在軟件中對地址進行驗證。
乒乓緩沖:當端點有兩組BD項時(一組用于偶數數據傳輸,一組用于奇數數據傳輸),它被定義為具有乒乓緩沖器。 這樣就允許在CPU處理一組BD的同時,SIE 處理另一組BD。這種方式的乒乓緩沖BD,可實現單片機與 USB之間的最大數據吞吐量。
USB模塊支持三種模式的操作:
? 不支持乒乓緩沖
? 僅支持OUT端點0 的乒乓緩沖
? 支持所有端點的乒乓緩沖
使用UCFG 寄存器中的PPB1:PPB0位設置乒乓緩沖器。USB模塊跟蹤每個端點的乒乓指針。 當使能此模塊時,所有指針都復位到指向偶數BD。 在事務完成之后(UOWN被SIE 清零),指針被切換到奇數BD。在下一次事務完成之后,指針又被切換回偶數BD上次事務的奇偶狀態保存在USTAT寄存器的PPBI 位中。 用戶可以使用PPBRST 位將所有乒乓指針復位到偶數狀態。圖17-7 顯示了三種不同的操作模式以及BD是如何填充USB RAM 的。根據緩沖配置,BD與特定的端點具有固定的對應關系。表17-4 所示為BD與端點之間映射的詳細情況。 這種關系也意味著如果沒有連續使能端點,BDT 中將出現空白區域。 理論上被禁止的端點的BD可用作緩沖空間。 實際上,用戶應該避免使用BDT 中的這些空間,除非已經采取了驗證BD地址的措施。
USB 中斷:USB模塊可以產生多個中斷條件。 要識別所有中斷源,和單片機一樣,此模塊具有自己的中斷邏輯結構。
USB 電源模式:最常見的電源模式有僅總線供電(Bus Power Only)、僅自供電(Self-Power Only)和以自供電為主的雙電源(Dual Power)供電模式。
并行通信端口:并行通信端口(SPP)是除 USB RAM 之外用于數據傳輸的備用通道。 可以將端點配置為使用SPP將數據直接發送到外部硬件或直接接收來自外部硬件的數據。
此方法可以把單片機作為數據管理器,直接通過SPP傳遞大塊的數據而無需單片機進行處理。 應用示例將包含數據采集系統,其中外部FIFO的數據通過USB和主機
進行通信。 在這種情況下,單片機控制端點,而原始數據的傳送則靠外設完成。通過相關的端點緩沖器描述符將SPP 使能為USB端點的端口。 必須通過以下方法來使能端點:
1. 將BDnADRL:BDnADRH 設置為指向FFFFh 。
2. 將KEN位(BDnSTAT《5》)置 1 以便讓SIE 保持對緩沖器的控制。
3. 將INCDIS 位(BDnSTAT《4》)置 1 以禁止地址自動遞增。
振蕩器:USB模塊有特定的時鐘要求。 在全速模式下,其時鐘源必須為48 MHz。 即便如此,并不要求單片機內核和其他外設以此時鐘速度運行或使用同一個時鐘源。
USB 固件和驅動程序:Microchip 提供了一些針對應用的特定的資源,比如USB固件和驅動程序。
評論