PIC18FX455/X550 系列器件包含全速和低速兼容的USB串行接口引擎(Serial Interface Engine,SIE),它允許在任何USB主機和PIC單片機之間進行高速通信。 可以利用內部收發(fā)器或通過外部收發(fā)器將SIE 直接連接到USB。內部的3.3V穩(wěn)壓器也可以在5V的應用中被用作內部收發(fā)器的電源。
USB模塊還包含了某些特殊硬件以提高其工作性能。在器件的數(shù)據(jù)存儲空間(USB RAM)中提供了雙端口存儲器,以便單片機和 SIE 之間可以直接進行存儲器訪問。 此外,還提供了緩沖器描述符,允許用戶任意設置USB RAM 空間中供端點使用的存儲區(qū)。 此外還提供了并行通信端口以方便大量數(shù)據(jù)的不間斷傳輸,比如將數(shù)據(jù)等時傳送到外部存儲器緩沖器。
USB 狀態(tài)和控制
? USB控制寄存器(UCON ):用于控制模塊在傳輸過程中的操作, 此寄存器包含控制行為的配置位。USBEN,將此位置1 前還是需要預先對模塊進行全面的配置。PKTDIS位,當接受到SETUP令牌時,此位被SIE置1,以允許處理SETUP。單片機不能將此位置1,只能將此位清零,以允許SIE繼續(xù)發(fā)送和或接收。RESUME位,允許外設通過執(zhí)行恢復信令來進行遠程喚醒。 要進行有效的遠程喚醒,固件必須將RESUME位置1 并保持此狀態(tài)10 ms ,然后將此位清零。SUSPND 位將模塊和支持電路(即穩(wěn)壓器)置于低功耗模式。SIE 的輸入時鐘也被禁止。響應IDLEIF 中斷時,該位必須由軟件置位。 在產(chǎn)生ACTVIF 中斷之后,由固件將此位復位。 當此位有效時,設備與與總線處于連接狀態(tài),但是收發(fā)器輸出處于空閑狀態(tài)。 VUSB引腳上的電壓根據(jù)此位值的不同而變化。在 IDLEIF 請求之前將此位置1,將導致不可預料的總線行為。
? USB配置寄存器(UCFG ):在通過 USB通信之前,必須對與模塊相關的內部和 / 或外部硬件進行配置。 大部分配置是使用UCFG 寄存器獨立的。USB穩(wěn)壓器也是通過此配置寄存器控制的。UFCG 寄存器中的控制位可用于控制USB模塊的絕大部分系統(tǒng)級行為,包括:? 總線速度(全速和低速)? 片上上拉電阻使能? 片上收發(fā)器使能 ? 乒乓緩沖器的使用。
內部收發(fā)器,USB外設有一個內置的USB 2.0 全速和低速兼容的收發(fā)器,在USB內部與SIE 相連。 此功能部件在低成本的單芯片應用中很有用。UTRDIS 位控制收發(fā)器,它在默認情況下是使能的(UTRDIS=0)。FSEN 位控制收發(fā)器的速度,將此位置1將使能全速工作模式。片上USB上拉電阻由UPUEN 位控制。
外部收發(fā)器,此模塊為片外收發(fā)器提供支持。 在因為物理條件限制而要求收發(fā)器遠離SIE 的應用中要用到片外收發(fā)器。例如,需要與USB電氣隔離的應用可以通過某些隔離元件將外部收發(fā)器連接到單片機的SIE。通過將UTRDIS 位置1 可以使能外部收發(fā)器。模塊中有6 條信號線用來與外部收發(fā)器進行通信并控制外部收發(fā)器:
? VM :單端D-線路輸入 (VM 和VP 信號將串行總線上不能用RCV 信號捕捉的情況報告給SIE。這些信號的組合狀態(tài)和它們的說明在表17-1 和表17-2中列出。)
? VP: 單端D+線路輸入
? RCV:差分接收器輸入 (RCV信號是由外部收發(fā)器輸出到SIE 的,它表示將串行總線上的差分信號轉換為一串單脈沖序列)
? VMO:差分線路驅動器輸出 (VPO和VMO信號是由SIE 輸出到外部收發(fā)器的)
? VPO:差分線路驅動器輸出
? OE : 輸出使能
? USB傳輸狀態(tài)寄存器(USTAT):USB 狀態(tài)寄存器報告SIE 中的事務狀態(tài)。 當SIE 發(fā)出USB傳輸完成中斷信號時,應該讀USTAT以確定傳輸?shù)臓顟B(tài)。 USTAT 包含傳輸端點編號、傳輸方向和乒乓緩沖器指針值(如果使用的話)。當SIE使用緩沖器讀寫數(shù)據(jù)結束后,它將更新USTAT寄存器。 如果在為事務完成中斷提供服務之前進行了另一次USB傳輸,SIE 將把下一次傳輸?shù)臓顟B(tài)保存到狀態(tài)FIFO中。
? USB設備地址寄存器(UADDR):USB地址寄存器包含唯一的USB地址,當此地址有效時,可被外設識別。 當接收到由URSTIF 表示的USB復位信號,或接收到來自單片機的復位信息時,UADDR 復位為00h。單片機必須在USB啟動階段(枚舉)寫入USB地址,該操作受Microchip USB固件支持。
? 幀編號寄存器(UFRMH:UFRML):幀編號寄存器包含 11 位幀編號。低字節(jié)被保存在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規(guī)范中端點0是默認控制端點,所以對于端點0 ,此位將總是被清零的。EPOUTEN 位用于使能或禁止主機的USBOUT事務。 將此位置1 則使能OUT事務。 同樣,EPINEN 位將使能或禁止主機的 USB IN事務。EPSTALL 位用于指示端點的 STALL 狀態(tài)。如果一個特殊的端點發(fā)出了一個STALL ,那么SIE 將把這對端點的EPSTALL位置1。 此位將保持置1 直到由固件清零或SIE 復位。
USB RAM:USB數(shù)據(jù)通過稱為USB RAM的存儲空間在單片機內核和SIE之間傳送。 USB RAM 是一個特殊的雙端口存儲器,被映射到普通數(shù)據(jù)存儲空間的Bank 4到Bank 7(400h到7FFh),總容量為 1KB。Bank 4 (400h到4FFh)專用于端點緩沖控制,而Bank 5到Bank7 可用于USB數(shù)據(jù)。根據(jù)所使用的緩沖類型,除了Bank 4的8 個字節(jié)之外,所有字節(jié)都可用作USB緩沖器空間。雖然USB RAM 可用作單片機的數(shù)據(jù)存儲器,但由SIE訪問的區(qū)域不能被單片機訪問。這里采用了一種信號機制來確定任意給定時間內對專用緩沖器的訪問。
幀:總線上的通信信息被劃分為多個1ms的時隙,稱為幀。每幀都包含多個設備和端點的多種事務。
USB規(guī)范中定義了四種傳輸類型:
?同步:這種傳輸類型可確保及時傳遞大量數(shù)據(jù)(最大為1023字節(jié)),但是不能保證數(shù)據(jù)的完整性。 它適用于丟失少量數(shù)據(jù)無關緊要的通信應用,比如音頻數(shù)據(jù)。
? 批量:這種傳輸類型允許在傳輸大量數(shù)據(jù)的同時確保數(shù)據(jù)的完整性,但是傳輸時限不能保證。
? 中斷:這種傳輸類型可以確保及時傳輸少量數(shù)據(jù),并確保數(shù)據(jù)的完整性。
? 控制:這種類型提供設備啟動控制。全速設備支持所有傳輸類型,而低速設備只能使用中斷和控制傳輸方式。
緩沖器描述符和緩沖器描述符表
Bank 4 中的寄存器組成稱為“緩沖器描述符表”(Buffer Descriptor Table,BDT)的結構,專門用于控制端點緩沖器。 這為用戶構建和控制各種長度和配置的端點緩沖器提供了靈活的方法。BDT 由緩沖描述符(Buffer Descriptor,BD)組成,它用于定義和控制USB RAM 空間中的實際緩沖器。 每個BD由四個寄存器組成,其中 n 代表64個可能的BD中的一個(范圍是0 到63):
? BDnSTAT: BD 狀態(tài)寄存器
? BDnCNT : BD 字節(jié)計數(shù)寄存器
? BDnADRL :BD低地址寄存器
? BDnADRH :BD高地址寄存器
BD 在序列中總是以一個四字節(jié)的數(shù)據(jù)塊BDnSTAT:BDnCNT:BDnADRL:BDnADRH)出現(xiàn), BDnSTAT的地址總是一個相對于400h的偏移量4n(以十六進制數(shù)表示),其中 n 是緩沖器描述符編號。根據(jù)所使用的緩沖配置(第17.4.4 節(jié)“乒乓緩沖”),最多可以有32、33或64組緩沖器描述符。 BDT 至少要8 字節(jié)長,因為USB規(guī)范規(guī)定,每個設備必須具有初始啟動所需的輸入和輸出端點0。 根據(jù)端點和緩沖配置,BDT 可以有256 個字節(jié)。
雖然可以被看作特殊功能控制寄存器,緩沖器描述符的狀態(tài)和地址寄存器并不是硬件映射的,這與 Bank 15 中的傳統(tǒng)單片機SFR不同。 如果與特定BD對應的端點未被使能,則該端點的寄存器將不被使用。它表現(xiàn)為可用的RAM 空間,而不是未實現(xiàn)的地址。只能通過將UEPn<1>位置1 使能端點,才能將這些地址作為BD寄存器使用。 如同數(shù)據(jù)存儲區(qū)的任何單元一樣,BD寄存器的值在器件復位時都會是不確定的。
圖17-6 所示為一個BD的示例,該 BD用于從500h開始的40字節(jié)緩沖器。 如果已經(jīng)使用UEPn 寄存器使能了對應的端點,就只有特定的BD寄存器組有效。 USBRAM中所有BD寄存器都可用。 在使能端點之前應該設置好每個端點的BD。
BD狀態(tài)和配置:緩沖器描述符不僅僅定義端點緩沖器的大小,還決定了它的配置和控制。 大部分配置都是通過BD狀態(tài)寄存器BDnSTAT完成的。 每個BD都有與自己一一對應的、帶編號的BDnSTAT寄存器。和其他控制寄存器不同,BDnSTAT 寄存器內的位的設置與具體應用息息相關。 有兩種不同的配置,決定特定時間修改BD和緩沖區(qū)的是單片機還是USB模塊。 只有一個位是這兩種配置共享的。