




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式系統TCP/IP網絡解決方案嵌入式USB主機陳智榮(研04)溫英林張輝勇摘要:本文以一個實際USB設備枚舉的數據過程,講述了USB協議中的一些關鍵概念和重要的數據結構、時序;在此基礎上,簡單介紹本系統的硬件設計,然后圍繞如何實現USB設備枚舉,從底層到高層詳細地介紹了本系統的軟件設計。關鍵詞:USB主機 SL811HS 51單片機 枚舉 嵌入式1前言USB(通用串行總線)是最近幾年逐步在PC領域廣為應用的新型接口技術。USB接口通用性好、實時性強、傳輸方式多樣、成本低、易于擴展且便于使用,這些優點使它受到許多硬件廠商的青睞,其相關設備種類越來越多,數量越來越大。然而,USB的拓撲結構中居
2、于核心地位的是主機,任何一次USB的數據傳輸都必須由主機來發起和控制,所有的USB外設都只能和主機建立連接,任何兩個外設之間無法直接通信。目前,大量扮演主機角色的是個人電腦PC機。目前使用的USB移動設備,如U盤,MP3隨身聽,USB接口的移動硬盤、移動光驅及數碼相機等等,都只能在PC機上使用,只能通過PC機來進行數據傳輸和文件交換,這無疑給USB移動設備的應用帶來了局限性。因此,如果能拋開PC機,使用輕便、廉價的設備就能讀寫操作USB外設,這將拓寬USB接口的應用范圍,使人們享受更多更方便的USB接口電子產品。本設計使用51系列單片機對USB主機接口芯片SL811HS進行控制,實現了USB主
3、機的一項重要功能:枚舉USB設備。2關于USB協議在本設計中,由于采用了USB主機的接口芯片,所以不需要詳細了解USB傳輸的底層物理特性,但必須深入理解USB的數據傳輸的協議層,具體來說,就是USB傳輸中數據包,數據字段的格式和時序是如何的。2.1設備的枚舉主機對USB設備的枚舉指的是主機對設備的檢測和配置。 在說明主機的枚舉功能前,需要說明一下USB傳輸的數據基本結構和格式。從表1可見,在USB的數據傳輸中:主要有四種傳輸事務類型(控制、批量、中斷、同步),而主機枚舉設備的功能是只需要通過控制傳輸實現的。控制傳輸有三個傳輸階段(建立、數據、狀態,其中數據階段是可選的)。每個傳輸階段又由三個包
4、組成(令牌包、數據包、握手包、特殊包)。表 1 USB傳輸的數據基本結構和格式傳輸事務類型階段包控制建立令牌包數據包握手包數據令牌包數據包握手包狀態令牌包數據包握手包批量(不分階段)令牌包數據包握手包中斷(同上)同步(同上)其中,包是由域來組成的,共有7種域,每種域的子類型如下表所列:表 2 域和域的子類型域類型名域子類型名同步域SYNC標識域(PID)SETUP、OUT、IN、SOF、DATA0、DATA1、ACK、NAK、STALL、PRE地址域ADDR端點域ENDP幀號域FRAM數據域DATA校驗域CRC5、CRC16其中,同步域的實際二進制編碼為”_0000 0001”;另外,每個包是
5、以SE0態作為結束標志的。下面,就以一個實際設備枚舉的全過程為例,說明USB數據傳輸的一些具體細節(在這里,將不列出每個包的同步域和結束標志)。2.1.1主機檢測到有設備插上,總線復位當設備與主機連接時,主機就會檢測到一個連接條件(USB接口芯片向CPU發出中斷請求),主機就開始進行總線復位(主機強制輸出SE0,即強制把D和D兩信號線拉為低電平)。2.1.2主機第一次讀取設備描述符主機使用默認地址(地址0)讀取設備描述符,如表3所示。表 3 主機第一次讀取設備描述符階段包序號(包類型)數據內容建立包1(令牌包)主機向默認地址(地址0)設備發送建立包SETUPADDRENDPCRC50xB40x
6、000x00x08包2(數據包)主機發出建立階段的數據包(請求獲取設備描述符GET_DESCRIPTOR)DATA0DATACRC160xC380 06 0001 0000 40000xBB29包3(握手包)設備應答ACK0x4B數據包4(令牌包)主機讀取數據INADDRENDPCRC50x960x000x00x0B包5(數據包)設備返回設備描述符DATA1DATACRC160xD212 01 0001 DC 00 00 10 7104 6606 0001 00 000x42C6包6(握手包)主機應答ACK0x4B狀態包7(令牌包)主機發送狀態響應OUTADDRENDPCRC50x870x00
7、0x00x08包8(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包9(握手包)設備應答ACK0x4B其中,包#2中的DATA含義如下:bmRequestType=0x80:所請求數據將是從設備傳到主機;標準請求命令;該命令接受者為設備bRequest=0x06:請求命令代碼是GET_DESCRIPTORwValue=0x0001:描述符索引值0x00;描述符編號0x01wIndex=0x0000:接收者為設備,所以此字段為0wLength=0x4000:要求設備返回的數據長度2.1.3地址分配在地址分配事務中,主機分配給設備一個地址,如表4所示,分配的地
8、址為0x02,在以后的通信里,設備就只對0x02地址的信息作出應答,而把0地址讓出來。從這個地址分配事務中也可見,控制傳輸的數據狀態是可選的。表 4 地址分配階段包序號(包類型)數據內容建立包10(令牌包)主機向默認地址(地址0)設備發送建立包SETUPADDRENDPCRC50xB40x000x00x08包11(數據包)主機發出建立階段的數據包(請求設置設備的地址)DATA0DATACRC160xC300 05 02 00 00 00 00 000xD768包12(握手包)設備應答ACK0x4B狀態包13(令牌包)主機要求讀取傳輸狀態INADDRENDPCRC50x960x000x00x08
9、包14(數據包)設備返回0字節數據作狀態響應DATA1DATACRC160xD20x0000包15(握手包)主機應答ACK0x4B2.1.4主機從新的地址獲取設備描述符(第二次讀取設備描述符)分配好地址后,主機就從新的地址獲取設備描述符,如表5所示。由于設備返回的第一個設備描述符中聲明了該設備的端點0最大包尺寸為16個字節(0x10),所以設備分2次把設備描述符經過端點0發送出去,第一次發送16個字節,第二次發送2個。最后主機發送0字節的數據包給設備作為傳輸裝態應答。表 5 主機從新的地址獲取設備描述符(第二次讀取設備描述符)階段包序號(包類型)數據內容建立包16(令牌包)主機向新的地址(地址
10、0x02)設備發送建立包SETUPADDRENDPCRC50xB40x020x00x15包17(數據包)主機發出建立階段的數據包(請求獲取設備描述符GET_DESCRIPTOR)DATA0DATACRC160xC380 06 0001 0000 12000x072F包18(握手包)設備應答ACK0x4B數據包19(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包20(數據包)設備返回設備描述符(前16個字節)DATA1DATACRC160xD212 01 0001 DC 00 00 10 7104 6606 0001 00 000x42C6包21(握手包)主機應
11、答ACK0x4B數據包22(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包23(令牌包)設備返回設備描述符(后2個字節)DATA0DATACRC160xC300190FCA1包24(令牌包)主機應答ACK0x4B狀態包25(令牌包)主機發送狀態響應OUTADDRENDPCRC50x870x020x00x15包26(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包27(握手包)設備應答ACK0x4B2.1.5主機讀取配置描述符主機讀取完設備描述符后就讀取設備的配置描述符,如表6所示:表 6 主機讀取配置描述符階段包序號(包類
12、型)數據內容建立包1(令牌包)主機向默認地址(地址0)設備發送建立包SETUPADDRENDPCRC50xB40x020x00x15包2(數據包)主機發出建立階段的數據包(請求獲取設備描述符GET_DESCRIPTOR)DATA0DATACRC160xC380 06 0002 0000 09000x7520包3(握手包)設備應答ACK0x4B數據包4(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包5(數據包)設備返回設備描述符DATA1DATACRC160xD209 02 2E 00 01 01 00 60 010xA01E包6(握手包)主機應答ACK0x4B
13、狀態包7(令牌包)主機發送狀態響應OUTADDRENDPCRC50x870x020x00x15包8(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包9(握手包)設備應答ACK0x4B2.1.6主機讀取描述符集合主機除了讀取設備描述符和配置描述符外,還有讀取接口描述符和端點描述符。在這里主機使用再次讀取配置描述符的方法來實現。注意這里請求的字節數為0xff,如表7所示。表 7 主機讀取描述符集合(配置、接口、端點描述符)階段包序號(包類型)數據內容建立包16(令牌包)主機向新的地址(地址0x02)設備發送建立包SETUPADDRENDPCRC50xB40x0
14、20x00x15包17(數據包)主機發出建立階段的數據包(請求獲取設備描述符GET_DESCRIPTOR)DATA0DATACRC160xC380 06 0002 0000 FF000x9725包18(握手包)設備應答ACK0x4B數據包19(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包20(數據包)設備返回設備描述符(第一組16個字節)DATA1DATACRC160xD209 02 2E 00 01 01 00 60 01 09 04 00 00 04 DC A00x5C5E包21(握手包)主機應答ACK0x4B數據包22(令牌包)主機讀取數據INADDR
15、ENDPCRC50x960x020x00x15包23(令牌包)設備返回設備描述符(第二組16個字節)DATA0DATACRC160xC3B0 00 07 05 81 03 04 00 0A 07 05 01 03 04 00 0A0A1BF包24(令牌包)主機應答ACK0x4B數據包22(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包22(令牌包)設備返回設備描述符(剩余字節)DATA0DATACRC160xD207 05 82 02 40 00 0A 07 05 02 02 40 00 0A0xC515包22(令牌包)主機應答ACK0x4B狀態包25(令牌包
16、)主機發送狀態響應OUTADDRENDPCRC50x870x020x00x15包26(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包27(握手包)設備應答ACK0x4B2.1.7主機設置配置主機讀取完描述符后,就需要對設備進行配置,使得設備從地址狀態進入配置狀態,如下表8所示:表 8 主機設置配置階段包序號(包類型)數據內容建立包10(令牌包)主機向0x02地址發送建立包SETUPADDRENDPCRC50xB40x020x00x15包11(數據包)主機發出建立階段的數據包(請求設置配置)DATA0DATACRC160xC300 09 01 00 00
17、00 00 000xE4A4包12(握手包)設備應答ACK0x4B狀態包13(令牌包)主機要求讀取傳輸狀態INADDRENDPCRC50x960x020x00x15包14(數據包)設備返回0字節數據作狀態響應DATA1DATACRC160xD20x0000包15(握手包)主機應答ACK0x4B2.1.8主機讀取配置狀態主機設置完配置后,設備就可以使用。主機有時會對設備的配置狀態進行讀取,其工作數據如表9所示。表 9 主機讀取配置狀態階段包序號(包類型)數據內容建立包16(令牌包)主機向地址0x02設備發送建立包SETUPADDRENDPCRC50xB40x020x00x15包17(數據包)主機
18、發出建立階段的數據包(請求獲取設備配置)DATA0DATACRC160xC380 08 00 00 00 00 01 000xFC23包18(握手包)設備應答ACK0x4B數據包19(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包20(數據包)設備返回設備配置(設備配置值)DATA1DATACRC160xD2010x81FE包21(握手包)主機應答ACK0x4B狀態包25(令牌包)主機發送狀態響應OUTADDRENDPCRC50x870x020x00x15包26(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包27(握手包
19、)設備應答ACK0x4B2.1.9主機讀取接口狀態在配置完成后,主機會對接口的狀態進行讀取,這和讀取配置一樣也是可選的,其數據傳輸如表10所示。表 10 主機讀取接口狀態階段包序號(包類型)數據內容建立包16(令牌包)主機向地址0x02設備發送建立包SETUPADDRENDPCRC50xB40x020x00x15包17(數據包)主機發出建立階段的數據包(請求獲取接口狀態)DATA0DATACRC160xC381 0A 00 00 00 00 01 000xBB13包18(握手包)設備應答ACK0x4B數據包19(令牌包)主機讀取數據INADDRENDPCRC50x960x020x00x15包2
20、0(數據包)設備返回接口狀態(接口描述符編號)DATA1DATACRC160xD2000x02FD包21(握手包)主機應答ACK0x4B狀態包25(令牌包)主機發送狀態響應OUTADDRENDPCRC50x870x020x00x15包26(數據包)主機發送0字節數據作狀態響應DATA1DATACRC160xD20x0000包27(握手包)設備應答ACK0x4B3關于SL811HS接口芯片SL811HS是Cypress公司的嵌入式主機或外設接口控制器,支持USB1.1的全速和低速設備,提供USB主機的硬件接口及總線管理的物理機制,帶有在片的SIE、USB發送器、256字節RAM以及在片的根集線器
21、。除了8位的數據/地址總線外,有讀、寫、片選、復位及中斷輸出信號端口,控制方便。4嵌入式USB主機設計4.1硬件設計選用廉價的51系列單片機(89C52)控制USB主機接口芯片SL811HS,同時,通過MAX232芯片與PC機通信。硬件接線示意圖如下所示:圖 1 硬件接線示意圖4.2軟件設計下面將從底層到高層詳細地介紹本系統的軟件設計。4.2.1單片機讀寫SL811HS4.2.1.1讀取SL811HS內存的數據根據SL811HS的讀寫時序要求,讀取數據前首先發送地址:void SetHostAddress(char AddressP)P_BUS=AddressP;/*數據總線發送地址,但此時地
22、址還不會被SL811HS接收*/P_CTRL=0x90;/*設置總線控制信號為SL811HS接收地址信號,具體含義如下所示:*/*P_CTRL;0x90,98,F0P_CTRL.0; -P_CTRL.1; -P_CTRL.2; -A0; 010nRST; 111nCS; 001nWR; 001nRD; 111*/nWR=1;nCS=1;/*地址傳輸完畢后,關閉片選、寫等信號*/P_CTRL=0xF0;地址發送完畢之后,SL811HS就接到了需要讀取的內存單元地址(包括寄存器的地址)。緊接著單片機就可以讀取數據:unsigned char HostRead(void)A0=1;/* 滿足SL81
23、1HS的時序要求,先保證A0和nCS的有效*/NCS=0;P_CTRL=0x58;/*設置控制位信號,讀取SL811HS內的數據*/*P_CTRL;0x90,58,F0P_CTRL.0; -P_CTRL.1; -P_CTRL.2; -A0; 010nRST; 111nCS; 001nWR; 011nRD; 101*/return P_BUS;/*函數返回讀取的SL811HS內存的數據*/4.2.1.2寫入數據到SL811HS內存與讀數據類似,單片機要往SL811HS的內存單元寫數據時,也要首先發送地址,然后再發送要寫入的數據。為了簡便起見,寫數據過程中發送地址和數據的功能都放在一個函數中執行。
24、Void HostWrite(char HostWriteAddress, char WriteConstent)/*參數HostWriteAddress輸入要寫入數據的SL811HS內存的地址,WriteConstent為要寫入的地址*/P_BUS=HostWriteAddress;/*準備好需要發送的地址*/P_CTRL=0x90;/*P_CTRL;0x90,98,F0P_CTRL.0; -P_CTRL.1; -P_CTRL.2; -A0; 010nRST; 111nCS; 001nWR; 001nRD; 111*/nWR=1;nCS=1;P_BUS=WriteContent;/*準備好需
25、要發送的數據*/P_CTRL=0x98;/*重新安排好控制信號,發送數據*/P_CTRL=0xF4;4.2.1.3讀寫批量數據有時單片機和SL811HS之間要進行批量數據的傳輸,為方便操作,設計了能夠批量進行數據讀或寫的函數:/*批量寫*/void HostBulkWrite(char addr, unsigned char *s, char c)/*參數addr為SL811HS中寫入數據的起始地址,*s為單片機內存放的需要寫入的數據緩沖區,c為總共要寫入的字節數*/if(c<=0) return;while(c-)HostWrite(addr+,*s+);/*批量讀*/void Hos
26、tBulkRead(char addr, unsigned char *s, char c)/*參數addr為SL811HS中讀取數據的起始地址,*s為單片機內存放讀取來的數據的數據緩沖區,c為總共要讀入的字節數*/if(c<=0) return;while(c-)SetHostAddress(addr+);*s+=HostRead();4.2.2階段USB傳輸的實現4.2.2.1 SL811HS的初始化初始化主要是對SL811HS的部分內部寄存器進行設置:Void SL811HS_Init(void)HostWrite(IntEna,0x20);HostWrite(CSOFcnt, 0
27、xAE);HostWrite(CtrlReg, 0x08);HostWrite(CtrlReg, 0x00);HostWrite(CSOFcnt, 0xAE);HostWrite(CtrlReg, 0x08);DelayMs(10);HostWrite(CtrlReg, 0x00);DelayMs(1);HostWrite(IntStatus, 0xFF);4.2.2.2三種階段USB傳輸的實現三種階段USB傳輸都可以由這個函數(下稱“階段傳輸實現函數”)實現:void USB_Transaction(unsigned char PID, unsigned char EP_Address, u
28、nsigned char Address, int Length, char *pDataBuf);4.2.2.2.1發送或接收前的準備工作4.2.2.2.1.1設置EP0Status寄存器本設計涉及到了多種階段的USB傳輸,但這里需要考慮的只有3種,分別是建立(SETUP)、數據輸入(IN)和數據輸出(OUT)階段。階段傳輸實現函數的輸入參數中,PID就是用來區別這3種傳輸階段。#define PID_SETUP 0x2D#define PID_IN 0x69#define PID_OUT 0xE1階段傳輸實現函數的第二個需要輸入的參數就是端點號EP_Address,大小為1字節(實際只有低
29、4位有效,高4位為0),類型為unsigned char 。U盤等類似的USB Mass Storage類設備一般具有3個端點:一個是端點0,用于處理控制傳輸;另一個是批量輸出Bulk_OUT端點,該端點用于接收主機發來的批量數據,端點號有設備定義;還有一個就是批量輸入Bulk_IN端點,用于給÷向主機發送批量數據,其端點號也由設備定義。從硬件角度來講,程序需要把PID和EP_Address組合在一起后寫入EP0Status寄存器。unsigned char PID_EPA;/*用于儲存PIN和EP_Address的組合值*/PID_EPA=PID&0x0F;/*PID的高4
30、位位校驗碼,低4位為有效值*/PID_EPA=(PID_EPA<<4)+EP_Address;/*按照EP0Status寄存器的要求合并PID和EP_Address*/HostWrite(EP0Status,PID_EPA);4.2.2.2.2設置EP0Counter寄存器階段傳輸實現函數的第三個需要輸入的參數是設備的地址Address,大小為1字節,類型為unsigned char。HostWrite(EP0Counter,Address);/*設備地址的D7位值為0,D6D0位代表地址*/4.2.2.2.3設置EP0XferLen寄存器第四個參數是發送或接收的數據的長度Leng
31、th,大小為2字節,類型為int。這個長度還需要和相應端點的最大包尺寸MaxPacketSize進行比較。如果Length小于MaxPacketSize,就說明需要發送或接收的數據長度比相應端點的最大包尺寸還小,因此,主機和該端點之間只要進行一次數據傳輸就可以實現數據的發送或接收。反之,如果Length大于MaxPacketSize,那么就需要將發送或接收的數據進行分割,第一批發送或接收的數據長度就是MaxPacketSize,剩下的數據就利用 SL811HS的“乒乓”機制進行發送。最后需要把實際要發送的數據長度寫入SL811HS的EP0XferLen寄存器中。/*定義變量CurentLeng
32、th,用于保存當前需要發送的數據長度*/if(Length>MaxPacketSize)CurrentLength=MaxPacketSize;elseCurrentLength=Length;HostWrith(EP0XferLen,(unsigned char)CurrentLength);/*注意這里的變量類型轉換*/4.2.2.2.4設置EP0Address寄存器最后一個需要確定是發送或接收數據的緩沖地址*pDataBuf,大小為1字節。在這里pDataBuf是指向單片機內存單元的指針,但實際讀寫數據是要以SL811HS的數據緩沖區作為中介的。為加快數據傳輸,把SL811HS的數
33、據緩沖區分成兩部分:SL811HS_Buf0和SL811HS_Buf1。SL811HS_Buf0的起始地址就可以定為0x10。而SL811HS_Buf1的地址就根據端點最大包尺寸進行調整。Unsigned char SL811_HS_Buf0 0x10, SL811HS_Buf1;If(Length>MaxPackeSize)SL811HS_Buf1= SL811HS_Buf0+MaxPacketSize;HostWrite(EP0Address, SL811HS_Buf0);/*當前數據發送從SL811HS_Buf 0開始*/如果主機要發送數據給設備,就需要把*pDataBuf中的數據
34、復制到SL811HS的數據緩沖區中:HostBulkWrite(SL811HS_Buf0,pDataBuf,CurrentLength);如果是主機接收數據,那么在以下的處理中,就會把SL811HS緩沖區中的接收到的設備的數據通過HostBulkRead()函數復制到單片機的緩沖區中。HostBulkRead(SL811HS_Buf0,pDataBuf,CurrentLength);4.2.2.2.5啟動發送或接收啟動USB數據的發送或接收實際上是通過向SL811HS的EP0Control寄存器發送命令字CmdWord來實現的。首先,PID等參數的不同,CmdWord的值也不同,根據EP0Co
35、ntrol寄存器每一位的屬性,有如下配置程序:unsigned char CmdWord;if(PID=PID_SETUP)CmdWord=0x03;/*控制傳輸的SETUP事務*/elseif(EP_Address=0)if(PID=PID_IN)CmdWord=0x47;/*控制傳輸的輸入IN事務*/elseCmdWord=0x43;/*控制傳輸的OUT事務*/elseif(PID=PID_IN)CmdWord=0x07;/*批量傳輸IN事務*/elseCmdWord=0x03;/*批量傳輸OUT事務*/將CmdWord命令字發送到SL811HS的EP0Control寄存器后,就啟動了數據
36、包的發送或接收了:HostWrite(IntStatus, 0xFF);/*清除中斷狀態位*/HostWrite(EP0Control, CmdWord);剩下的工作就是查詢SL811HS的IntStatus寄存器,以查看發送或接收的完成情況,有需要時,最后還可以查看EP0status獲取握手包的有關信息,但其實所有的握手包信息都是有硬件自動完成的。4.2.3事務USB傳輸的實現4.2.3.1控制傳輸包含了三個階段:建立階段、可選數據階段以及狀態階段。Void Control_Transfer(pRequestCMD RequestCMD, unsigned char* pDataBuf_x)
37、;4.2.3.1.1建立階段的實現任務就是發送建立的8字節請求命令,命令的數據結構為(注意該段定義是放在Control_Transfer()函數之外的):typedef structunsigned char bmRequest Type;unsigned char bRequest;unsigned int wValue;unsigned int wIndex;unsigned int wLength;REQUESTCMD,*pRequestCMD;在這里只需調用一次USB_Transaction()函數即可:USB_Transaction(PID_SETUP, 0 , Device_Add
38、ress, 0x08, (char *)RequestCMD);/*發送的令牌為PID_SETUP,端點號為0,設備地址為Device_Address,發送數據長度為8字節,發送內容為相應的請求命令*/4.2.3.1.2可選數據階段的實現注意數據傳輸方向,實現過程如下:if(RequestCMD->wLength)if(RequestCMD->bmRequestType & 0x80)/*判斷為PID_OUT*/USB_Transaction(PID_OUT, 0, Device_Address, RequestCMD->wLength, pDataBuf_x);el
39、se/*判斷為PID_IN*/USB_Transaction(PID_IN, 0, Device_Address, RequestCMD->wLength, pDataBuf_x);4.2.3.1.3狀態信息階段的實現在需要時(如可選數據階段為IN),主機發送控制傳輸的狀態信息:USB_Transaction(PID_OUT, 0, Device_Address, 0, pDataBuf_x);4.2.3.2批量傳輸類似與控制傳輸中的可選數據階段,有兩個函數,分別對應于批量傳輸IN和批量傳輸OUT:void Bulk_Transfer_IN(int Length_bi, unsigned char* pDataBuf_bi)USB_Transaction(PID_IN,EP_Bulk_IN,Device_Address, Length_bi, pDataBuf_bi);void Bulk_Transfer_OUT(int Length_bo, unsigned char* pDataBuf_bo)USB_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動解決合同協議書模板
- 2025租房合同協議書范本
- 2025鋁合金結構人行天橋建設合同
- 簡單店鋪租賃合同協議書
- 2025倉庫租賃安全合同
- 2025擔保公司融資合同范本
- 2025物業服務合同范本
- 2025房屋租賃居間服務合同書(現金)租賃合同
- 2025年的天津租房合同樣本
- 2025租賃合同范本:辦公場所租賃合同
- 高壓氧治療注意事項及操作規范指南
- 職業中等專業學校新能源汽車運用與維修專業人才培養方案
- 圓錐式破碎機施工方案
- 中職英語技能大賽模擬試題(一)
- 《隧道工程》復習考試題庫(帶答案)
- 自來水廠調試方案
- 高速鐵路-軌道控制網CPIII測量課件
- 全過程造價咨詢投資控制目標承諾及保證措施
- 第七版外科護理學-骨折病人的護理課件
- 三級醫院危重癥和疑難復雜疾病目
- 分數的加法和減法教材分析課件
評論
0/150
提交評論