#1楼主:圈圈你好,我刚开始做USB开发,想问你几个简单的问题
文章发表于:2008-05-20 06:04
1.如果上位机想要免驱动,是不是必须把设备做成一个HID设备,而如果这样做的话我必须自己写一个
2.HID设备如果使用中断传输是不是在每个frame只能传输一笔事务,而且这笔事务的最大传输量不能超过64字节
3.HID设备是否可以做成自定义类型(非鼠标,键盘等协议),使用自己的传输协议
4.我的应用要求设备每秒大概发送10k字节的数据到主机(不是一次性的,但是每秒的传输量是一定的),主机不定期一次性传输大约2k字节的数据到设备,如果用HID的方法来实现,传输速率是否可以满足要求(查了好多资料,都说的很模糊)
5.如果我用自定义设备是否在实现上可以更灵活,而且效率更高(不过不考虑驱动开发的话)
以上,谢谢
#2
文章发表于:2008-05-20 19:42
我可以回答一些。
1,其实不只有HID设备可以免驱动,大容量存储类(Mass Storage)也免驱动,其实是因为xp系统已经自带了这些类的驱动。
2,不太明白
3,如果是自定义类型,那就不叫HID设备了啊。
。。。我也不知道该怎么回答了,还是让圈圈来说吧。。。
#3
文章发表于:2008-05-20 19:46
我觉得第二和第三个问题,你可以到书上看看,依据不同的传输速度和不同的传输类型,传输的最大字节数是不一样的,好像对于HID设备来说推荐使用中断传输,呵呵,好多都忘了,一直做的是批量传输
#4
文章发表于:2008-05-20 20:37
HID只支持中断传输。可以定义为自定义的HID设备。对于全速设备,中断传输最大包长可到64字节,每frame最多可传输19笔事务,每秒传输字节数最大为1216000字节,这个在USB协议里面有规定的。所以你要求每秒10K,用HID的中断传输应该是完全没问题的。用自定义的设备也可以,就是需要自己开发一个驱动程序。当然,如果只是做来玩玩,可以直接使用我提供的那个驱动。支持端点2的64字节批量传输。
#5
文章发表于:2008-05-20 22:07
谢谢圈圈,usb规范上中断传输确实是说每个frame可以传19笔事务,我是在一篇叫<用人机接口类型开发USB设备>文章上看到一句话说"全速设备每毫秒不能有超过一笔事务",而根据规范,一般是1ms一个frame,所以我才有以上的疑问,看来国内某些文章还是有些问题的
如果我把我的设备做成标准的HID设备,比如鼠标键盘或者U盘,那么传输的过程就一定要遵守这些通用标准设备的协议啦,如果我作成自定义的HID设备,那么通信的协议就是通过设置自己的报告描述符来体现(报告描述符规定报告内容的含义),不知道这么理解是否正确.
还有就是关于报告描述符的理解,我觉得报告内容所代表的含义越单一(比如一个报告内所有的数据都代表同一种含义),报告描述符的定义就会越简单,比如键盘的描述符就比鼠标的复杂.这样理解是否正确.
呵呵,搞了好多年嵌入式了,不过才刚开始学USB,属于落伍那种,看了两天协议,头都晕了,大致明白是怎么回事了,就是一些细节不太清楚,准备边做实验边学习,理论+实践嘛^_^,问题罗嗦了些,还请圈圈老大以后多指教
也谢谢2,3楼的兄弟,呵呵
#6
文章发表于:2008-05-21 02:06
你的理解基本上是对的。U盘不是HID设备,是大容量存储设备。关于如何做自己的HID设备,你可以看我们小组里的“VC++读写HID设备”那个帖子,里面有固件和应用程序的源代码。报告描述符方面的,你可以看看我以前写的报告描述符的文章,以及HID协议。
#8
文章发表于:2008-07-19 11:02
00说过不能只看,要说话,但刚接触这方面的东西,说不出什么只能打写无用的字符来增加点人气呵呵