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

    文章

    7438

    浏览量

    258255
  • 协议
    +关注

    关注

    2

    文章

    570

    浏览量

    38912
  • 开发板
    +关注

    关注

    25

    文章

    4437

    浏览量

    94080
收藏 人收藏

    评论

    相关推荐

    [原创]高性价比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移植+驱动开发+数码相框

    所有外设的裸机开啊②移植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 2199次阅读
    如何<b class='flag-5'>移植</b>OpenHarmony 3.0 到星空派<b class='flag-5'>开发板</b>上

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

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