usb設計
Ⅰ 什麼是USB,USB電路如何設計
USB即通用串列匯流排,有USB1.0,USB2.0,現在已經到了USB3.0,不過還沒用廣泛推廣,能向下兼容,專速度據說能屬和1394相媲美。
USB電路很簡單,就是四線或者五線,只要所用的MCU上有專用介面直接連接即可,想用起來就需要有底層驅動支持了
Ⅱ 單片機如何與USB介面相連接其硬體電路如何設計
數據接收存儲技術革新是信號採集處理領域內的一個重要課題。利用這種技術,可以把信號的實時採集和精確處理在時間上分為兩個階段,有利於獲得令人更滿意的處理結果。在無線數傳接收設備中應用數據接收存儲方法時,除了要滿足數據傳輸速率和差錯控制方面的要求外,還需要考慮如何使設備易於攜帶、介面簡單、使用方便。
傳統外設介面技術不但數據傳輸速率較低,獨佔中斷、I/O地址、DMA通道等計算機系統關鍵資源,容易造成資源沖突問題,而且使用時繁雜的安裝配置手續也給終端用戶帶來了諸多不便。近年來,USB介面技術迅速發展,新型計算機紛紛對其提供支持。USB2.0是USB技術發展的最新成果,利用USB2.0介面技術開發計算機外設,不但可以借用其差錯控制機制[1][6]減輕開發人員的負擔、獲得高速數據傳輸能力(480Mb/s),而且可以實現便捷的機箱外即插即用特性,方便終端用戶的使用。
1 無線數傳接設備總體構成
無線數傳接收設備是某靶場測量系統的一個重要組成部分。如圖1所示,該設備由遙測接收機利用天線接收經過調制的無線電波信號,解調後形成傳輸速率為4Mb/s的RS-422電平差分串列數據流。以幀同步字打頭的有效數據幀周期性地出現在這些串列數據中。數據轉存系統從中提取出有效的數據幀,並在幀同步字後插入利用GPS接收機生成的本地時間信息,用於記錄該幀數據被接收到的時間,然後送給主機硬體保存。
在無線數傳接收設備中,數據轉存系統是實現數據接收存儲的關鍵子系統。下面將詳細介紹該系統的硬體實現及工作過程。
2 數據轉存系統基本構成及硬體實現
數據轉存系統主要由FPGA模塊、DSP模塊、USB2.0介面晶元構成,各個模塊之間的相互關系如圖2所示示。圖中,4Mb/s的串列數據輸入信號SDI已由RS-422差分電平轉換為CMOS電平。為突出重點,不太重要的信號連線未在圖中繪出。下面分別介紹這幾個模塊的主要功能。
2.1 FPGA模塊實現及春功能
FPGA模塊在Altera公司ACEX系列的EP1K30TI144-2晶元中實現。其中主要的功能子模塊有:位同步邏輯、幀同步邏輯、授時時鍾和解碼邏輯。位同步邏輯主要由數字鎖相環構成,用於從串列數據輸入信號SDI中恢復出位時鍾信號。幀同步邏輯從位同步邏輯的輸出信號提取幀同步脈沖。兩者為DSP利用其同步串列口接收串列數據作好准備。這樣,利用一對差分信號線就可以接收同步串列數據,簡化了印製電路板的外部介面。授時時鍾在DSP和GSP接收機的協助下生成精度為0.1ms的授時信息。解碼邏輯用於實現系統互聯。
2.2 DSP模塊實現及其功能
DSP模塊是數據轉存系統的主控模塊,在T1公司16位定點DSP晶元TMS320F206[4]中實現。在DSP的外部數據空間還配置了32KX16的高速SRAM,可以緩存80餘幀數據,用於提高系統的差錯控制能力。DSP利用同步串列口接收FPGA送來的同步串列數據,利用非同步串口接收GPS接收機送來時間信息(用於初始化FPGA授時時鍾),利用外部匯流排介面訪問FPGA授時時鍾、外部SRAM、ISP1581的片內寄存器。可以看出DSP模塊主要用於完成數據幀的接收、重組以及轉存調度等任務。
ISP1581晶元是PHILIPS公司推出的高速USB2.0設備控制器,實現了USB2.0/1.1物理層、協議層,完全符合USB2.0規范,即支持高速(480Mb/s)操作,又支持全速(12Mb/s)操作。ISP1581沒有內嵌微處理器,但對微處理器操作了靈活的介面。在上電時,通過配置BUS——CONF、DAO、MODE1、MODE0、DA1引腳電平可以適應絕大多數的微處理器介面類型。例如,通過BUS_CONF/DA0引腳,匯流排配置可以選擇普通處理器模塊(Generic Phocessor mode)中分割匯流排模式(Split Bus Mode);在普通處理器模式下,通過MODE0/DA1引腳可以選擇讀寫選通為8051風格或者Motorola風格。
在數據轉存系統中,ISP1581用於處理主機的高速數據傳輸。它工作在普通處理器介面模式下,採用8051風格的讀寫選通信號,由DSP晶元TMS320F206控制。兩者在選定工作方式下的信號連線如圖3所示,圖中未畫出的信號引腳可以懸空,供電引腳的連接方式在參考資料[2]第46頁有簡明描述。在FPGA解碼邏輯的作用下,ISP1581的片內寄存器被映射在DSP的片外數據空間中。DSP通過8位地址線選擇要訪問的寄存器,在讀寫選通信號的控制下,利用16位數據線與選定的寄存器交換數據。在訪問ISP1581單位元組寄存器時,數據匯流排高位元組內容無關緊要。ISP1581通過中斷引腳INT向DSP報告發生的匯流排事件,利用D+、D-引腳完成與主機的數據交換。
3 數據轉存系統的工作過程
系統加電後,當FPGA配置過程結束時,如果有串列數據輸入,位同步邏輯和幀同步邏輯便啟動同步過程。同時,DSP片內FLASH中復位中斷服務程序c_int0()[4]被立即執行,在建立好C語言的工作環境下,它會調用主函數main()。在main()中,需要安排好一系列有先後順序的初始化工作。其中,ISP1581的初始化過程比較復雜,需要考慮設備採用的供電方式(這里為自供電[6]方式)、插接主機和系統上電的先後次序,並需要與USB匯流排枚舉[1][6]過程相結合。
在FPGA中的位同步邏輯和幀同步邏輯均進入同步狀態,且DSP主控模塊配合主機完成初始化任務後,即可啟動數據的傳輸過程。下面介紹一下ISP1581的初始化過程及DSP控制的數據幀的接收機轉存流程。
3.1 ISP1581的初始化
在初始化過程中,首先需要設置影響ISP1581自身工作方式的一些寄存器,然後與主機端USB系統配合進行,應答來自主機端的設備請求。當數據轉存系統板作為USB 2.0設備通過連接器連到主機USB根集線器上的一個埠時,主機便可檢測到這一連接,接著給該埠加電,檢測設備並激活該埠,向USB設備發送復位信號。設備收到這一復位信號後,即進入預設狀態,此後就能夠通過預設通信通道響應主機端送來的設備請求。主機通過描述符請求(GET_DESCRIPTOR)獲得設備端的詳細信息,通過設置地址請求(SET_ADDRESS)設置設備地址,通過設置配置請求(SET_CONFIGURATION)選定合適的設備配置。在設備成功響應了這些設備請求之後,就可以與主機通信了。
在響應主機請求的過程中,DSP需要配置ISP1581的端點以實現不同類型的傳輸通道。根據數據傳輸速率的要求,除了預設的控制通道外,系統中實現了一個批傳輸(bulk)[1]類型的輸入通道。這樣,ISP1581就可以像FIFO一樣方便地從數據轉存系統向主機傳輸數據,而且具有差錯控制能力,簡化了設備端軟體設計的復雜性。
3.2 數據幀的接收轉存過程
系統正常工作時,需要與主機端程序相互配合。主要端需要開發者實現的程序包括設備驅動程序和應用程序。在Windows 2000操作系統下,USB設備驅動程序為WDM模型的驅動程序,開發環境DriverStudio為WDM型驅動程序提供了框架結構,使得驅動開發變得非常容易(參見參考文獻[5]第八、九、十章)。驅動程序接收應用程序的請求,利用USB匯流排驅動程序(US-BD)和主機控制器驅動程序(HCD)通過主機控制器安排USB匯流排事務,設備端則根據這些事務調度相應的數據幀的傳輸。關於主機埠如何安排匯流排事務可以查閱參考文獻[1]。以下著重介紹設備端數據的調度過程。
數據幀的接收轉存過程主要由DSP負責,DSP在外部SRAM中建立了一個數據幀的隊列,如圖4所示。系統主要工作在中斷驅動模式下,與同步串列口相關的中斷服務程序負責建立隊列的尾部,對應於ISP1581中斷引腳INT的中斷服務程序負責建立隊列的頭部。
當以幀同步字打頭的一幀數據以串列位流的形式到來時,FPGA產生的幀同步脈沖可以直接啟動DSP同步串列口接收數據,該同步脈沖同時以中斷方式通知DSP為一幀數據的接收做好准備。DSP接到通知後,首先檢查外部SRAM中是否有足夠的空間容納一幀數據。如果沒有空間,則丟棄當前數據幀(根據設計,這種情況是很少見的);如果有空間,則為當前數據幀保留足夠的空間。接著在幀起始位置填寫幀步字,讀取授時時鍾的當前值並填寫在幀同步字後。這樣,一個新的數據幀(圖4中數據幀F_N)就建立了,但是並沒有加入到隊列中,而是要等待來自同步串列口的後繼數據嵌入該幀中後再加入到隊列中。
同步串列口的接收緩沖區在接收到若干字(由初始化時的設置決定)後,會向DSP提出中斷請求。在中斷服務程序中,DSP讀取接收緩沖區中的內容,並將其填入上述新開辟的幀F_N中。在一幀數據接收完畢後,就將該幀添加到隊列的尾部,表示該幀數據已經准備好(圖4中數據幀F_R),可以通過ISP1581送給主機硬體保存。
DSP在查詢到隊列中有已經准備好的數據幀存在時,就設置ISP1581的端點索引寄存器(Endpoint Index Register)使其指向初始化時配置的批傳輸輸入端點,然後將隊列首幀數據通過ISP1581的數據埠寄存器(Data Port Register)填寫在端點緩沖區中。在端點緩沖區被填滿後,它就自動生效。在不能填滿端點緩沖區的情況下,可以通過設置控制功能寄存器(Control Function Register)的VENDP位[2]強制該端點緩沖區生效。端點緩沖區生效後,在USB匯流排上下一IN令牌到來時,該端點緩沖區中的數據就通過USB匯流排傳輸到主機中。主機成功接收到數據後,會給ISP1581以ACK應答。能夠通過INT引腳報告給DSP,DSP就可以繼續往端點中填寫該幀其餘數據。
在隊列首幀數據被成功轉移到主機後,DSP就丟棄首幀數據。如果隊列在還有數據幀,則將次首幀作為首幀,繼續前述傳輸過程;如果沒有要傳輸的數據幀,則為隊列首幀指針Head_Ptr賦空值(NULL),等待新的數據幀的到來。
USB2.0是計算機外設介面技術發展的最新成功,具有廣闊的應用前景。本文介紹了PHILIPS公司USB2.0介面晶元ISP1581在無線數據接收設備中的應用。高性能、便攜化的無線數據傳接收設備。其在靶場實彈試驗中受到了用戶的好評。
PC機的RS-232C串列口是使用最多的介面之一。因此,4串口、8串口等以增加串口數量為目的的ISA匯流排卡產品大量問世。一般串口應用只是使用了RXD和TXD兩條傳輸線和地線所構成的串口的最基本的應用條件,而本文介紹一個利用PC機的RS-232串口加上若干電路來實現多串口需求的介面電路。
1.PC機串口的RTS和DTR及擴展電路
RTS和DTR是PC機中8250晶元的MODEM控制寄存器的兩個輸出引角D1和D0位,口地址為COM1的是3FCH,口地址為COM2的是2FCH。我們可以利用對MODEM控制寄存器3FCH或2FCH的寫操作對其進行控制。從而利用該操作和擴展電路實現對TXD和RXD進行多線擴展,圖1是其擴展電路。
在圖1所示的PC機串口擴展電路中,74LS161是二進制計數器,1腳是清0端,2腳是計數端,計數脈沖為負脈沖信號,4051是八選一雙向數字/模擬電子開關電路,其中一片用於正向輸出,一片用於反向輸出。該擴展電路工作原理是通過控制PC機串口的DTR輸出的高低電平來形成74LS161的P2腳計數端的負脈沖信號,使161的輸出端P14(QA)、P13(QB)、P12(QC)、P11(QD)腳依次在0000到1111十六個狀態中變化,本電路僅使用了QA、QB、QC三個輸出來形成對4051的ABC控制,最終使得4051(1)的輸入端TXD依次通過與TX1~TX8導通而得到輸出信號,4051(2)的輸出端RXD與RX1~RX8依次導通形成輸入信號。由於RXD和TXD的導通是一一對應的,因此串口通信就可以依次通過與多達8個帶有三線基本串口的外部設備進行通信傳輸以實現數據傳送。PC機端的電平轉換電路是將RS232電平轉換為TTL電平,外設端的電平轉換電路是將TTL電平轉換為RS232電平。由於這種轉換有許多電路可以實現,因而,這里不再介紹。
2.電路使用程序
對PC機串口COM1的編程如下:
……
… ;對COM1口的波特率等設置;
MOV DX,3FCH
MOV AL,XXXXXX01B
OUT DX,AL;D1生成RTS負脈沖,對74LS161輸出端清0
MOV AL,XXXXXX11B;
OUT DX,AL ;4051的RX1和TX1導通
CALL COM ;調用通信子程序,與第一個外部設備通信;
MOV CX,7 ;設置循環計數器;
NEXT:MOV DX ,3FCH
MOV AL,XXXXXX10B
OUT DX ,AL ;D0位生成DTR的負脈沖,形成161的P2腳計數脈沖
MOV AL,XXXXXX11B
OUT DX,AL ;RX2和TX2導通
CALL COM ;調用通信子程序,與第二個外部設備通信
LOOP NEXT ;循環與另外6個外部設備通信
…
… ;通信子程序略
3.使用說明
由於該擴展的多路介面在通信時共用一個子程序,因此在與某一路導通時,系統只能與這一路的外部設備進行通信聯絡。
如果工作現場需要立即和某一路通信,則需要對3FCH的D1位執行兩個寫操作並在RTS腳形成負脈沖,以對7416I清0後,再連接執行若干次對DTR的兩次寫操作。例如想對第4路外設通信,則需要執行完成對74LS161清0後,再連續三次對3FCH的D0位進行兩個寫操作以形成DTR腳的負脈沖,然後即可調用通信子程序。
如需使用PC機的COM2串口,只需將程序中的3F8H~3FDH全部換成2F8H~2FDH即可。
如果使用十六選一雙向數字/模擬電子開關電路,可將74LS161的QA、QB、QC、QD四個輸出端接至電子開關的四個控制端A、B、C、D,這樣就可以達到一個PC機的RS232口與16個帶有串口的外設的數據通信。
Ⅲ 高分懸賞畢業論文-USB介面設計!!!!
http://wenku..com/view/5afddb6aa45177232f60a2df.html
Ⅳ usb介面為什麼設計成了現在這樣要分正反面
我覺得就是一開始沒考慮周全。為啥iPhone 6以後的充電口就可以不分正反?充電難道不分正負極?希望早點出不分正反的U口。每次插U口都要看半天煩死了!
Ⅳ USB數字鍵盤設計
USB HID報告及報告描述符簡介相關討論:http://www.ednchina.com/blog/computer00/14382/category.aspx
在USB中,USB HOST是通過各種描述符來識別設備的,有設備描述符,
配置描述符,介面描述符,端點描述符,字元串描述符,報告描述符等等。
USB報告描述符(Report Descriptor)是HID設備中的一個描述符,它是比較
復雜的一個描述符。
USB HID設備是通過報告來給傳送數據的,報告有輸入報告和輸出報告。
輸入報告是USB設備發送給主機的,例如USB滑鼠將滑鼠移動和滑鼠點擊等
信息返回給電腦,鍵盤將按鍵數據數據返回給電腦等;輸出報告是主機發送
給USB設備的,例如鍵盤上的數字鍵盤鎖定燈和大寫字母鎖定燈等。報告是
一個數據包,裡麵包含的是所要傳送的數據。輸入報告是通過中斷輸入端點
輸入的,而輸出報告有點區別,當沒有中斷輸出端點時,可以通過控制輸出
端點0發送,當有中斷輸出端點時,通過中斷輸出端點發出。
而報告描述符,是描述一個報告以及報告裡面的數據是用來干什麼用的。
通過它,USB HOST可以分析出報告裡面的數據所表示的意思。它通過控制輸入
端點0返回,主機使用獲取報告描述符命令來獲取報告描述符,注意這個請求
是發送到介面的,而不是到設備。一個報告描述符可以描述多個報告,不同的
報告通過報告ID來識別,報告ID在報告最前面,即第一個位元組。當報告描述符中
沒有規定報告ID時,報告中就沒有ID欄位,開始就是數據。更詳細的說明請參看
USB HID協議,該協議可從http://www.usb.org下載。
USB報告描述符可以通過使用HID Descriptor tool來生成,這個工具可以
到http://www.usb.org下載,為了方便大家,我順便上傳了一份。
http://www.ednchina.com/Upload/Blog/2007/4/2/af7c3443-ad61-4465-ADC7-a74d28bbc322.zip
下面通過由HID Descriptor tool生成的USB滑鼠和USB鍵盤來說明一下報告
描述符和報告。
code char KeyBoardReportDescriptor[63] = {
//表示用途頁為通用桌面設備
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//表示用途為鍵盤
0x09, 0x06, // USAGE (Keyboard)
//表示應用集合,必須要以END_COLLECTION來結束它,見最後的END_COLLECTION
0xa1, 0x01, // COLLECTION (Application)
//表示用途頁為按鍵
0x05, 0x07, // USAGE_PAGE (Keyboard)
//用途最小值,這里為左ctrl鍵
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
//用途最大值,這里為右GUI鍵,即window鍵
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
//邏輯最小值為0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//邏輯最大值為1
0x25, 0x01, // LOGICAL_MAXIMUM (1)
//報告大小(即這個欄位的寬度)為1bit,所以前面的邏輯最小值為0,邏輯最大值為1
0x75, 0x01, // REPORT_SIZE (1)
//報告的個數為8,即總共有8個bits
0x95, 0x08, // REPORT_COUNT (8)
//輸入用,變數,值,絕對值。像鍵盤這類一般報告絕對值,
//而滑鼠移動這樣的則報告相對值,表示滑鼠移動多少
0x81, 0x02, // INPUT (Data,Var,Abs)
//上面這這幾項描述了一個輸入用的欄位,總共為8個bits,每個bit表示一個按鍵
//分別從左ctrl鍵到右GUI鍵。這8個bits剛好構成一個位元組,它位於報告的第一個位元組。
//它的最低位,即bit-0對應著左ctrl鍵,如果返回的數據該位為1,則表示左ctrl鍵被按下,
//否則,左ctrl鍵沒有按下。最高位,即bit-7表示右GUI鍵的按下情況。中間的幾個位,
//需要根據HID協議中規定的用途頁表(HID Usage Tables)來確定。這里通常用來表示
//特殊鍵,例如ctrl,shift,del鍵等
//這樣的數據段個數為1
0x95, 0x01, // REPORT_COUNT (1)
//每個段長度為8bits
0x75, 0x08, // REPORT_SIZE (8)
//輸入用,常量,值,絕對值
0x81, 0x03, // INPUT (Cnst,Var,Abs)
//上面這8個bit是常量,設備必須返回0
//這樣的數據段個數為5
0x95, 0x05, // REPORT_COUNT (5)
//每個段大小為1bit
0x75, 0x01, // REPORT_SIZE (1)
//用途是LED,即用來控制鍵盤上的LED用的,因此下面會說明它是輸出用
0x05, 0x08, // USAGE_PAGE (LEDs)
//用途最小值是Num Lock,即數字鍵鎖定燈
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
//用途最大值是Kana,這個是什麼燈我也不清楚^_^
0x29, 0x05, // USAGE_MAXIMUM (Kana)
//如前面所說,這個欄位是輸出用的,用來控制LED。變數,值,絕對值。
//1表示燈亮,0表示燈滅
0x91, 0x02, // OUTPUT (Data,Var,Abs)
//這樣的數據段個數為1
0x95, 0x01, // REPORT_COUNT (1)
//每個段大小為3bits
0x75, 0x03, // REPORT_SIZE (3)
//輸出用,常量,值,絕對
0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
//由於要按位元組對齊,而前面控制LED的只用了5個bit,
//所以後面需要附加3個不用bit,設置為常量。
//報告個數為6
0x95, 0x06, // REPORT_COUNT (6)
//每個段大小為8bits
0x75, 0x08, // REPORT_SIZE (8)
//邏輯最小值0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//邏輯最大值255
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
//用途頁為按鍵
0x05, 0x07, // USAGE_PAGE (Keyboard)
//使用最小值為0
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
//使用最大值為0x65
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
//輸入用,變數,數組,絕對值
0x81, 0x00, // INPUT (Data,Ary,Abs)
//以上定義了6個8bit寬的數組,每個8bit(即一個位元組)用來表示一個按鍵,所以可以同時
//有6個按鍵按下。沒有按鍵按下時,全部返回0。如果按下的鍵太多,導致鍵盤掃描系統
//無法區分按鍵時,則全部返回0x01,即6個0x01。如果有一個鍵按下,則這6個位元組中的第一
//個位元組為相應的鍵值(具體的值參看HID Usage Tables),如果兩個鍵按下,則第1、2兩個
//位元組分別為相應的鍵值,以次類推。
//關集合,跟上面的對應
0xc0 // END_COLLECTION
};
通過上面的分析,我們知道這個報告中只有一個報告,所以沒有報告ID,
因此返回的都是實際使用的數據。總共有8位元組輸入,1位元組輸出。其中輸入的
第一位元組用來表示特殊按鍵,第二位元組保留,後面的六位元組為普通按鍵。如果
只有左ctrl鍵按下,則返回01 00 00 00 00 00 00 00(十六進制),如果
只有數字鍵1 按下,則返回00 00 59 00 00 00 00 00,如果數字
鍵1 和2 同時按下,則返回00 00 59 5A 00 00 00 00,如果
再按下左shift 鍵,則返回02 00 59 5A 00 00 00 00,
然後再釋放1 鍵,則返回02 00 5A 00 00 00 00 00,
然後全部按鍵釋放,則返回00 00 00 00 00 00 00 00。
這些數據(即報告)都是通過中斷端點返回的。當按下Num Lock鍵時,PC會發送
輸出報告,從報告描述符中我們知道,Num Lock的LED對應著輸出報告的最低位,
當數字小鍵盤打開時,輸出xxxxxxx1(二進制,打x的由其它的LED狀態決定);
當數字小鍵盤關閉時,輸出xxxxxxx0(同前)。取出最低位就可以控制數字鍵鎖定LED了。
下面這個報告描述符是USB滑鼠報告描述符,比起鍵盤的來說要簡單些。
它描述了4個位元組,第一個位元組表示按鍵,第二個位元組表示x軸(即滑鼠左右移動,
0表示不動,正值表示往右移,負值表示往左移),第三個位元組表示y軸(即滑鼠
上下移動,0表示不動,正值表示往下移動,負值表示往上移動),第四個位元組
表示滑鼠滾輪(正值為往上滾動,負值為往下滾動)。
code char MouseReportDescriptor[52] = {
//通用桌面設備
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//滑鼠
0x09, 0x02, // USAGE (Mouse)
//集合
0xa1, 0x01, // COLLECTION (Application)
//指針設備
0x09, 0x01, // USAGE (Pointer)
//集合
0xa1, 0x00, // COLLECTION (Physical)
//按鍵
0x05, 0x09, // USAGE_PAGE (Button)
//使用最小值1
0x19, 0x01, // USAGE_MINIMUM (Button 1)
//使用最大值3。1表示左鍵,2表示右鍵,3表示中鍵
0x29, 0x03, // USAGE_MAXIMUM (Button 3)
//邏輯最小值0
0x15, 0x00, // LOGICAL_MINIMUM (0)
//邏輯最大值1
0x25, 0x01, // LOGICAL_MAXIMUM (1)
//數量為3
0x95, 0x03, // REPORT_COUNT (3)
//大小為1bit
0x75, 0x01, // REPORT_SIZE (1)
//輸入,變數,數值,絕對值
//以上3個bit分別表示滑鼠的三個按鍵情況,最低位(bit-0)為左鍵
//bit-1為右鍵,bit-2為中鍵,按下時對應的位值為1,釋放時對應的值為0
0x81, 0x02, // INPUT (Data,Var,Abs)
//填充5個bit,補足一個位元組
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
//用途頁為通用桌面
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//用途為X
0x09, 0x30, // USAGE (X)
//用途為Y
0x09, 0x31, // USAGE (Y)
//用途為滾輪
0x09, 0x38, // USAGE (Wheel)
//邏輯最小值為-127
0x15, 0x81, // LOGICAL_MINIMUM (-127)
//邏輯最大值為+127
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
//大小為8個bits
0x75, 0x08, // REPORT_SIZE (8)
//數量為3個,即分別代表x,y,滾輪
0x95, 0x03, // REPORT_COUNT (3)
//輸入,變數,值,相對值
0x81, 0x06, // INPUT (Data,Var,Rel)
//關集合
0xc0, // END_COLLECTION
0xc0 // END_COLLECTION
};
通過對上面的報告分析,我們知道報告返回4個位元組,沒有報告ID。如果滑鼠左鍵按下,
則返回01 00 00 00(十六進制值),如果右鍵按下,則返回02 00 00 00,如果中鍵按下,
則返回04 00 00 00,如果三個鍵同時按下,則返回07 00 00 00。如果滑鼠往右移動則
第二位元組返回正值,值越大移動速度越快。其它的類推。
Ⅵ USB為什麼不設計成正反盲插
面對傳統的USB-A介面,可能99%的人都有著數不清的插反、插錯經歷,即便有時候注意去看LOGO標志、看握把的凹陷,但仍舊不能確保100%。對於這個問題,Intel的技術大牛、USB標准早期制定者Ajay Bhatt在接受DesignNews采訪時終於給了全世界一個答復。他說,在USB口設計之初,其實就考慮過正反盲插的問題,但之所以沒能最終推行,阻力主要是成本,因為做盲插需要消耗多一倍的線纜和電氣元件。
Bhatt說,對於一項前景並不明朗的新技術,成本是否足夠吸引廠家們推廣讓他們不得不納入很高的考慮優先順序。當然,現在是事後了,你會說,USB比串口、並口要好很多,後者事實上更費料,而且還無法熱插拔。
看起來Bhatt對當時他們的謹慎有些後悔,同時,他還認為,當時起始速率其實也能做更高比如100Mbps,而不是12Mbps(USB 1.1)。
Type-C並非僅支持正反插
在USB 3.1標准中,有三種介面樣式,一個是Type-A(即Standard-A,傳統計算機上最常見的USB介面樣式),一個是Type-B(既Micro-B,三星Galaxy Note 3配備的介面樣式),另外一個是Type-C(即本文中提到的全新設計的介面樣式)。
簡單地說,USB IF協會從目前存在的接近十種之多的USB介面中選擇了其中最為廣泛的兩種,分別命名為Type-A和Type-B,接著又重新設計了一種新的介面並將之命名為Type-C;只有這三種介面才能夠支持USB 3.1標准下的數據傳輸速度、電流傳輸大小等等各項技術標准。
Ⅶ USB免驅動設計有什麼區別
藍牙適配器,免驅動的就是使用微軟系統自帶的驅動,帶驅動的,就是使用廠家的驅專動。
一般,屬免驅動的,功能都比較簡單,像藍牙音頻網關之類的功能,一般是沒有的。但價格低廉,且安裝方便,因為即插即用,不必安裝驅動。
帶驅動的,通常功能比較豐富,價格偏貴一點。
藍牙適配器指數碼產品適用藍牙設備的介面轉換器。藍牙適配器採用了全球通用的短距離無線連接技術,使用與微波、遙控器以及有些民用無線通訊器材相同的2.4GHz附近免付費、免申請的無線電頻段,為避免此頻段電子裝置眾多而造成的相互干擾,因而以1600次高難度跳頻以及加密保密技術。
Ⅷ usb主機與usb設備設計上的區別
區別就是USB設備只是通過USB傳輸信息和供電,計算機完成計算工作,比如U盤。
USB主機呢,就是USB介面除了供電和傳輸信息,剩下的計算功能都是他自己完成的。
Ⅸ 怎樣設計才能通過usb口把程序輸入到單片機中,電路圖該怎麼畫
USB載入程序要和單片機結合,要參考具體單片機對載入的要求,我是用STM32F103,可以回參考一下。
期中PL2303RTS是接答ARM的復位腳,PL2303DTR接ARM的boot0,設置為外部載入模式。
Ⅹ 為什麼USB插頭設計的這么反人類
的確,來usb介面設計在筆記源本機身後面使用起來很不方便,原因你已經說了一二。
雖然說後置usb介面可以插無線滑鼠接收器,但畢竟使用無線滑鼠的不是主流用戶,使用場景十分有限。
當然了,出現這樣的設計和廠家設計思路、內部空間堆疊不當有很大關系,但可能也是沒辦法吧,不然一般的廠家也不願這樣的設計出現在自己的產品中。