使用M62板子实现USB的设备开发

描述

01介绍  

前面写过两遍关于 USB 协议基础的帖子,如果对 USB 协议不了解,可以去看看下列的基础内容。

这篇开始使用 M62 板子来实现 USB 的设备开发,首先从最简单的 USB HID 键盘开始。固件的 SDK 使用的是 CherryUSB 开源 USB 固件。CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈。设备端的协议执行流程如下图:

物联网

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 报告描述符是一个硬编码的字节数组,用于描述设备的数据包。这包括:设备支持多少数据包,数据包有多大,以及数据包中每个字节和位的用途。

下面来一一看看它们都怎么写的。

设备描述符

cherryUSB 中封装了宏来定义设备描述符:

物联网

详细说说字段表示的意思:

物联网

配置描述符

cherryUSB 中封装了宏来定义配置描述符:

物联网

物联网

接口描述符

接口描述符是需要自己写成数组的:

物联网

物联网

端点描述符

物联网

物联网

HID 描述符

物联网

物联网

HID 报告描述符

物联网

03设备的实现   

在设备连接时设备端就需要向主机上报各种描述符,主机这时候就会识别到设备然后给 USB 设备分配端口(USB 协议基础中的设备枚举)。

连接完成后设备就可以通过 usbd_ep_start_write 函数(cherryUSB 提供的 API)向主机上报数据了。

物联网

在主函数中调用它, 如下就实现了一个不断向主机发送字母 a 的 usb 键盘设备。

物联网

为了能和真实的键盘对应上,这里特意使用矩阵键盘接上板子来读取矩阵键盘的键值,将对应的键值转换成对应的 hid 报告发送给电脑端。

物联网

硬件的接线顺序如下:

物联网

在矩阵键盘扫描的 task 里面循环扫描矩阵键盘,如果按键有按下直接转换成对应的 hid 键值:

物联网

这些键值的定义可以在这里找到:

物联网

在 usb 键盘的 task 里面则取接受消息,并把消息发松给 pc 端。

物联网

04USB描述符的查看   

Windows 下可以使用 usbview 来查看 usb 描述符信息,这有利于我们调试分析使用。

物联网

05USB协议调试软件  

usb 协议相对还是比较复杂的,任何的描述符写错了都可能导致设备没办法正常的工作。这时候好用的调试软件就非常的重要了。

USBlyzer, WireShark 都是可以用来抓 USB 数据包进行分析的。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分