第11章 USB總線模塊_第1頁
第11章 USB總線模塊_第2頁
第11章 USB總線模塊_第3頁
第11章 USB總線模塊_第4頁
第11章 USB總線模塊_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第11章USB總線模塊

何賓2011.12本章內(nèi)容本章主要是介紹PSoC3內(nèi)的USB總線模塊,其內(nèi)容主要包括:USB總線模塊概述、USB模塊結(jié)構(gòu)、USB模塊工作條件、邏輯傳輸模式、PS/2和CMOSI/O模式、USB人體學(xué)輸入設(shè)備的實現(xiàn)。USB總線模塊是PSoC3所提供的一個重要功能單元,通過本章內(nèi)容的學(xué)習(xí),不僅能了解和掌握USB總線模塊的工作原理,還能掌握使用PSoC3實現(xiàn)USB總線模塊通信的方法。PSoC3/5數(shù)字子系統(tǒng)

--USB總線模塊

PSoCUSB作為一個USB設(shè)備和一個主機(jī)進(jìn)行通信。USB模塊作為PSoC內(nèi)的一個固定功能的設(shè)備。只支持全速通信(12Mbps),并且和USB2.0協(xié)議兼容。USB設(shè)備設(shè)計成即插即用,也支持熱插拔。PSoC3/5數(shù)字子系統(tǒng)

--USB總線模塊

USB總線模塊的特點(diǎn)有:與USB2.0規(guī)范兼容;支持全速外設(shè),最高速率到12Mbps;支持8個數(shù)據(jù)端點(diǎn)和1個控制端點(diǎn);支持四種類型的傳輸-塊(批量)數(shù)據(jù)傳輸,中斷傳輸,同步傳輸和控制傳輸;支持熱插拔;支持兩種類型的邏輯傳輸模式:存儲轉(zhuǎn)發(fā)模式和直通模式;差分信號(D+和D-)輸出;存儲轉(zhuǎn)發(fā)模式下支持最大的包為512個字節(jié),直通模式的同步傳輸支持最大的包為1023個字節(jié);支持P2/2和CMOS信號;操作電壓范圍為3.3V和5V;USB總線模塊

--USB模塊結(jié)構(gòu)

下圖給出了USB模塊的結(jié)構(gòu)圖,該模塊由串行接口引擎(SerialInterfaceEngine,SIE)和仲裁器構(gòu)成。圖USB模塊的結(jié)構(gòu)圖USB總線模塊

--USB模塊結(jié)構(gòu)(串行接口引擎SIE)

SIE用于處理譯碼,以及在發(fā)送和接收時,創(chuàng)建數(shù)據(jù)和控制包。在接收時,SIE將USB的位流解碼成USB的包;在發(fā)送時,創(chuàng)建USB的位流。下面給出SIE的主要特性:兼容USB2.0規(guī)范;支持1個設(shè)備地址;支持8個數(shù)據(jù)端點(diǎn)和1個控制端點(diǎn);每個端點(diǎn)支持中斷;在48MHz時鐘下全速運(yùn)行;在控制端點(diǎn)集成一個8字節(jié)緩沖區(qū);USB總線模塊

--USB模塊結(jié)構(gòu)(串行接口引擎SIE)這個模塊的寄存器主要用于配置數(shù)據(jù)端點(diǎn)操作和控制端點(diǎn)的數(shù)據(jù)緩沖,寄存器也控制每個端點(diǎn)可用的中斷。

SIE在每次傳輸結(jié)束后產(chǎn)生中斷。使用USB_SIE_INT_EN寄存器可以使能/禁止端點(diǎn)的中斷。通過USB_SIE_INT_SR寄存器可以得到端點(diǎn)的中斷狀態(tài)。USB總線模塊

--USB模塊結(jié)構(gòu)(串行接口引擎SIE)SIE寄存器CNT0和CNT1保持著每個端點(diǎn)的計數(shù)值,這個計數(shù)值表示USB傳輸?shù)臄?shù)據(jù)字節(jié)的個數(shù)。在輸出(OUT)端點(diǎn)情況下,固件程序確定端點(diǎn)所能接收到的最大的字節(jié)。SIE用所接收到的字節(jié)數(shù)更新寄存器。在輸入(IN)端點(diǎn)情況下,它保持將要發(fā)送數(shù)據(jù)的字節(jié)數(shù)。USB_SIE_EPx_CR0寄存器保持每個端點(diǎn)的模式值。模式值決定了USB模塊對主機(jī)的響應(yīng)。表5給出了USB_SIE_EPx_CR0寄存器MODE位域的值。USB總線模塊

--USB模塊結(jié)構(gòu)(串行接口引擎SIE)模式編碼SETUPINOUT描述Disable0000忽略忽略忽略忽略所有USB端點(diǎn)的流量NAKIN/OUT0001接受不響應(yīng)不響應(yīng)不接收IN和OUT令牌StatusOUTonly0010接受阻止檢查設(shè)置該模式時,接受一個SETUP令牌。在IN令牌的情況下,阻止;在OUT令牌的情況下,用零長度的包響應(yīng)。用于控制端點(diǎn)。STALLIN/OUT0011接受阻止阻止設(shè)置該模式時,接受一個SETUP令牌。在IN和OUT令牌的情況下,阻止。用于控制端點(diǎn)。Reserved0100忽略忽略忽略ISOOUT0101忽略忽略一直同步OUTStatusINonly0110接受TX0字節(jié)阻止設(shè)置該模式時,接受一個SETUP令牌,在OUT令牌的情況下,阻止;在IN令牌的情況下,用零長度的包響應(yīng)。用于控制端點(diǎn)。ISOIN0111忽略TX計數(shù)忽略同步INNAKOUT1000忽略忽略不響應(yīng)送NAK握手給OUT令牌ACKOUT(STALL=0)1001忽略忽略響應(yīng)向一個OUT令牌發(fā)出ACK握手時,SIE修改這個模式到1000。ACKOUT(STALL=1)1001忽略忽略阻止阻止OUT傳輸Reserved1010忽略忽略忽略ACKOUT-STATUSIN1011接受TX0字節(jié)響應(yīng)響應(yīng)(ACK)OUT令牌,或者為IN令牌發(fā)送零個長度的數(shù)據(jù)包。NAKIN1101忽略不響應(yīng)忽略為IN令牌送NAK握手信號ACKIN(STALL=0)1101忽略TX計數(shù)忽略當(dāng)接收到一個IN數(shù)據(jù)的ACK握手時,SIE修改這個模式到1100。ACKIN(STALL=1)1101忽略阻止忽略阻止IN傳輸Reserved1110忽略忽略忽略ACKIN-StatusOUT1111接受TX計數(shù)檢查對IN數(shù)據(jù)或者狀態(tài)OUT進(jìn)行反應(yīng)。USB總線模塊

--USB模塊結(jié)構(gòu)(串行接口引擎SIE)

SIE也報告發(fā)送錯誤,USB_SIE_EPx_CR0寄存器的比特為“err_in_txn“表示錯誤的發(fā)生。當(dāng)設(shè)置該位時,當(dāng)它接收到來自主機(jī)的其它IN令牌時,硬件自動重發(fā)相同的數(shù)據(jù)。這種重發(fā)只出現(xiàn)在存儲轉(zhuǎn)發(fā)模式下。在直通模式下,通過固件讀取該位來確定重發(fā)數(shù)據(jù)。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)模塊仲裁器用于處理端點(diǎn)對SRAM存儲器訪問。CPU和SIE都可以訪問SRAM存儲器.仲裁器負(fù)責(zé)處理CPU和SIE訪問SRAM的仲裁。仲裁器包含下面的模塊:SIE接口模塊;CPU接口模塊;存儲器接口;DMA引擎;仲裁邏輯;同步模塊;USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)仲裁器寄存器用于處理端點(diǎn)的配置,讀端點(diǎn)地址和寫端點(diǎn)地址。它也用于配置每個端點(diǎn)所要求的邏輯傳輸類型。每個端點(diǎn)支持中斷。仲裁器只有一個中斷線用于中斷控制器。仲裁器寄存器處理使能/禁止端點(diǎn)的中斷和保持中斷狀態(tài)。仲裁器也負(fù)責(zé)存儲器的管理(比如在數(shù)據(jù)端點(diǎn)共享512字節(jié)的SRAM)。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)1.SIE接口模塊該模塊負(fù)責(zé)處理和SIE模塊的所有交易。SIE從SRAM讀數(shù)據(jù),然后發(fā)送到主機(jī)。類似的,將來自主機(jī)的數(shù)據(jù)寫到SRAM中。在SIE接口登記這些請求,模塊來處理它。2.CPU接口模塊這個模塊處理和CPU的所有交易。CPU提出為每個端點(diǎn)讀/寫SRAM的請求。這些請求在CPU接口模塊被登記,然后由模塊來處理。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)

3.存儲器接口存儲器接口用于控制USB塊和SRAM存儲單元之間的接口。最大支持512個字節(jié)(256x16位)的存儲器容量。這是USB專用的存儲器,在USB和存儲器單元之間的所有的控制和數(shù)據(jù)線,包括:數(shù)據(jù)輸入線、數(shù)據(jù)輸出線和使能線,地址線和方向控制線,是由存儲器接口來管理的。SIE和CPU都可以請求訪問存儲器。SIE接口模塊和CPU接口模塊用來處理這些請求。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)4.DMA接口當(dāng)配置DMA后,DMA接口負(fù)責(zé)在DMA和USB之間的數(shù)據(jù)來回傳輸。這個模塊支持用于每個數(shù)據(jù)端點(diǎn)的DMA請求。DMA的行為取決于在配置寄存器中所配置的邏輯傳輸模式。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)5.仲裁器邏輯這是仲裁器的主要模塊。用于仲裁所有發(fā)生在仲裁器的交易。它仲裁CPU,DMA和SIE對存儲器和寄存器的訪問。這個模塊也處理存儲器管理。存儲器管理可以“手工”或者“自動”。手工模式下,固件處理讀寫地址的操作。在自動模式下,該模塊處理所有的存儲器管理。這個模塊處理緩沖區(qū)大小的分配(取決于USB_BUF_SIZE的設(shè)置)。它也處理公共存儲區(qū)域。USB總線模塊

--USB模塊結(jié)構(gòu)(仲裁器)這個模塊也處理每個端點(diǎn)的中斷請求,每個端點(diǎn)的中斷來自:DMA授權(quán)(DMAGrant)、輸入緩沖區(qū)滿、緩沖區(qū)上溢、緩沖區(qū)下溢。6.同步化模塊USB模塊使用兩個時鐘:系統(tǒng)時鐘和USB時鐘。仲裁器使用系統(tǒng)時鐘,SIE和OsClock模塊使用USB時鐘。由于這是兩個不同的時鐘,因此要求同步,這個模塊負(fù)責(zé)處理同步。USB總線模塊

--USB模塊工作條件

USB模塊的工作條件包括:工作頻率;工作電壓;收發(fā)器;下面進(jìn)行詳細(xì)的說明。USB總線模塊

--USB模塊工作條件

1.工作頻率最小的時鐘頻率為24MHz,用于全速操作的USB時鐘48MHz(0.25%的誤差)。到USB的時鐘稱為clk_usb,這個時鐘來自IMOCLK,IMOCLK*2,PLL或者DSI時鐘。

USB的OsClock模塊用來確定USB包的頻率。USB總線模塊

--USB模塊工作條件

2.工作電壓標(biāo)準(zhǔn)電壓范圍4.35V-5.25V;低電壓范圍3.15V-3.45V。USB使用3.3V工作電壓。該模塊使用數(shù)字電壓Vccd。支持內(nèi)部的管理器用于電壓的管理。在標(biāo)準(zhǔn)電壓圍內(nèi),電壓通過內(nèi)部的管理器調(diào)整到3.3V。

USB_USB_CR1寄存器的reg_enable將用于控制電源管理器的使用。USB總線模塊

--USB模塊工作條件

3.收發(fā)器

USB模塊包括收發(fā)器。主機(jī)和USB之間使用的是差分信號。接收器接收差分信號,然后轉(zhuǎn)換為單端信號。給到

USB模塊的單端信號電壓范圍為1.55V-1.95V。發(fā)送器將單端信號轉(zhuǎn)換成差分信號,并且傳送給主機(jī)。差分信號給到“上游設(shè)備”,電壓范圍0V-3.3V。收發(fā)器也支持PS/2信號,能在0V-5V范圍內(nèi)接收/發(fā)送PS/2信號。收發(fā)器有上拉電阻支持PS/2信號。除了PS/2信號外,收發(fā)器還支持CMOS信號。使用USB_USBIO_CR1和USB_USBIO_CR2寄存器來選擇PS/2和CMOS模式。USB總線模塊

--USB模塊工作條件能通過手工方式強(qiáng)迫發(fā)送器發(fā)送信號。寄存器USB_USBIO_CR0用于手工發(fā)送信號。下面給出一個例子:

1)當(dāng)使能手工發(fā)送時,寄存器配置成發(fā)送單端0信號(即,D+和D-都為低);

2)可配置發(fā)送USB信號,USB信號有兩類:

D+低,D-高=J;D+高,D-低=K;

3)寄存器有一位用于讀取信號的電平,該位能確認(rèn)D+<D-還是D+>D-USB總線模塊

--邏輯傳輸模式

PSoC的USB模塊支持兩種類型的邏輯傳輸模式,即存儲轉(zhuǎn)發(fā)和直通模式。邏輯傳輸使用每個端點(diǎn)的寄存器設(shè)置進(jìn)行配置。任何一種邏輯傳輸模式都支持三種數(shù)據(jù)傳輸(中斷、塊、同步)。邏輯傳輸模式是存儲器管理與DMA配置的結(jié)合。邏輯傳輸模式和USB模塊內(nèi)的數(shù)據(jù)傳輸有關(guān)(比如:為端點(diǎn)讀/寫SRAM存儲單元)。它并不代表設(shè)備和主機(jī)之間的傳輸方法。USB支持兩種基本的邏輯傳輸模式:存儲轉(zhuǎn)發(fā)和直通模式。表5.3給出了更詳細(xì)的USB的傳輸模式。USB總線模塊

--邏輯傳輸模式USB傳輸模式特點(diǎn)存儲轉(zhuǎn)發(fā)模式直通模式SRAM的使用要求更多的存儲器要求較少的存儲器SRAM的管理手工自動SRAM的共享在端點(diǎn)間共享512字節(jié)SRAM,通過固件共享模塊自動的為每個端點(diǎn)分配較少的共享存儲器。剩余的存儲器用于“公共區(qū)域”。這個公共區(qū)域可以用于傳輸。IN命令在收到IN命令前,完整的包出現(xiàn)在SRAM中只有收到SRAMIN命令時,存儲器才填充數(shù)據(jù)。當(dāng)要有足夠的可用數(shù)據(jù)時,數(shù)據(jù)送給主機(jī)(基于DMA傳輸),而不需要等待填充完整的數(shù)據(jù)USB總線模塊

--邏輯傳輸模式特點(diǎn)存儲轉(zhuǎn)發(fā)模式直通模式OUT命令在OUT命令下,整個包寫到SRAM中,當(dāng)整個數(shù)據(jù)可用時,從SRAM存儲器復(fù)制到USB設(shè)備中。等待足夠的字節(jié)(取決于DMA配置)寫到SRAM存儲器。一旦有足夠的字節(jié)時,立即從SRAM存儲器復(fù)制到USB設(shè)備中數(shù)據(jù)傳輸當(dāng)所有字節(jié)寫到存儲器里,則傳輸數(shù)據(jù)當(dāng)足夠字節(jié)可用時,傳輸數(shù)據(jù)。不需要等待填充整個數(shù)據(jù)包DMA類型無DMA模式和手工DMA模式只有自動DMA模式支持傳輸類型適合于中斷和塊傳輸適合于同步傳輸U(kuò)SB傳輸模式USB總線模塊

--邏輯傳輸模式(存儲轉(zhuǎn)發(fā)模式)

1.非DMA訪問如圖(a)所示,給出了非DMA訪問的IN(CPU寫和SIE讀)交易的流程圖。如圖(b)所示,給出了非DMA訪問的OUT(CPU讀和SIE寫)交易的流程圖。USB總線模塊

--邏輯傳輸模式(存儲轉(zhuǎn)發(fā)模式)2.手工DMA訪問這個模式要求配置DMA控制器。這個模式和非DMA訪問類似,只不過是DMA執(zhí)行包的寫/讀操作。通過設(shè)置ARB_EPx_CFG寄存器的DMA_CFG位來產(chǎn)生一個端點(diǎn)的DMA請求。當(dāng)DMA服務(wù)被確認(rèn)和執(zhí)行(DMA_GNT),可以通過編程產(chǎn)生一個仲裁器中斷??梢允褂脝位蚨郉MA周期完成傳輸。當(dāng)每個DMA周期完成后,產(chǎn)生仲裁器中斷。類似的,當(dāng)所有的數(shù)據(jù)字節(jié)都寫到存儲器時,產(chǎn)生仲裁器中斷,同時設(shè)置IN_BUF_FULL位。USB總線模塊

--邏輯傳輸模式(存儲轉(zhuǎn)發(fā)模式)如圖(a)所示,給出了手工DMA訪問的IN(CPU寫和SIE讀)交易的流程圖。如圖(b)所示,給出了手工DMA訪問的OUT(CPU讀和SIE寫)交易的流程圖。USB總線模塊

--邏輯傳輸模式(直通模式)CPU編程初始化用于IN/OUT包所要求初始化緩沖區(qū)的大小,并且通知端點(diǎn)仲裁器模塊詳細(xì)的配置信息。塊然后控制存儲器的分配和處理所有存儲器的指針。在存儲器分配過程中,每個活動的IN端點(diǎn)(EP_ACTIVE和EP_TYPE寄存器設(shè)置)分配BUF_SIZE寄存器所指定的一小塊存儲空間。剩余的存儲器留下作為“公共區(qū)域”,用于其它所有的端點(diǎn)。USB總線模塊

--邏輯傳輸模式(直通模式)

在這種模式下,需要的存儲器是較少的,適合于全速同步傳輸,最多1023個字節(jié)。當(dāng)主機(jī)發(fā)送IN命令時,設(shè)備使用在專用存儲器區(qū)域的數(shù)據(jù)進(jìn)行響應(yīng)。同時為該EP更多的數(shù)據(jù)產(chǎn)生一個DMA請求。這個數(shù)據(jù)填充公共區(qū)域。不需要等待填充整個數(shù)據(jù)包。只等到USB_DMA_THRES_MSB和USB_DMA_THRES寄存器指定的在SRAM內(nèi)可用的數(shù)據(jù)數(shù)量,然后從公共區(qū)傳輸數(shù)據(jù)。USB總線模塊

--邏輯傳輸模式(直通模式)類似的,當(dāng)接收到一個OUT命令時,用于輸出端點(diǎn)的數(shù)據(jù)寫道了公共區(qū)。一旦公共區(qū)的數(shù)據(jù)數(shù)量大于USB_DMA_THRES_MSB和USB_DMA_THRES寄存器指定的在SRAM內(nèi)可用的數(shù)據(jù)數(shù)量時,仲裁器初始化到PHUB的DMA請求,并且數(shù)據(jù)寫道設(shè)備中。設(shè)備不需要等待填滿公共區(qū)。USB總線模塊

--邏輯傳輸模式(直通模式)這個模式要求配置USB_DMA_THRES_MSB和USB_DMA_THRES寄存器。類似的,必須配置PHUB寄存器用于BURSCNT的值。BURSCNT的值總是和DMA_THRES寄存器中設(shè)置的值相等。當(dāng)傳輸數(shù)據(jù)包的最后一個字節(jié)時,向PHUB發(fā)送Termin信號。除了DMA寄存器外,該模式還需要配置用于IN和OUT的BUF_SIZE寄存器,EP_ACTIVE和EP_TYPE寄存器。USB總線模塊

--邏輯傳輸模式(直通模式)如圖(a)所示,給出了直通模式下的IN(CPU寫和SIE讀)交易的流程圖。如圖(b)所示,給出了直通模式下OUT(CPU讀和SIE寫)交易的流程圖。USB總線模塊

--邏輯傳輸模式(控制端點(diǎn)的邏輯傳輸)控制端點(diǎn)有一個特殊的傳輸模式。該傳輸模式不需要共享512個字節(jié)的存儲器,而是有一個專用的8字節(jié)的寄存器緩沖區(qū)。如圖(a)所示,給出了控制端點(diǎn)邏輯傳輸?shù)腎N(CPU寫和SIE讀)交易的流程圖。如圖(b)所示,給出了控制端點(diǎn)邏輯傳輸?shù)腛UT(CPU讀和SIE寫)交易的流程圖。USB總線模塊

--邏輯傳輸模式(PS/2和CMOSI/O模式)

USB收發(fā)器能發(fā)送其它信號電平。在發(fā)送器端點(diǎn)使用上拉電阻,能使用而外的信號電平。配置寄存器USB_USBIO_CR1和USB_USBIO_CR2得到不同的信號電平。在USBIO_CR2寄存器的”test_res”將發(fā)送器處于上拉模式。USBIO_CR1寄存器的I/O模式將使USB處理USB模式或者驅(qū)動模式。當(dāng)處于驅(qū)動模式下,禁止USB信號,DMI和DPI位用于驅(qū)動D-,D+。這兒有兩個不同的驅(qū)動模式。在CMOS驅(qū)動模式下,D+和DMI關(guān)聯(lián),D-和DPI關(guān)聯(lián)。在開漏模式下,上拉電阻起作用。在這種狀態(tài)下,當(dāng)DPI和DMI位設(shè)置為高時,D+和D-處于高阻狀態(tài)。USB總線模塊

--邏輯傳輸模式(PS/2和CMOSI/O模式)獨(dú)立于驅(qū)動模式,可以在Vdd和D+,D-之間接上拉電阻(使用p2puen位)。支持一個內(nèi)部的1.5k?的上拉電阻,通過USBIO_CR1寄存器來使用這個上拉電阻。USBIO_CR1寄存器也用來輪詢D+和D-的狀態(tài)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理目前,計算機(jī)上的RS232和PS2端口絕大多數(shù)都被USB端口取代。而且,越來越多的USB設(shè)備出現(xiàn)在市場上。對USB設(shè)備的建立、配置和使用步驟,是USB設(shè)備設(shè)計者比較頭疼的事情。但實際上USB設(shè)備是很容易配置和使用的。人體接口設(shè)備(HumanInterfaceDevice,HID)是一種和USB連接的簡單接口,有很多令人感興趣的應(yīng)用。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(人體接口概述)

在日常生活中,經(jīng)常見到HID的應(yīng)用,典型的是和計算機(jī)連接的鍵盤和鼠標(biāo)。正如HID這個名字所描述的那樣,它是一個設(shè)備,用來在人和設(shè)備(計算機(jī))之間創(chuàng)建一個接口。由接口描述符實現(xiàn)將一個設(shè)備定義成HID。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(人體接口概述)描述符以結(jié)構(gòu)化的形式提供了,連接到主機(jī)設(shè)備的相關(guān)信息。當(dāng)把一個USB設(shè)備插入計算機(jī)時,計算機(jī)(主機(jī))通過USB描述符表要求設(shè)備的相關(guān)信息。通過接口描述符,計算機(jī)知道所連接的設(shè)備是HID。很多時候,主機(jī)要求一個設(shè)備所搜集數(shù)據(jù)的數(shù)據(jù)報告。為了理解這些信息,一個報告描述符用來定義HID報告內(nèi)的數(shù)據(jù)格式,以及如何使用這些數(shù)據(jù)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(人體接口概述)下面給出的一個鼠標(biāo)的工程,在這個工程中,設(shè)備報告按鍵和X/Y移動的信息。這個信息以主機(jī)能理解和使用的格式傳遞給主機(jī)。在報告描述符中,聲明了鼠標(biāo)數(shù)據(jù)的結(jié)構(gòu)和格式。主機(jī)周期性的輪詢設(shè)備數(shù)據(jù);如果設(shè)備沒有準(zhǔn)備好,它不響應(yīng)(NAK)主機(jī)。如果設(shè)備準(zhǔn)備好,則它響應(yīng)(ACK)鼠標(biāo),并且通過一個中斷類型的傳輸來傳輸信息?;谇懊鎴蟾婷枋龇l(fā)送的信息,當(dāng)主機(jī)從設(shè)備接收到數(shù)據(jù),它理解數(shù)據(jù)的含義和如何使用數(shù)據(jù)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(人體接口概述)這個過程類似于“老板”和“雇員”?!肮蛦T”(設(shè)備)告訴他的“老板”(主機(jī)),他將以特定格式的報告,發(fā)布他所有的“發(fā)現(xiàn)”。這個報告也包含所有要求的信息,這些信息用于解數(shù)據(jù),并處理它。所以,在一個指定的時間,比如每10ms,“老板”檢查報告是否準(zhǔn)備好。如果報告準(zhǔn)備好,則“雇員”響應(yīng)(ACK)“老板”,并且向“老板”發(fā)送一個報告,這個報告的格式是先前討論的格式。由于雙方前期討論了格式,“老板”準(zhǔn)確的知道如何處理數(shù)據(jù)。如果沒有準(zhǔn)備好報告,則“雇員”不響應(yīng)“老板”,老板轉(zhuǎn)向下一個“雇員”。由于在報告描述符中包含了很多的信息,下面將詳細(xì)介紹這個報告描述符。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)HID報告描述符的一個重要的特性是,對于一個相同的設(shè)備有幾百種方法建立和組織報告。它能包含設(shè)備所支持的各種特性的信息,指定了設(shè)備數(shù)據(jù)的組織結(jié)構(gòu),識別數(shù)據(jù)是否有一個指數(shù)(比如10-3,103),或者指定數(shù)據(jù)所跟的單位,比如:大小、時間、電流等。最后,報告描述符的目的是報告主機(jī)所希望接收和發(fā)送的設(shè)備和數(shù)據(jù)信息。報告描述符可以復(fù)雜也可以非常簡單。在很多情況下,并不能區(qū)分出復(fù)雜描述符設(shè)備和簡單描述符設(shè)備的區(qū)別。雖然表面上看上去非常令人“恐懼”,但是“本質(zhì)”是很容易理解的。一旦理解了報告描述符,則很容易的創(chuàng)建描述符,并且開始設(shè)計自己的HID。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)理解HID報告最容易的方法是分開查看其中的內(nèi)容。本章給出的例子是建立一個三按鍵的鼠標(biāo)。圖11.6給出了三按鍵鼠標(biāo)的報告描述符。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)這個報告看上去很復(fù)雜,但是非常直觀。下面將這個報告進(jìn)行分解。當(dāng)思考鼠標(biāo)和它所讀取得信息,你將思考按鍵和光標(biāo)移動。光標(biāo)是由X和Y值組成。按鍵是由按下/釋放信息構(gòu)成。這就是說描述符有一部分用于按鍵。另一部分用于光標(biāo)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)圖11.7給出了描述符的詳細(xì)說明。下面將看看描述符表內(nèi)的每一行的目的。通過理解每一行,來看每一行屬于按鍵還是光標(biāo)移動,以及它對數(shù)據(jù)的影響。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)在HID報告描述符中,這里有多個輸入條目(Input)。每個輸入條目是一個數(shù)據(jù)位域,用于告訴逐句將要從鼠標(biāo)發(fā)送的數(shù)據(jù)。圖11.8,11.9和11.10給出了輸入條目的配置和每個位域的設(shè)置。后面將詳細(xì)討論這些位域的設(shè)置。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)圖11.8給出了輸入條目的設(shè)置,該設(shè)置用于鼠標(biāo)按鍵的3位數(shù)據(jù)。

圖11.8用于鼠標(biāo)按鍵的3位數(shù)據(jù)的輸入條目的設(shè)置圖11.8用于鼠標(biāo)按鍵的3位數(shù)據(jù)的輸入條目的設(shè)置USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)如圖11.9所示,為了保留字節(jié)剩下的5位,在鼠標(biāo)按鍵的高5位補(bǔ)零。由于不想改變數(shù)據(jù),因此除了設(shè)置比特0位常數(shù)外,使用相同的輸入條目設(shè)置作為按鍵的設(shè)置。圖11.9用于鼠標(biāo)按鍵的3位數(shù)據(jù)的輸入條目的設(shè)置USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)如圖11.10所示,最后的輸入條目是X和Y軸信息。由于比特位2設(shè)置成相對的,主機(jī)接收到的信息包含X和Y數(shù)據(jù)的變化,然后主機(jī)根據(jù)這個信息相應(yīng)的修改光標(biāo)。圖11.10用于鼠標(biāo)X和Y信息的輸入條目設(shè)置USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)下面將更深入的分析報告描述符,一個報告描述符有下面的三種條目類型:主條目類型全局條目類型本地條目類型區(qū)分這些條目類型和一個條目是非常重要的。在前面所給出的三種條目類型下,有很多不同的條目。因為條目描述符可能非常復(fù)雜,在這里只討論通用的條目。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)1.主條目主條目用于定義數(shù)據(jù)所包含的東西或者將數(shù)據(jù)分組。主條目中有5種不同的條目,包括:Input、Output、Feature、Collection和EndCollection。Input、Output和Feature用于定義條目Collection和EndCollection用于分組目的。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)一個Input條目指設(shè)備發(fā)送到主機(jī)的數(shù)據(jù)(比如:點(diǎn)擊鼠標(biāo)按鍵);一個Ouput條目指主機(jī)發(fā)送設(shè)備的數(shù)據(jù)(比如:鍵盤上的CapsLockLED燈)。一個Feature條目是一個信息,這個信息是主機(jī)可以發(fā)送到設(shè)備,并且可以從設(shè)備讀回。Feature條目包含設(shè)備配置信息,修改這個信息將改變設(shè)備的行為。PC接口應(yīng)用程序經(jīng)常使用Feature報告,在GUI上點(diǎn)擊按鍵將修改設(shè)備的操作。

Collection用于將Input、Output和Feature條目分組。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)

在HID規(guī)范中,有三種不同類型預(yù)定義的集合(Collection),包括:物理(Physical);應(yīng)用(Application);邏輯(Logic);

USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)一個物理集合是由一個幾何點(diǎn)所搜集的數(shù)據(jù)組成。一個設(shè)備在一個時刻從多個傳感器收集的數(shù)據(jù)可以在一個物理分組內(nèi)分組數(shù)據(jù)。使用這個集合的一個設(shè)備例子是鼠標(biāo),它將按鍵和位置數(shù)據(jù)進(jìn)行分組。一個應(yīng)用集合將單設(shè)備內(nèi)將服務(wù)不同或者公共目的的條目進(jìn)行分組。一個例子是鍵盤,它將LED和鍵盤的按鍵進(jìn)行分組。一個邏輯集合將不同條目的數(shù)據(jù)分組來構(gòu)成一個結(jié)構(gòu)化的數(shù)據(jù)集合。一個例子是一個數(shù)據(jù)緩沖區(qū)和緩沖數(shù)據(jù)占用的字節(jié)數(shù)之間的關(guān)系。邏輯集合建立兩者之間的連接。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)每個輸入、輸出和特性條目都有一個PSoCCreator軟件設(shè)置的8位前綴。一個輸入條目有一個前綴’100000nn’,nn是跟隨字節(jié)的個數(shù)?!?0100nn’表示一個輸出條目,’101100nn’表示一個特性條目。跟隨前綴的是最多9個額外的比特位,這是固件開發(fā)人員必須設(shè)置的,用于描述條目數(shù)據(jù)。這還有23個額外的比特位,現(xiàn)在保留,用戶不可以訪問。在這個例子中,在輸入條目中,前綴后只有一個字節(jié)(8位)。所以輸入條目的前綴是0x81。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)注意:這里有9位數(shù)據(jù),大于8位數(shù)據(jù)。如果用戶在第8比特位選擇“BufferedBytes”,則要求這個額外的位,這將使這位的值為‘1’。前綴變成了0x82,添加一個額外的字節(jié)提供額外的數(shù)據(jù)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)下面將詳細(xì)說明條目設(shè)置中,每位的設(shè)置含義:(1)Data/Constant:Data表示數(shù)據(jù)是讀/寫。Constant表示數(shù)據(jù)是只讀的,不能被主機(jī)修改。(2)Array/Variable:Array表示只報告當(dāng)前活動的控制,比如正在按下按鍵。Variable表示報告每個控制的當(dāng)前狀態(tài),而不考慮按鈕是否按下。(3)Absolute/Relative:Absolute表示值基于一個固定的區(qū)域。Relative表示值是對于最后一次所讀取值的變化。鼠標(biāo)是一個例子,提供相對的數(shù)據(jù)。而游戲桿提供的是絕對的數(shù)據(jù)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)(4)NoWrap/Wrap:NoWrap表示值超出設(shè)定的范圍時,報告超出限制的值。Wrap表示,當(dāng)值一直增加,當(dāng)?shù)竭_(dá)設(shè)置的最大值時,值翻轉(zhuǎn)到最小的值。反之,當(dāng)值一直減小,當(dāng)?shù)竭_(dá)設(shè)置的最小值時,值翻轉(zhuǎn)到最大的值。當(dāng)使用Array時,不能使用Wrap。(5)Linear/Non-Linear:Linear表示測量數(shù)據(jù),這些報告的數(shù)據(jù)之間有一個線性關(guān)系。當(dāng)使用Array時,不能設(shè)置為Linear。當(dāng)使用Non-Linear時,來自傳感器的非線性曲線的數(shù)據(jù)就是這樣一種情況。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)(6)NoNullPosition/NullState:NoNullPosition表示由控制所發(fā)送的任何數(shù)據(jù)都包含有意義的數(shù)據(jù)。NullState表示控制可以發(fā)送無意義的數(shù)據(jù),這個數(shù)據(jù)由超出所設(shè)置的最小和最大范圍的值表示。(7)Nonvolatile/Volatile:Nonvolatile表示只有和主機(jī)互動,設(shè)備才能修改值。Volatile表示設(shè)備不需要主機(jī)的驗證就可以修改值。這位只應(yīng)用到輸出和特性條目。當(dāng)使用Array時,不能使用Volatile。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)(8)BitField/BufferedBytes:BitField表示字節(jié)中的每一位能表示一片具體的數(shù)據(jù)。BufferedBytes表示數(shù)據(jù)用一個或多個字節(jié)表示。鼠標(biāo)或鍵盤時一個使用BitField的例子,而條碼器數(shù)據(jù)使用BufferedBytes。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)2.全局條目和本地條目在前面的報告描述符中,可以看到這些條目,比如:usage,usagepage,logicalminimum等。全局條目用于描述數(shù)據(jù),比如它的限制、單位、位大小和數(shù)量。本地條目用來定義數(shù)據(jù)的各種參數(shù),比如:主機(jī)使用什么數(shù)據(jù),然后將字符串和條目進(jìn)行關(guān)聯(lián)。這里有兩個關(guān)鍵字用來區(qū)分全局和本地條目:全局條目“describe”和本地條目“define”。下面簡單的介紹本地和全局條目。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)(1)全局條目UsagePage:32位的值用于識別設(shè)備執(zhí)行的一個功能,比如:控制設(shè)備或者游戲控制器。高16位是全局UsagePage條目,低16位是本地Usagepage條目。LogicalMaximumandMinimum:定義了在Array或者Variable內(nèi),用于報告值的限制。比如:一個鼠標(biāo)報告位置的值從127到-127,有一個邏輯最大值127和邏輯最小值-127。另一個例子是單狀態(tài)的按鍵,或者確認(rèn)或者釋放,有一個邏輯的最小值‘0’和一個邏輯最大值‘1’。ReportSize:確認(rèn)在輸入、輸出或者特性條目內(nèi)位域的大小。ReportCount:確認(rèn)用于一個輸入、輸出或者特性條目的數(shù)據(jù)域的大小。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)(2)本地條目Usage:用于條目或者集合的一個索引,表示它的使用或者功能。一個Usage和一個UsagePage表示低16位。UsageMinimumandMaximum:用于鏈接UsageID和一個數(shù)組或者比特映射的數(shù)據(jù)UsageMinimum定義了開始點(diǎn),UsageMaximum定義了結(jié)束點(diǎn)。在鼠標(biāo)工程中,有三個按鍵,UsageMinimum和UsageMaximum分配ID到按鍵1(0x01),按鍵2(0x02)和按鍵3(0x03)。USB人體學(xué)輸入設(shè)備的實現(xiàn)

--人體接口設(shè)備的原理(報告描述符)在一個最小值,報告必須包含下面的條目,其他條目提供了更詳細(xì)的細(xì)節(jié):Input,Output或者FeatureUsageUsagePageLogicalMinimumandMaximumReportSizeReportCountUSB人體學(xué)輸入設(shè)備的實現(xiàn)

--創(chuàng)建和配置工程1.在計算機(jī)上的桌面上,選擇開始->所有程序->Cypress->PSoCCreator2.0->PsoCCreator2.0。打開PSoCCreator軟件;2.在PSoCCreator2.0軟件的主界面下,選擇File->New->Project...;3.在NewProject窗口,選擇EmptyPSoC3Design模板,并將工程命命名為SquareMouse。選擇工程保存路徑,點(diǎn)擊“OK”按鈕;

創(chuàng)建和配置工程

--修改系統(tǒng)時鐘配置在該設(shè)計中,對于USB操作,設(shè)備的USB塊要求48MHz的時鐘,ILO為100kHz。為了得到48MHz的時鐘,設(shè)置IMO為24MHz,USB時鐘為IMO*2。調(diào)整PLL,USB和IMO的設(shè)置。下面給出配置系統(tǒng)時鐘的步驟:1.在WorkspaceExplorer窗口下的Source標(biāo)簽欄下,選擇SquareMouse.cydwr,并打開該文件。創(chuàng)建和配置工程

--修改系統(tǒng)時鐘配置2.選擇Clock標(biāo)簽,出現(xiàn)系統(tǒng)時鐘樹界面。按照如圖11.11所示的界面,配置系統(tǒng)時鐘。圖11.11時鐘配置界面創(chuàng)建和配置工程

--添加并配置USB文件系統(tǒng)USBFS

下面給出添加并配置USBFS的步驟,主要步驟包括:1.拖動并且放置USBFS元件到原理圖內(nèi)(ComponentsCatalog->Communcation->USBFS)。2.雙擊器件原理圖內(nèi)的USBFS_1打開配置窗口。3.將器件命名為USBFS_1。4.如圖11.12,選擇HIDDescriptor標(biāo)簽。

創(chuàng)建和配置工程

--添加并配置USB文件系統(tǒng)USBFS圖11.12HIDDescriptor配置界面創(chuàng)建和配置工程

--添加并配置USB文件系統(tǒng)USBFS5.下一步選擇Co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論