<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【外設移植】USB鍵盤+M61開發板

AIoT行業洞察 ? 來源:安信可社區用戶bzhou830 ? 作者:安信可社區用戶 ? 2024-02-26 11:31 ? 次閱讀

本作品由安信可社區用戶

bzhou830制作

01介紹

前面寫過兩遍關于 USB 協議基礎的帖子,如果對 USB 協議不了解,可以去看看下列的基礎內容。

【探索 USB】01. USB 協議基礎 - 小安派 S1&M61 教程合集 - 物聯網開發者社區-安信可論壇 - Powered by Discuz! (ai-thinker.com)

【探索 USB】02. 設備的連接和枚舉 - 小安派 S1&M61 教程合集 - 物聯網開發者社區-安信可論壇 - Powered by Discuz! (ai-thinker.com)

這篇開始使用 M62 板子來實現 USB 的設備開發,首先從最簡單的 USB HID 鍵盤開始。固件的 SDK 使用的是 CherryUSB 開源 USB 固件。CherryUSB 是一個小而美的、可移植性高的、用于嵌入式系統的 USB 主從協議棧。設備端的協議執行流程如下圖:

wKgaomXcBeyAHBbrAAI3DTJGN2c257.png

02描述符

CherryUSB 實現好了一套 USB 的設備協議,只需要使用的 CheryyUSB 提供的接口調用就可以實現想要的 USB 設備了。首先應該為 USB 設備填描述符。描述符的種類很多,先得理解他們的含義。

設備 (Device) :就是一個實實在在的 USB 設備,比如 USB 鼠標,U 盤。

配置(Configuration):一個 USB 設備可以有多種配置。比如 4G 上網卡就有 2 種配置:U 盤、上網卡。第 1 次把 4G 上網卡插入電腦時,它是一個 U 盤,可以安裝里面的程序。裝好程序后,把它再次插入電腦,它就是一個上網卡。驅動程序可以選擇讓它工作于哪種配置,同一時間只能有一種配置有效。大多數的 USB 設備只有一種配置。

接口 (Interface) :每個配置下可以有多個接口,這個接口不是硬件上的接口,可以把這個接口理解為功能,一個接口就代表該設備當前支持的一種功能。

端點 (Endpoint) :每個接口可以有多個端點。USB 主機和設備就是通過端點進行數據交互的。每個端點地址對應一個方向,例如端點 2-IN,端點 2-OUT,這兩個含義完全不同。

對于 HID 設備來說還有 HID 描述符和 HID 報告描述符。

HID 描述符:描述設備數據包的固定代碼字節數組,包括設備支持多少個包,包有多大,以及包中每個字節和比特的含義。

HID 報告描述符:HID 報告描述符是一個硬編碼的字節數組,用于描述設備的數據包。這包括:設備支持多少數據包,數據包有多大,以及數據包中每個字節和位的用途。

有關 USB 鍵盤鼠標的數據報格式可以看如下帖子:

USB-HID 鍵鼠通訊數據格式 - 技術干貨 - 物聯網開發者社區-安信可論壇 - Powered by Discuz! (ai-thinker.com)

下面來一一看看它們都怎么寫的。

>>>>設備描述符

cherryUSB 中封裝了宏來定義設備描述符:

wKgZomXcBeyAKlS8AAAxptCpBgc464.png

詳細說說字段表示的意思:

wKgaomXcBe2AAgLjAAK0LfJPAMI153.png

>>>>配置描述符

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

wKgZomXcBe2AFFGcAAAzQVx4doA273.pngwKgaomXcBe6AdwhvAAGTlE3WTA4517.png

>>>>接口描述符

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

wKgZomXcBe6AQmwuAAELmV4kBiM759.pngwKgaomXcBe-AQEu_AAEFF27GXys025.png

>>>>端點描述符

wKgZomXcBfWAWs3GAAFltw0cYfM06.jpegwKgaomXcBfWADOeXAAEERjpKNC4997.png

>>>>HID 描述符

wKgZomXcBfaABC3-AAD_pV01JCQ217.pngwKgZomXcBfeANDKPAAEfB1ad9Nw576.png

>>>>HID 報告描述符

wKgaomXcBfeAPU6tAAOobq-ftec460.png

03設備的實現

在設備連接時設備端就需要向主機上報各種描述符,主機這時候就會識別到設備然后給 USB 設備分配端口(USB 協議基礎中的設備枚舉)。

連接完成后設備就可以通過 usbd_ep_start_write 函數(cherryUSB 提供的 API)向主機上報數據了。

wKgaomXcBfiALcYDAAMnDVUKRP0561.png

在主函數中調用它, 如下就實現了一個不斷向主機發送字母 a 的 usb 鍵盤設備。

wKgZomXcBfiANJMYAAM_CuxJqis798.png

為了能和真實的鍵盤對應上,這里特意使用矩陣鍵盤接上板子來讀取矩陣鍵盤的鍵值,將對應的鍵值轉換成對應的 hid 報告發送給電腦端。

硬件的接線順序如下:

wKgZomXcBfmATt8UAABpCAxD07g609.png

在矩陣鍵盤掃描的 task 里面循環掃描矩陣鍵盤,如果按鍵有按下直接轉換成對應的 hid 鍵值:

wKgaomXcBfqANNo0AAKbKZ3Hphg092.png

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

wKgZomXcBfuAO4-nAAgKtc2GlQA606.png

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

wKgaomXcBfuASvYlAAFre_9WJhE420.png

04USB描述符的查看

Windows 下可以使用 usbview 來查看 usb 描述符信息,這有利于我們調試分析使用。

wKgZomXcBfyAEi6fAAJUGP9w1R8550.png

05USB協議調試軟件

usb 協議相對還是比較復雜的,任何的描述符寫錯了都可能導致設備沒辦法正常的工作。這時候好用的調試軟件就非常的重要了。

USBlyzer, WireShark 都是可以用來抓 USB 數據包進行分析的。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    59

    文章

    7480

    瀏覽量

    259250
  • 協議
    +關注

    關注

    2

    文章

    572

    瀏覽量

    38943
  • 開發板
    +關注

    關注

    25

    文章

    4528

    瀏覽量

    94574
收藏 人收藏

    評論

    相關推薦

    [原創]高性價比USB+FPGA開發板,USB開發板,開發板

    CY7C68013A-128AXC、FPGA芯片EP1C6Q240C8和SDRAM芯片IS61LV25616AL-10T共同組合完成,實現USB2.0的高速傳輸。本USB+FPGA開發板
    發表于 03-25 16:01

    l凌陽61開發板

    有沒有用凌陽61開發板的,求指導~~~
    發表于 11-19 21:37

    【Aworks申請】實現所有外設的裸機開發+Uboot移植+linux移植+驅動開發+數碼相框

    所有外設的裸機開?、?b class='flag-5'>移植u-boot至AWorks開發板移植linux至AWorks開發板④所有外設
    發表于 07-01 18:37

    英特爾? Edison 開發板上的各種接口及每個接口的用途

    開發板供電。相關步驟請參見為開發板供電。標準 USB 端口:該端口用于鼠標、鍵盤USB 外設
    發表于 06-06 10:29

    USB 3.0開發板 USB3.0+fpga開發板 FPGA開發板

    精心設計的一款FPGA+USB3.0開發板,主芯片架構為:CYUSB3014(FX3系列USB3.0芯片)+EP3C40F484/EP3C16F484(FPGA芯片,2選1)+MT47H64M
    發表于 09-20 15:22

    USB 3.0開發板 USB+FPGA開發板 FPGA開發板

    精心設計的一款FPGA+USB3.0開發板,主芯片架構為:CYUSB3014(FX3系列USB3.0芯片)+EP3C40F484/EP3C16F484(FPGA芯片,2選1)+MT47H64M
    發表于 10-18 14:46

    USB 3.0開發板 USB3.0+FPGA開發板 FPGA開發板 USB開發板

    精心設計的一款FPGA+USB3.0開發板,主芯片架構為:CYUSB3014(FX3系列USB3.0芯片)+EP3C40F484/EP3C16F484(FPGA芯片,2選1)+MT47H64M
    發表于 01-08 14:30

    USB 3.0開發板 USB3.0+FPGA開發板 FPGA開發板

    (Altera公司Cyclone III系列FPGA芯片),默認配置為EP3C16F484C8N,EP3C40F484C8N為USB3.0開發板企業版配置●DDR2芯片:MT47H64M16HR(Micron公司
    發表于 01-15 10:50

    USB 3.0開發板 USB+FPGA開發板 USB開發板

    精心設計的一款FPGA+USB3.0開發板,主芯片架構為:CYUSB3014(FX3系列USB3.0芯片)+EP3C40F484/EP3C16F484(FPGA芯片,2選1)+MT47H64M
    發表于 01-22 14:40

    OpenHarmony+Neptune開發板 第1季:舊鍵盤秒變多模藍牙鍵盤

    ”時,CH9350工具識別有線鍵盤USB口輸出的信號,并將它轉化成串口信號,這些串口信號通過串口(TXD → PB7和RXD → PB6)傳輸給Neptune開發板。Neptune開發板
    發表于 04-29 22:29

    基于Neptune開發板鍵盤藍牙模塊DIY指南

    ”時,CH9350工具識別有線鍵盤USB口輸出的信號,并將它轉化成串口信號,這些串口信號通過串口(TXD → PB7和RXD → PB6)傳輸給Neptune開發板。Neptune開發板
    發表于 04-30 10:07

    TCL 飛利浦超級SMT M61機芯電路圖

    TCL SMT M61彩電電路圖TCL SMT M61彩色電視機電路圖,TCL SMT M61彩電圖紙,TCL SMT M61原理圖。
    發表于 05-06 14:40 ?35次下載
    TCL 飛利浦超級SMT <b class='flag-5'>M61</b>機芯電路圖

    如何移植OpenHarmony 3.0 到星空派開發板

    、eeprom 等,支持 3.2 寸的 TFT-LCD 屏幕。 所有 IO 口均引出,可完整地進行外設開發,包括:JTAG、RTC、I2C、UART、SPI、SDIO、EXMC、DAC、ADC、USB、TFT-LCD 等。 AR
    的頭像 發表于 10-19 09:08 ?2222次閱讀
    如何<b class='flag-5'>移植</b>OpenHarmony 3.0 到星空派<b class='flag-5'>開發板</b>上

    用Ai-M61-32S開發板能玩出多少拓展板?

    時間過的真快,眨眼間樓主玩M61這個模組已經有一個多月了,學習的同時結交了很多不講武德志同道合的朋友,從最開始剛接觸的點燈到慢慢嘗試上手用M61驅動各種電子模塊,深感還要學習很多。
    的頭像 發表于 11-13 10:29 ?258次閱讀
    用Ai-M<b class='flag-5'>61</b>-32S<b class='flag-5'>開發板</b>能玩出多少拓展板?

    安信可Ai-M61-32S開發板能玩出多少拓展板?

    控制家里的一些設備~ 實物展示 這次使用M61開發板只引出了串口,把usb引出到底板上了,順便簡單的寫了一些代碼,可以在讀取ds1302的時間顯示在屏幕上,讀取溫濕度,光敏電阻讀取光照,還有燈珠~ DS1302時鐘 板載了一個d
    的頭像 發表于 11-13 14:54 ?322次閱讀
    安信可Ai-M<b class='flag-5'>61</b>-32S<b class='flag-5'>開發板</b>能玩出多少拓展板?
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>