w494143467 发表于 2020-11-20 20:30

【MM32 eMiniBoard测评】Part6:USB_HID的初步了解

<p><strong>1.介绍</strong></p>

<p>这是我第一次接触USB的HID通信协议,以往基本都是使用串口,这算是一个新的知识,所以也稍微查询了一下资料,也看了一下其他人的测评,大概对HID有了初步的了解,下面就看一下这个流程吧。</p>

<p><strong>2.HID介绍</strong></p>

<p>USB设备描述符-概述</p>

<p>当插入USB设备后,主机会向设备请求各种描述符来识别设备。那什么是设备描述符呢?</p>

<p>Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。</p>

<p>描述符的作用就是通过命令操作作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作。</p>

<p>USB有那些标准描述符?&nbsp;</p>

<p>USB有5种标准描述符:设备描述符 、配置描述符、字符描述符、接口描述符、端点描述符&nbsp; 。</p>

<p>描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。其中可能还会有获取设备序列号,厂商字符串,产品字符串等。</p>

<p>上面是我从别的地方摘过来的,整体大概就是这么一个意思。</p>

<p><strong>3.HID代码简单分析</strong></p>

<p>首先打开【<strong>MM32F013x_Lib_Samples_V1.03\MM32F013x_Samples\LibSamples\USB\USB_HID_Suspend</strong>】这里面的例程,官方给出的例程已经非常好了,接下来下载坛友提供的HID助手【https://download.eeworld.com.cn/detail/fxyc87/614379】,这个助手功能挺强大的。</p>

<p>打开HID调试工具,可以看到HID整体界面如下图所示,这时候点击查找USB,如果开发板已经下载例程,则列表里会出现如下图红框中的名称,这就是MM的HID设备名称。</p>

<p></p>

<p>接下来运行看一下,可以看到接收速度非常快,这里可以大致的统计一下速度,约为35000字节每秒。</p>

<p></p>

<p>35000字节每秒代表的速率是多少呢,35000X8就等于通信速率,大约为280000bit/s速率还是挺可观的。</p>

<p></p>

<p>最后来看一下代码,也是比较简介的,在while循环中不停的发送数据,所以会一直接收到数据。</p>

<p></p>

freebsder 发表于 2020-11-20 21:26

<p>我也没完完整整仔仔细细玩过usb</p>

bianjianm 发表于 2020-11-20 22:25

<p>不错 不错,我也试下</p>

w494143467 发表于 2020-11-21 08:57

bianjianm 发表于 2020-11-20 22:25
不错 不错,我也试下

<p>是啊,这个对于我来说是新东西,你也试试。</p>

okhxyyo 发表于 2020-11-23 10:56

<p><strong><a href="https://bbs.eeworld.com.cn/elecplay/content/145" target="_blank">灵动MM32 eMiniBoard开发板测评</a></strong></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1146791-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1146791-1-1.html</a></p>

zxopenljx 发表于 2021-5-21 10:10

<p>谢谢楼主分享</p>
页: [1]
查看完整版本: 【MM32 eMiniBoard测评】Part6:USB_HID的初步了解