LPC1114/LPC11U14和LPC1343對比學習(八)USB
這3種芯片的功能非常多,到此基本上我們已經介紹完成,只有AD、WDT等沒有介紹,鑒于其難度不大這方面的內容就不再說明。下面將進行終極篇的學習----USB學習,由于USB難度非常大,這一貼可能會編寫很長時間,這里將主要學習HID的應用。
LPC1114沒有USB功能,所以這里只能針對LPC1343和LPC11U14進行說明。對于這兩種有USB功能的芯片其還是區別,LPC1343內部集成了USB驅動,而LPC11U14沒有此功能,所以LPC1343USB開發比較簡單一點,價格也要貴一點。為了編寫出通用的USB驅動代碼,這里將先對LPC11U14 USB進行學習,之后在移植到LPC1343。
鑒于USB開發難度,這里將不會從零開始開發USB驅動,我們將對NXP設計的USB驅動進行學習,并改進成一個自定義的HID,應用在自己的項目中。
USB HID(NXP原廠代碼).rar
對于USB的硬件設計非常簡單,具體設計如下圖所示:

1. 除了連接好USB的兩路差分信號線外,還必須連接好電源,對于P0_3是非常重要,不管是否使用USB電源供電,此管腳必須接高電平,否則無法設別USB設備。而且,如果要應用USB ISP功能,此管腳也必須接高電平。
2. P0_6管腳為軟件連接端口,可以通過此管腳連接或斷開USB設備。
3. 全速和高速設備的上拉電阻接在D+端,而低速設備是接在D-端的。
4. USB設備取電:在設備沒有配置之前最多只能從Vbus上獲取100mA電流,電流的大小是由設備配置的,配置后最多可獲取500mA電流。
USB基礎知識:
1. 在USB1.0和USB1.1中只支持1.5M/s的低速模式和12M/s的全速模式,在USB2.0中又加入了480M/b的高速模式,而在USB3.0中速度到達5GB/s。
2. USB集成器只能擴展USB接口,而能擴展帶寬,一個主控制器的帶寬是固定的。
3. 在USB1.1中集成器最多4層,USB2.0中最多6層。
4. 低速和全速模式下采用電壓差分傳輸信號,在高速模式下,采用電流傳輸。
5. USB采用NRZI編碼方式,0數據電平翻轉,1數據電平不翻轉。
USB的描述符應該是USB開發主重要的部分,如果能夠正確的配置好描述符,USB開發就完成了一半了。
描述符:
對于HID設備的描述除了5個USB的標準描述:設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符。
HID設備還有3個特點描述符:HID描述符、報告描述符、實體描述符。
在5個標準描述符中與HID設備有關的部分有:
1. 設備描述符中bDeviceClass、bDeviceSubClass、bDeviceProtocol三個字段的值必須為零。
2. 接口描述符中bInterfaceClass的值必須為0x03,bInterfaceSubClass的值為1時表示Boot Device,即表示HID是一個啟動設備。
面的描述符之間有一定的關系,一個設備只有一個設備描述符,而一個設備描述符可以包含多個配置描述符,而一個配置描述符可以包含多個接口描述符,一個接口使用了幾個端點,就有幾個端點描述符。這間描述符是用一定的字段構成的,分別如下說明:



報表描述符
報表描述符定義了執行設備功能的數據格式和使用方法。
報表描述符和USB的其他描述符是不一樣的,它不是一個簡單的表格,報表描述符是USB所有描述符中最復雜的。報表描述符非常復雜而有彈性,因為它需要處理各種用途的設備。報表的數據必須以簡潔的格式來儲存,這樣才不會浪費設備內的儲存空間以及數據傳輸時的總線時間。
實際上可以這樣理解,報表內容的簡潔,是通過報表描述符全面的、復雜的數據描述實現的。
報表描述符必須先描述數據的大小與內容。報表描述符的內容與大小因設備的不同而不同,在進行報表傳輸之前,主機必須先請求設備的報表描述符,只有得到了報表描述符才可正確解析報表的數據。
報表描述符是報表描述項目(Item)的集合,每一個描述項目都有相對統一的數據結構,項目很多,通過編碼實現。
在HID的8種描述符中,最為重要而且復雜的應該是報表描述符,其定義了數據的存儲格式和實際意義。如果能夠正確的理解報表描述符,那么對數據的處理就能達到應用自如了,所以在設計描述符的時候,一定好多話費時間來理解和編寫這一部分的內容。特別要主要以下幾點:
1. 輸入輸出等項使用的數據必須是整數字節,如果沒有完全使用到,也必須通過說明來補齊。
2.主要報表的三種項的應用及使用范圍。

命令請求:
HID設備類特定的命令有6個:Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle、Set_Protocol。
通過近段時間來對NXP的HID例程的學習,對其有了個大致的了解,USB一個包含以下幾個文件:

1. hid.h文件對HID協議中使用到的各種描述符、字段等進行了全面的描述和定義,在需要更改其他應用時,只需要選擇相應的宏就可以,非常清晰明確。
2.hiduser.c/hiduser.h文件對HID中需要使用到的6中設備命令請求函數進行了編寫描述。
3.usb.h文件對USB標準中需要使用的報告和描述符進行全面的定義。
4.usbcfg.h文件對USB中應用到的電源、端點、接口、緩沖等進行配置說明,完全可以根據自己的需要來配置USB。
5.usbcore.c/usbcore.h文件是USB協議內核文件,是各種USB開發必備文件,完成了USB的核心內容,也是USB開發的難點和重點。
6.usbdesc.c/usbdesc.h文件為USB各種描述符的實現代碼,開發不同的HID設備時,需要在此文件中更改相應描述。
7.usbhw.c/usbhw.h文件實現與USB相關的硬件配置等。
8.usbuser.c/usbuser.h文件實現各種事件和端點的實現代碼,根據自己的應用更改端點代碼實現USB通信。
在HID開發中,報告描述符是最關鍵而且最復雜的描述符,因為它沒有專門的格式,隨意性比較大,但是HID的數據解析完全是依靠此描述符。
下面是NXP例程中的HID的報告描述符:

程序代碼都注釋了,這里不再詳細說明,需要注意中間三段代碼:
1. 第一段中定義了一個Input,數據為1位,一共有3個這樣是數據;
2. 第二段中定義了一個Input,數據為1位,一共有5個這樣是數據,不過需要注意,這里定義的是常量。就是說這里的5個位并沒用實際意義,完全是為了補齊一個字節的。這一點要注意,在報告描述符中,必須使用整數字節。
3. 第三段中定義了一個Output,數據為1位,一共有8個這樣的數據,也就是說,由8個位組成的一字節輸出數。
到此我們不難看出此HID使用的是1字節是輸入和1字節是輸出,只是在1字節輸入數據中,這里只使用了3為。對于其他的描述符這里就不再說明,可以直接對照上面的描述符格式就可以看懂,需要注意HID必須設置的幾個字段就行了。
其他描述符:



在這些描述符中我們可以看出設備的具體功能,以及通信使用的端點,緩存等
通過上述對描述符的了解,基本的HID信息我們已經了解,下面就可以編寫程序,通過把獲取的數據進行驗證了,這里我們是通過按鍵按下給PC發送數據,通過PC發送數據在設備上通過LED顯示的。


到此就可以把代碼下載到開發板上,并通過實驗進行驗證了。下面我們采取兩種方法:
1.使用周工例程中的HID Client上位機軟件,進行驗證。
把開發板下載代碼后插入PC,通過Device選擇我們的“LPC11Uxx USB HID”設備,下面我們可以看出,設備在沒有鍵按下時讀取為0x01,當按下鍵時,讀取為0x00。在Outputs中勾選相應的復選框,我們可以看到開發板上相應的LED就別點亮了。
這種方法只是驗證本實驗是可以的,但是要開發其他USB功能設備就不行了,下面我們介紹一種通用的方法。

2. 使用Bus Hound軟件驗證,這個軟件,剛開始很多人都不會用,這里將詳細點。
打開軟件,在設備項選擇我們的USB設備,如下圖

需要注意的是在發送數據時,需要選擇USB人體學輸入設備,而不是下面的HID-compliant device。如果是雙擊HID-compliant device彈出的窗口中并沒有端點,是不能通信的,應該雙擊USB人體學輸入設備,彈出如下界面:

通過上圖,我們可以看出,端點和我們定義的是一樣的
下面我們就可以選擇端點進行數據通信了,選擇需要端點,填寫發送數據長度,在下面輸入要發送的數據,選擇“Run”,就可以把數據發送出去了。 之后把軟件切換到Capture,可以捕獲輸入輸出數據,如下圖。

通過上面的驗證,我們可以得知,實驗結果和我們想要的是一樣的,以后對于多字節的收發,我們就可以通過Bus Hound軟件進行驗證了。
自定義多字節發送的實現:
下面我們只需要修改幾個部分就能實現了。
1. 修改報告描述符:

2. 修改端點描述符:

3. 修改輸入輸出變量:

4. 修改其他與InReport和OutReport相關的地方。
5. 編寫代碼實現接收后原樣返回。
6. 試驗一下:

相關閱讀
- LPC1114/LPC11U14和LPC1343對比學習(一)整體對比
- LPC1114/LPC11U14和LPC1343對比學習(二)GPIO
- LPC1114/LPC11U14和LPC1343對比學習(三)SysTick
- LPC1114/LPC11U14和LPC1343對比學習(四)定時器
- LPC1114/LPC11U14和LPC1343對比學習(五)UART
- LPC1114/LPC11U14和LPC1343對比學習(六)I2C
- LPC1114/LPC11U14和LPC1343對比學習(七)SSP
聲明:本站部分內容根據互聯網資料整理而成,若侵犯您的權益,請聯系我們,我們會盡快處理。