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
    +关注

    关注

    60

    文章

    7890

    浏览量

    263954
  • 协议
    +关注

    关注

    2

    文章

    598

    浏览量

    39176
  • 开发板
    +关注

    关注

    25

    文章

    4943

    浏览量

    97177
收藏 人收藏

    评论

    相关推荐

    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>机芯电路图

    ARM开发板上uClinux内核移植

    ARM开发板上uClinux内核移植 简述:针对“如何在以S3C44B0X为核心的ARMSYS开发板上建立uClinux内核移植”的一个总结,其内容包括对Bootloader的功能分
    发表于 02-02 11:07 725次阅读

    USB开发板功能特点

    USB2.0 开发板 USB+FPGA 开发板 USB2.0 开发板功能特点 ● 符合
    发表于 12-13 10:32 57次下载
    <b class='flag-5'>USB</b><b class='flag-5'>开发板</b>功能特点

    FreeRTOS移植MAPS-K22开发板

    FreeRTOS移植MAPS-K22开发板,本文以MAPS-K22开发板为例,介绍了将FreeRTOS移植于NXP Kientis 系列MCU中的步骤,希望能对想学习RTOS和Kine
    发表于 12-24 16:39 4次下载

    盘古STM32F103开发板移植uCGUI教程

    盘古STM32F103开发板移植uCGUI教程
    发表于 09-29 09:21 21次下载
    盘古STM32F103<b class='flag-5'>开发板</b><b class='flag-5'>移植</b>uCGUI教程

    iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板

    迅为iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
    发表于 05-15 11:11 28次下载

    如何移植OpenHarmony 3.0 到星空派开发板

    9 月 30 日,OpenHarmony 3.0 LTS 版本发布。本文将介绍如何移植 OpenHarmony 3.0 到星空派开发板上。 星空派开发板介绍 星空派(GD)开发板是由旗
    的头像 发表于 10-19 09:08 2447次阅读
    如何<b class='flag-5'>移植</b>OpenHarmony 3.0 到星空派<b class='flag-5'>开发板</b>上

    MQTT移植到stm32开发板——使用TencentOS tiny操作系统

    手把手教你将MQTT客户端移植到stm32开发板上,使用TencentOS tiny官方开发板——TencentOS_tiny_EVB_MX_Plus开发板作为
    发表于 12-08 13:21 6次下载
    MQTT<b class='flag-5'>移植</b>到stm32<b class='flag-5'>开发板</b>——使用TencentOS tiny操作系统

    小熊派开发板移植RT-FOTA

    小熊派开发板移植RT-FOTA
    发表于 12-08 15:06 4次下载
    小熊派<b class='flag-5'>开发板</b><b class='flag-5'>移植</b>RT-FOTA

    开发板评测】Renesas RA6M4开发板之CAN

    介绍 通过阅读用户手册,我们可以了解到RA6M4 MCU具有丰富的外设如IIC、SPI、CAN、USB等(如下图)。在此次测评中我们暂且只关心CAN的使用。 国际惯例先看说明书,打开《开发板
    的头像 发表于 12-20 12:10 1429次阅读

    iMX8M mini开发板移植vsftpd软件的操作步骤

    的FTP服务器软件,非常适合嵌入式应用。接下来讲解将该软件移植到启扬i.MX8Mmini开发板的过程。移植vsftpd软件到启扬i.MX8Mmini开发板先需要到
    的头像 发表于 08-06 10:25 1444次阅读
    iMX8<b class='flag-5'>M</b> mini<b class='flag-5'>开发板</b><b class='flag-5'>移植</b>vsftpd软件的操作步骤

    Ai-M61/62系列的固件烧录指导

    本文介绍Ai-M61/62系列模组/开发板的固件烧录。
    的头像 发表于 07-02 11:23 1505次阅读
    Ai-<b class='flag-5'>M61</b>/62系列的固件烧录指导

    用Ai-M61-32S开发板能玩出多少拓展板?

    时间过的真快,眨眼间楼主玩M61这个模组已经有一个多月了,学习的同时结交了很多不讲武德志同道合的朋友,从最开始刚接触的点灯到慢慢尝试上手用M61驱动各种电子模块,深感还要学习很多。
    的头像 发表于 11-13 10:29 427次阅读
    用Ai-<b class='flag-5'>M61</b>-32S<b class='flag-5'>开发板</b>能玩出多少拓展板?

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

    控制家里的一些设备~ 实物展示 这次使用M61开发板只引出了串口,把usb引出到底板上了,顺便简单的写了一些代码,可以在读取ds1302的时间显示在屏幕上,读取温湿度,光敏电阻读取光照,还有灯珠~ DS1302时钟 板载了一个d
    的头像 发表于 11-13 14:54 554次阅读
    安信可Ai-<b class='flag-5'>M61</b>-32S<b class='flag-5'>开发板</b>能玩出多少拓展板?

    外设移植】Ai-M61-32s 开发板+3.5寸SPI彩屏

    M61-32S3.5寸SPI屏VCCVCCGNDGNDIO12CSIO26RSIO27D/CIO19SDIIO13SCLIO28BLIO18SDO 02、库文件介绍 该移植库共包含五个部分,分别
    的头像 发表于 03-07 10:02 466次阅读
    【<b class='flag-5'>外设</b><b class='flag-5'>移植</b>】Ai-<b class='flag-5'>M61</b>-32s <b class='flag-5'>开发板</b>+3.5寸SPI彩屏