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