这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » USB HID类器件开发

共11条 1/2 1 2 跳转至

USB HID类器件开发

菜鸟
2005-05-12 16:56:58     打赏
小弟第一次接触USB相关开发,现在用的USB接口芯片是PDIUSBD12(不过这个不重要)。现在算是枚举成功了。PC系统已经能识别到一个HID game controller。可是我不知道HID类的描述符的第一是什么(不是设备描述符、设备配置符,是那个很长的报告)。我发现枚举成功后只能通过断点1发送数据——这个是可以理解的,因为在发送报告的时候我只是报告了一个断点。但是我不知道怎么弄才可以让我的设备可以发送多余4个byte的数据。希望有大侠指点。谢谢



关键词: 器件     开发    

菜鸟
2005-05-12 18:11:00     打赏
2楼
请参照帖子:PDIUSBD12鼠标(1)(2)(3)的内容、代码和其中的资料下载,其中有HID规范和REPORT的生成工具。

菜鸟
2005-05-13 17:56:00     打赏
3楼
谢谢!呵呵

菜鸟
2005-05-13 18:17:00     打赏
4楼

多谢NoStop!我按照你的建议看了相关几个帖子。昨天发帖子之后我也看了HID Specification但是我现在还是没有弄明白我要怎么编写report才能发送更多数据,现在正在进一步查看其他资料。事实上我现在要做的是一个简单的USB数据通信。首先的要求是单片机发送数据到PC。由于PC有我们自己开发的VB程序,所以我并不需要windows driver知道我的数据是做什么用的,只管接受就好了。呵呵,好像太多问题了。我自己也在看,如能指教当感激不尽!谢谢!


菜鸟
2005-05-18 17:21:00     打赏
5楼
如果只是一个简单的数据通讯,而有不想编制驱动程序,那么参照前面的帖子,用PDIUSBD12虚拟一个串口,很方便。

菜鸟
2005-05-19 00:15:00     打赏
6楼

我现在可以给PC发送数据了,是通过interrupt in方式发送的,也就是endpoint 1 in。如果我要从PC接收反馈数据怎么接受?我看过HID specification。它好像说HID类一般不用定义interrupt out,也就是endpoint 1 out,而是通过control out接受?是这样吗?另外,我在发送用户数据给PC的时候,如果数据长度超过16 byte,我也只是通过一些写就完成了。PDIUSBD12的buffer不是只有16 byte的吗?为什么不需要分开写?谢谢!


菜鸟
2005-05-19 06:49:00     打赏
7楼

问题1:interrupt out一般没有必要,直接用control out可以的。

问题2:如果端点1的数据超过16字节,还是推荐分成单独的包发送,不要一次发。其实,16字节不是buffer的大小,而是MAX PACKET SIZE,就是最大允许的包的大小,而buffer的大小共有320个,但是是6个端点共用的,如果不按照推荐的大小操作,不太好(手册上有说明)。你遇到的这种情况有可能在如下条件下发生:a.端点描述符的MaxPacketSize比允许的16字节大;b.Host请求数据时比你实际发送的多;c.你发送的数据不超过端点描述符中的MaxPacketSize。


菜鸟
2005-05-19 18:27:00     打赏
8楼

^_^,真是太感谢NoStop了!

我回头查了一下。D12是有320 bytes的FIFO buffer。从我手上的资料看,控制断点的FIFO只有16个byte,断点1和2似乎没有这个限制?device descriptor里面的包最大是16 byte的。在report里面我定义的input数据是50h个byte(但是在endpoint定义里面我的最大包是d'50‘),实际发送的是48个byte,我想这么说,和你说的B符合,当包大小>=50的时候接受就报错。

另外,我不明白的是,为什么我在report里好像必须有collection:

DT 05H,01H ;uasge page: generic desktop controls DT 09H,05H ;usage:game pad DT 0A1H,01H ;collection: application DT 09h,30h ;usage: (X) DT 75h,08h ;report size(8位) DT 95h,50h ;report count(2个) DT 81h,6h ;Main, Input, 1-byte data: Data, Variable, Relative DT 0C0h ;End Collection

如何我能有个最简单的report,我只是要求发送数据,数据大小我来定就ok。现在我也可以定大小,可是我就是不明白为什么我一定要用collection。

谢谢!


菜鸟
2005-05-20 00:35:00     打赏
9楼

既然是HID设备,就必须遵守一定的规范,Collection正是规范的组成部分,Host需要其来解析REPORT的含意, 当然你可以随便发一些数,Host也可接收,但是会不予处理,因为你发的数据不合REPORT的定义。就象一个 USB鼠标,需要发给Host一定的字节(如4个),如果你总是发5个,Host会不断的判断并丢弃,这也是保证鼠标 正确工作的前提,如果你设计一个USB鼠标,就会体会到严格按照规范的必要性了。不过,你现在可以传输数据了, 并且REPORT已经够简单了,再简化的话,没有什么意义了吧。


菜鸟
2005-05-20 19:21:00     打赏
10楼
嘿嘿,对!我并不需要系统对我的传送的数据解释。我传送的数据将会有我们自己的VB程序处理——当然数据格式是我们自己定义的。所以report里面这个数据的usage我是随便的。原则上我并不需要collection。我想明白的是,我如何可以写个最简单的?我在看HID specification的时候,看到一些很简单的,也就是只是包含usage page, usage, report size, report count, input的,哦,对了,还有logical minimum, logical maximum——这两个是否必要我也不敢确定。

共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]