01介紹
前面寫過兩遍關(guān)于 USB 協(xié)議基礎(chǔ)的帖子,如果對(duì) USB 協(xié)議不了解,可以去看看下列的基礎(chǔ)內(nèi)容。
這篇開始使用 M62 板子來實(shí)現(xiàn) USB 的設(shè)備開發(fā),首先從最簡(jiǎn)單的 USB HID 鍵盤開始。固件的 SDK 使用的是 CherryUSB 開源 USB 固件。CherryUSB 是一個(gè)小而美的、可移植性高的、用于嵌入式系統(tǒng)的 USB 主從協(xié)議棧。設(shè)備端的協(xié)議執(zhí)行流程如下圖:

02描述符
CherryUSB 實(shí)現(xiàn)好了一套 USB 的設(shè)備協(xié)議,只需要使用的 CheryyUSB 提供的接口調(diào)用就可以實(shí)現(xiàn)想要的 USB 設(shè)備了。首先應(yīng)該為 USB 設(shè)備填描述符。描述符的種類很多,先得理解他們的含義。
設(shè)備(Device) :就是一個(gè)實(shí)實(shí)在在的 USB 設(shè)備,比如 USB 鼠標(biāo),U 盤。
配置(Configuration):一個(gè) USB 設(shè)備可以有多種配置。比如 4G 上網(wǎng)卡就有 2 種配置:U 盤、上網(wǎng)卡。第 1 次把 4G 上網(wǎng)卡插入電腦時(shí),它是一個(gè) U 盤,可以安裝里面的程序。裝好程序后,把它再次插入電腦,它就是一個(gè)上網(wǎng)卡。驅(qū)動(dòng)程序可以選擇讓它工作于哪種配置,同一時(shí)間只能有一種配置有效。大多數(shù)的 USB 設(shè)備只有一種配置。
接口(Interface) :每個(gè)配置下可以有多個(gè)接口,這個(gè)接口不是硬件上的接口,可以把這個(gè)接口理解為功能,一個(gè)接口就代表該設(shè)備當(dāng)前支持的一種功能。
端點(diǎn)(Endpoint) :每個(gè)接口可以有多個(gè)端點(diǎn)。USB 主機(jī)和設(shè)備就是通過端點(diǎn)進(jìn)行數(shù)據(jù)交互的。每個(gè)端點(diǎn)地址對(duì)應(yīng)一個(gè)方向,例如端點(diǎn) 2-IN,端點(diǎn) 2-OUT,這兩個(gè)含義完全不同。
對(duì)于 HID 設(shè)備來說還有 HID 描述符和 HID 報(bào)告描述符。
HID 描述符:描述設(shè)備數(shù)據(jù)包的固定代碼字節(jié)數(shù)組,包括設(shè)備支持多少個(gè)包,包有多大,以及包中每個(gè)字節(jié)和比特的含義。
HID 報(bào)告描述符:HID 報(bào)告描述符是一個(gè)硬編碼的字節(jié)數(shù)組,用于描述設(shè)備的數(shù)據(jù)包。這包括:設(shè)備支持多少數(shù)據(jù)包,數(shù)據(jù)包有多大,以及數(shù)據(jù)包中每個(gè)字節(jié)和位的用途。
下面來一一看看它們都怎么寫的。
設(shè)備描述符
cherryUSB 中封裝了宏來定義設(shè)備描述符:

詳細(xì)說說字段表示的意思:

配置描述符
cherryUSB 中封裝了宏來定義配置描述符:


接口描述符
接口描述符是需要自己寫成數(shù)組的:


端點(diǎn)描述符


HID 描述符


HID 報(bào)告描述符

03設(shè)備的實(shí)現(xiàn)
在設(shè)備連接時(shí)設(shè)備端就需要向主機(jī)上報(bào)各種描述符,主機(jī)這時(shí)候就會(huì)識(shí)別到設(shè)備然后給 USB 設(shè)備分配端口(USB 協(xié)議基礎(chǔ)中的設(shè)備枚舉)。
連接完成后設(shè)備就可以通過 usbd_ep_start_write 函數(shù)(cherryUSB 提供的 API)向主機(jī)上報(bào)數(shù)據(jù)了。

在主函數(shù)中調(diào)用它, 如下就實(shí)現(xiàn)了一個(gè)不斷向主機(jī)發(fā)送字母 a 的 usb 鍵盤設(shè)備。

為了能和真實(shí)的鍵盤對(duì)應(yīng)上,這里特意使用矩陣鍵盤接上板子來讀取矩陣鍵盤的鍵值,將對(duì)應(yīng)的鍵值轉(zhuǎn)換成對(duì)應(yīng)的 hid 報(bào)告發(fā)送給電腦端。

硬件的接線順序如下:

在矩陣鍵盤掃描的 task 里面循環(huán)掃描矩陣鍵盤,如果按鍵有按下直接轉(zhuǎn)換成對(duì)應(yīng)的 hid 鍵值:

這些鍵值的定義可以在這里找到:

在 usb 鍵盤的 task 里面則取接受消息,并把消息發(fā)松給 pc 端。

04USB描述符的查看
Windows 下可以使用 usbview 來查看 usb 描述符信息,這有利于我們調(diào)試分析使用。

05USB協(xié)議調(diào)試軟件
usb 協(xié)議相對(duì)還是比較復(fù)雜的,任何的描述符寫錯(cuò)了都可能導(dǎo)致設(shè)備沒辦法正常的工作。這時(shí)候好用的調(diào)試軟件就非常的重要了。
USBlyzer, WireShark 都是可以用來抓 USB 數(shù)據(jù)包進(jìn)行分析的。
審核編輯:湯梓紅
-
usb
+關(guān)注
關(guān)注
60文章
8440瀏覽量
284496 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2945文章
47820瀏覽量
414955 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6291瀏覽量
118109
原文標(biāo)題:【外設(shè)移植】USB鍵盤+M61開發(fā)板
文章出處:【微信號(hào):安信可科技,微信公眾號(hào):安信可科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
用MINI STM32板子實(shí)現(xiàn)USB虛擬串口
如何用STM32板子實(shí)現(xiàn)了NRF24L01無線通信實(shí)驗(yàn)
三星Galaxy Tab M62通過WiFi聯(lián)盟認(rèn)證
三星新機(jī)Galaxy M62詳細(xì)規(guī)格參數(shù)曝光
三星Galaxy M62平板電腦再獲Wi-Fi認(rèn)證
三星Galaxy Tab M62平板芯片與跑分曝光
三星Galaxy M62將成為Galaxy M系列的首款平板電腦
三星Galaxy M62電池容量已通過美國(guó)聯(lián)邦通信委員會(huì)頒發(fā)的證書
傳聞許久的三星Galaxy M62新機(jī)上市在即
智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 實(shí)現(xiàn)點(diǎn)燈
安信可Ai-M61/M62系列模組支持CAN接口了?
用Wi-Fi藍(lán)牙模組Ai-M62-CBS做一個(gè)電子沙漏
使用M62板子實(shí)現(xiàn)USB的設(shè)備開發(fā)
評(píng)論