新聞中心

EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 設(shè)計應(yīng)用 > PIC18F2455/2550/4455/4550之通用串行總線USB

PIC18F2455/2550/4455/4550之通用串行總線USB

作者: 時間:2017-10-13 來源:網(wǎng)絡(luò) 收藏

  PIC18FX455/X550 系列器件包含全速和低速兼容的USB串行接口引擎(Serial Interface Engine,SIE),它允許在任何USB主機和PIC單片機之間進行高速通信。 可以利用內(nèi)部收發(fā)器或通過外部收發(fā)器將SIE 直接連接到USB。內(nèi)部的3.3V穩(wěn)壓器也可以在5V的應(yīng)用中被用作內(nèi)部收發(fā)器的電源。

本文引用地址:http://www.butianyuan.cn/article/201710/365823.htm

  USB模塊還包含了某些特殊硬件以提高其工作性能。在器件的數(shù)據(jù)存儲空間(USB RAM)中提供了雙端口存儲器,以便單片機和 SIE 之間可以直接進行存儲器訪問。 此外,還提供了緩沖器描述符,允許用戶任意設(shè)置USB RAM 空間中供端點使用的存儲區(qū)。 此外還提供了并行通信端口以方便大量數(shù)據(jù)的不間斷傳輸,比如將數(shù)據(jù)等時傳送到外部存儲器緩沖器。

  USB 狀態(tài)和控制

  • USB控制寄存器(UCON ):用于控制模塊在傳輸過程中的操作, 此寄存器包含控制行為的配置位。USBEN,將此位置1 前還是需要預先對模塊進行全面的配置。PKTDIS位,當接受到SETUP令牌時,此位被SIE置1,以允許處理SETUP。單片機不能將此位置1,只能將此位清零,以允許SIE繼續(xù)發(fā)送和或接收。RESUME位,允許外設(shè)通過執(zhí)行恢復信令來進行遠程喚醒。 要進行有效的遠程喚醒,固件必須將RESUME位置1 并保持此狀態(tài)10 ms ,然后將此位清零。SUSPND 位將模塊和支持電路(即穩(wěn)壓器)置于低功耗模式。 SIE 的輸入時鐘也被禁止。響應(yīng)IDLEIF 中斷時,該位必須由軟件置位。 在產(chǎn)生ACTVIF 中斷之后,由固件將此位復位。 當此位有效時,設(shè)備與與總線處于連接狀態(tài),但是收發(fā)器輸出處于空閑狀態(tài)。 VUSB引腳上的電壓根據(jù)此位值的不同而變化。在 IDLEIF 請求之前將此位置1,將導致不可預料的總線行為。

  

  • USB配置寄存器(UCFG ):在通過 USB通信之前,必須對與模塊相關(guān)的內(nèi)部和 / 或外部硬件進行配置。 大部分配置是使用UCFG 寄存器獨立的。USB穩(wěn)壓器也是通過此配置寄存器控制的。UFCG 寄存器中的控制位可用于控制USB模塊的絕大部分系統(tǒng)級行為,包括: • 總線速度(全速和低速)• 片上上拉電阻使能 • 片上收發(fā)器使能 • 乒乓緩沖器的使用。

  內(nèi)部收發(fā)器,USB外設(shè)有一個內(nèi)置的USB 2.0 全速和低速兼容的收發(fā)器,在USB內(nèi)部與SIE 相連。 此功能部件在低成本的單芯片應(yīng)用中很有用。UTRDIS 位控制收發(fā)器,它在默認情況下是使能的(UTRDIS=0)。FSEN 位控制收發(fā)器的速度,將此位置1將使能全速工作模式。片上USB上拉電阻由UPUEN 位控制。

  外部收發(fā)器,此模塊為片外收發(fā)器提供支持。 在因為物理條件限制而要求收發(fā)器遠離SIE 的應(yīng)用中要用到片外收發(fā)器。例如,需要與USB電氣隔離的應(yīng)用可以通過某些隔離元件將外部收發(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 的,它表示將串行總線上的差分信號轉(zhuǎn)換為一串單脈沖序列)

  • VMO:差分線路驅(qū)動器輸出 (VPO和VMO信號是由SIE 輸出到外部收發(fā)器的)

  • VPO:差分線路驅(qū)動器輸出

  • OE : 輸出使能

  

  

  • USB傳輸狀態(tài)寄存器(USTAT):USB 狀態(tài)寄存器報告SIE 中的事務(wù)狀態(tài)。 當SIE 發(fā)出USB傳輸完成中斷信號時,應(yīng)該讀USTAT以確定傳輸?shù)臓顟B(tài)。 USTAT 包含傳輸端點編號、傳輸方向和乒乓緩沖器指針值(如果使用的話)。當SIE使用緩沖器讀寫數(shù)據(jù)結(jié)束后,它將更新USTAT寄存器。 如果在為事務(wù)完成中斷提供服務(wù)之前進行了另一次USB傳輸,SIE 將把下一次傳輸?shù)臓顟B(tài)保存到狀態(tài)FIFO中。

  

  • USB設(shè)備地址寄存器(UADDR):USB地址寄存器包含唯一的USB地址,當此地址有效時,可被外設(shè)識別。 當接收到由URSTIF 表示的USB復位信號,或接收到來自單片機的復位信息時,UADDR 復位為00h。 單片機必須在USB啟動階段(枚舉)寫入USB地址,該操作受Microchip USB固件支持。

  • 幀編號寄存器(UFRMH:UFRML):幀編號寄存器包含 11 位幀編號。 低字節(jié)被保存在UFRML中,而高3 位則被保存在UFRMH 中。 不管是否接收到SOF令牌,都用當前幀編號更新該寄存器對。對于單片機而言,這些寄存器是只讀的。 幀編號寄存器主要用于同步傳輸。

  • 端點使能寄存器0 到15(UEPn):

  USB 端點控制:16個可用的雙向端點中的每一個都有自己獨立的控制寄存器UEPn(其中n 表示端點編號)。每個寄存器相應(yīng)控制位的功能都是相同的。EPHSHK位控制端點握手,將此位置1將使能USB握手。 通常,除使用同步端點以外,此位總是置1 的。EPCONDIS位用于使能或禁止通過端點進行的USB控制操作(SETUP)。清零此位將使能SETUP 事務(wù);注意必須將相應(yīng)的EPINEN和EPOUTEN 位置1 以使能IN和OUT事務(wù)。 因為USB規(guī)范中端點0是默認控制端點,所以對于端點0 ,此位將總是被清零的。EPOUTEN 位用于使能或禁止主機的USBOUT事務(wù)。 將此位置1 則使能OUT事務(wù)。 同樣,EPINEN 位將使能或禁止主機的 USB IN事務(wù)。EPSTALL 位用于指示端點的 STALL 狀態(tài)。如果一個特殊的端點發(fā)出了一個STALL ,那么SIE 將把這對端點的EPSTALL位置1。 此位將保持置1 直到由固件清零或SIE 復位。

  

  USB RAM:USB數(shù)據(jù)通過稱為USB RAM的存儲空間在單片機內(nèi)核和SIE之間傳送。 USB RAM 是一個特殊的雙端口存儲器,被映射到普通數(shù)據(jù)存儲空間的Bank 4到Bank 7(400h到7FFh),總?cè)萘繛?1KB。Bank 4 (400h到4FFh)專用于端點緩沖控制,而Bank 5到Bank7 可用于USB數(shù)據(jù)。根據(jù)所使用的緩沖類型,除了Bank 4的8 個字節(jié)之外,所有字節(jié)都可用作USB緩沖器空間。雖然USB RAM 可用作單片機的數(shù)據(jù)存儲器,但由SIE訪問的區(qū)域不能被單片機訪問。這里采用了一種信號機制來確定任意給定時間內(nèi)對專用緩沖器的訪問。

  幀:總線上的通信信息被劃分為多個1ms的時隙,稱為幀。每幀都包含多個設(shè)備和端點的多種事務(wù)。

  USB規(guī)范中定義了四種傳輸類型:

  • 同步:這種傳輸類型可確保及時傳遞大量數(shù)據(jù)(最大為1023字節(jié)),但是不能保證數(shù)據(jù)的完整性。 它適用于丟失少量數(shù)據(jù)無關(guān)緊要的通信應(yīng)用,比如音頻數(shù)據(jù)。

  • 批量:這種傳輸類型允許在傳輸大量數(shù)據(jù)的同時確保數(shù)據(jù)的完整性,但是傳輸時限不能保證。

  • 中斷:這種傳輸類型可以確保及時傳輸少量數(shù)據(jù),并確保數(shù)據(jù)的完整性。

  • 控制:這種類型提供設(shè)備啟動控制。全速設(shè)備支持所有傳輸類型,而低速設(shè)備只能使用中斷和控制傳輸方式。

  緩沖器描述符和緩沖器描述符表

  Bank 4 中的寄存器組成稱為“緩沖器描述符表”(Buffer Descriptor Table,BDT )的結(jié)構(gòu),專門用于控制端點緩沖器。 這為用戶構(gòu)建和控制各種長度和配置的端點緩沖器提供了靈活的方法。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ī)定,每個設(shè)備必須具有初始啟動所需的輸入和輸出端點0。 根據(jù)端點和緩沖配置,BDT 可以有256 個字節(jié)。

  雖然可以被看作特殊功能控制寄存器,緩沖器描述符的狀態(tài)和地址寄存器并不是硬件映射的,這與 Bank 15 中的傳統(tǒng)單片機SFR不同。 如果與特定BD對應(yīng)的端點未被使能,則該端點的寄存器將不被使用。它表現(xiàn)為可用的RAM 空間,而不是未實現(xiàn)的地址。只能通過將UEPn《1》位置1 使能端點,才能將這些地址作為BD寄存器使用。 如同數(shù)據(jù)存儲區(qū)的任何單元一樣,BD寄存器的值在器件復位時都會是不確定的。

  圖17-6 所示為一個BD的示例,該 BD用于從500h開始的40字節(jié)緩沖器。 如果已經(jīng)使用UEPn 寄存器使能了對應(yīng)的端點,就只有特定的BD寄存器組有效。 USBRAM中所有BD寄存器都可用。 在使能端點之前應(yīng)該設(shè)置好每個端點的BD。

  

  BD狀態(tài)和配置:緩沖器描述符不僅僅定義端點緩沖器的大小,還決定了它的配置和控制。 大部分配置都是通過BD狀態(tài)寄存器BDnSTAT完成的。 每個BD都有與自己一一對應(yīng)的、帶編號的BDnSTAT寄存器。和其他控制寄存器不同,BDnSTAT 寄存器內(nèi)的位的設(shè)置與具體應(yīng)用息息相關(guān)。 有兩種不同的配置,決定特定時間修改BD和緩沖區(qū)的是單片機還是USB模塊。 只有一個位是這兩種配置共享的。

  緩沖器所有權(quán):因為CPU和USB模塊共享緩沖器及其BD,所以使用了簡單的信號機制來區(qū)分更新BD 和相關(guān)緩沖器的是CPU還是USB??梢允褂肬OWN(BDnSTAT《7》)作為信號來加以區(qū)分。UOWN 是兩種配置的BDnSTAT中唯一共享的位。

  當UOWN清零時,BD 由單片機內(nèi)核“所有”。 當UOWN位置1 時,BD和緩沖器模塊由USB外設(shè)“所有”,此時內(nèi)核不能夠修改 BD 或相應(yīng)的數(shù)據(jù)緩沖器。注意,當SIE 擁有緩沖器時單片機內(nèi)核仍可以讀BDnSTAT ,反之亦然。

  根據(jù)寄存器的更新源的不同,緩沖器描述符具有不同的意義。 在分配給USB外設(shè)所有權(quán)之前,用戶可以通過BDnSTAT 配置外設(shè)的基本操作。 此時,也可設(shè)置字節(jié)計數(shù)和緩沖器地址寄存器。

  當UOWN置1 時,用戶就不能再依賴寫入BD的值了。此時,SIE 根據(jù)需要更新BD,改寫原來的 BD值。 SIE將使用PID 令牌來更新 BDnSTAT 寄存器,同時也將更新傳輸計數(shù)值BDnCNT 。在準備設(shè)置端點之前,BDT 的BDnSTAT 字節(jié)總是最后更新的字節(jié)。 當事務(wù)完成時,SIE 將清零UOWN位。 唯一例外的情況是在使能KEN和/ 或BSTALL 的時候。當UOWN位置1 時,硬件上并沒有任何機制來阻止單片機對存儲區(qū)的訪問。 因此,如果單片機嘗試在 SIE 擁有USB RAM 時更改該存儲區(qū),可能會出現(xiàn)不可預料的后果。 同樣,在USB外設(shè)將USB RAM 所有權(quán)歸還給單片機之前,讀該存儲區(qū)也可能會導致數(shù)據(jù)出錯。

  BDnSTAT 寄存器(CPU模式):當UOWN = 0 時,單片機內(nèi)核擁有 BD。此時,該寄存器的其他七個位是控制位。保持使能位KEN(BDnSTAT《5》)決定BD 所有權(quán)的歸屬。 如果此位被置1,一旦 UOWN位被置1,BD將保持被SIE 擁有,而與端點活動無關(guān)。這將防止USTAT FIFO 被更新,同時防止端點的事務(wù)完成中斷標志被置1 。 只有在選擇并行端口而不是USB RAM作為數(shù)據(jù)I/O通道時,才使能此功能。

  地址遞增禁止位INCDIS (BDnSTAT《4》)控制 SIE 的自動地址遞增功能。INCDIS 置1 將禁止SIE 在發(fā)送或接收每個字節(jié)時自動遞增緩沖器地址。只有在使用SPP端口時才使能此功能,此時每個數(shù)據(jù)字節(jié)都被發(fā)送到或來自同一個存儲單元。

  數(shù)據(jù)Toggle 同步使能位DTSEN(BDnSTAT《3》)控制數(shù)據(jù)傳輸?shù)钠媾夹r?。將DTSEN置1 將使能SIE 的數(shù)據(jù) Toggle 同步,將數(shù)據(jù)包的奇偶校驗位對照 DTS(BDnSTAT《6》)的值進行驗證。 如果包不是同步到達的,數(shù)據(jù)將被忽略,不會被寫入 USB RAM,并且 USB事務(wù)完成中斷標志也不會被置1 。 SIE 將把ACK令牌發(fā)回給主機對接收作出應(yīng)答。 表17-3 匯總了DTSEN位對SIE 的影響。

  

  緩沖器停止位BSTALL (BDnSTAT《2》)為控制傳輸提供支持,通常在端點0 只停止一次。它同時支持USB 規(guī)范第9 章中指定的SET_FEATURE/CLEAR_FEATURE命令,對默認控制端點外的任何端點為特有的連續(xù)STALL 。

  BSTALL 位使能緩沖器停止。如果接收到的令牌要使用單元中的BD,BSTALL 置1 將導致SIE 將STALL 令牌返回到主機。 相應(yīng)的UEPn 控制寄存器中的EPSTALL位被置1,并且在發(fā)送STALL 到主機時產(chǎn)生STALL 中斷。 UOWN 位保持置1 并且BD 不改變,除非接收到SETUP令牌。 在這種情況下,STALL 條件被清除并且BD的所有權(quán)返還給單片機內(nèi)核。

  BD9:BD8 位(BDnSTAT《1:0》 )存儲SIE 字節(jié)計數(shù)的高2 位,低8 位被存儲在相應(yīng)的BDnCNT 寄存器中。

  

  BDnSTAT 寄存器(SIE 模式):當BD及其緩沖器歸SIE 所有時,BDnSTAT 中的大部分位都有了不同的定義。 配置如寄存器17-6所示。 一旦UOWN置1,以前用戶寫入的任何數(shù)據(jù)或控制設(shè)置都會被來自SIE 的數(shù)據(jù)改寫。 SIE 使用令牌包標識符(Packet IdenTIfier,PID )更新BDnSTAT寄存器,該PID 存儲在BDnSTAT《5:3》 中。對應(yīng)的BDnCNT寄存器中的傳輸計數(shù)被更新,該八位寄存器的值溢出得到的計數(shù)值的高兩位,被保存在BDnSTAT《1:0》 中。

  BD字節(jié)計數(shù):字節(jié)計數(shù)代表將在一次IN 傳輸過程中被發(fā)送的字節(jié)總數(shù)。在IN傳輸之后,SIE 將返回發(fā)送到主機的字節(jié)數(shù)。在OUT傳輸過程中,字節(jié)計數(shù)代表可以被接收并存儲到USB RAM 中的最大字節(jié)數(shù)。 在OUT傳輸之后,SIE將返回實際接收到的字節(jié)數(shù)。 如果接收到的字節(jié)數(shù)超過設(shè)定的字節(jié)計數(shù),數(shù)據(jù)包將被拒絕,同時還將產(chǎn)生NAK握手。 發(fā)生這種情況時,字節(jié)計數(shù)不被更新。

  10位字節(jié)計數(shù)被分別保存到兩個寄存器中。 低8 位在BDnCNT寄存器中。 高2 位在BDnSTAT《1:0》 中。因此有效的字節(jié)計數(shù)范圍是0 到1023。

  BD地址驗證:BD 地址寄存器對包含對應(yīng)端點緩沖器的起始RAM地址。 為了讓端點起始單元有效,它必須在 USB RAM 中(地址為400h到7FFh)。 硬件中沒有相應(yīng)的機制來驗證BD地址。 如果BD地址未指向USB RAM 中的單元,或者指向另一個端點緩沖器中的地址,數(shù)據(jù)將很可能丟失或被改寫。 同樣,接收緩沖器(OUT端點)和正在使用的 BD單元重疊也將導致不可預料的結(jié)果。 在開發(fā)USB應(yīng)用程序時,用戶需要考慮在軟件中對地址進行驗證。

  

  乒乓緩沖:當端點有兩組BD項時(一組用于偶數(shù)數(shù)據(jù)傳輸,一組用于奇數(shù)數(shù)據(jù)傳輸),它被定義為具有乒乓緩沖器。 這樣就允許在CPU處理一組BD的同時,SIE 處理另一組BD。這種方式的乒乓緩沖BD,可實現(xiàn)單片機與 USB之間的最大數(shù)據(jù)吞吐量。

  USB模塊支持三種模式的操作:

  • 不支持乒乓緩沖

  • 僅支持OUT端點0 的乒乓緩沖

  • 支持所有端點的乒乓緩沖

  使用UCFG 寄存器中的PPB1:PPB0位設(shè)置乒乓緩沖器。USB模塊跟蹤每個端點的乒乓指針。 當使能此模塊時,所有指針都復位到指向偶數(shù)BD。 在事務(wù)完成之后(UOWN被SIE 清零),指針被切換到奇數(shù)BD。在下一次事務(wù)完成之后,指針又被切換回偶數(shù)BD上次事務(wù)的奇偶狀態(tài)保存在USTAT寄存器的PPBI 位中。 用戶可以使用PPBRST 位將所有乒乓指針復位到偶數(shù)狀態(tài)。圖17-7 顯示了三種不同的操作模式以及BD是如何填充USB RAM 的。根據(jù)緩沖配置,BD與特定的端點具有固定的對應(yīng)關(guān)系。表17-4 所示為BD與端點之間映射的詳細情況。 這種關(guān)系也意味著如果沒有連續(xù)使能端點,BDT 中將出現(xiàn)空白區(qū)域。 理論上被禁止的端點的BD可用作緩沖空間。 實際上,用戶應(yīng)該避免使用BDT 中的這些空間,除非已經(jīng)采取了驗證BD地址的措施。

  USB 中斷:USB模塊可以產(chǎn)生多個中斷條件。 要識別所有中斷源,和單片機一樣,此模塊具有自己的中斷邏輯結(jié)構(gòu)。

  USB 電源模式:最常見的電源模式有僅總線供電(Bus Power Only)、僅自供電(Self-Power Only)和以自供電為主的雙電源(Dual Power)供電模式。

  并行通信端口:并行通信端口(SPP)是除 USB RAM 之外用于數(shù)據(jù)傳輸?shù)膫溆猛ǖ馈?可以將端點配置為使用SPP將數(shù)據(jù)直接發(fā)送到外部硬件或直接接收來自外部硬件的數(shù)據(jù)。

  此方法可以把單片機作為數(shù)據(jù)管理器,直接通過SPP傳遞大塊的數(shù)據(jù)而無需單片機進行處理。 應(yīng)用示例將包含數(shù)據(jù)采集系統(tǒng),其中外部FIFO的數(shù)據(jù)通過USB和主機

  進行通信。 在這種情況下,單片機控制端點,而原始數(shù)據(jù)的傳送則靠外設(shè)完成。通過相關(guān)的端點緩沖器描述符將SPP 使能為USB端點的端口。 必須通過以下方法來使能端點:

  1. 將BDnADRL:BDnADRH 設(shè)置為指向FFFFh 。

  2. 將KEN位(BDnSTAT《5》)置 1 以便讓SIE 保持對緩沖器的控制。

  3. 將INCDIS 位(BDnSTAT《4》)置 1 以禁止地址自動遞增。

  振蕩器:USB模塊有特定的時鐘要求。 在全速模式下,其時鐘源必須為48 MHz。 即便如此,并不要求單片機內(nèi)核和其他外設(shè)以此時鐘速度運行或使用同一個時鐘源。

  USB 固件和驅(qū)動程序:Microchip 提供了一些針對應(yīng)用的特定的資源,比如USB固件和驅(qū)動程序。



關(guān)鍵詞: pic 通用串行總線 usb

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉