哦,hcn 我现已确定我的扫描枪属HID设备。 至于后面的问题还是需要您给解答一下。即 请问您之前所说的“将375的D+和D-连接相对调,也就是将375的D+和扫描枪的D-相连接,将375的D-和扫描枪的D+相连接”这个到底根据什么来调整呢?是根据低速?还是根据HID?
这个是根据主机对低速设备的检测来决定的,你可以参考下USB协议里面 有关于怎么样检测是全速设备还是低速设备
请问hcn: 从抓取的设备描述符来看,Speed为Full,应该指的就是全速,那是不是意味着UD+和UD-两线不用交叉呢?
再问hcn: 对于PC机来讲,为什么低速和全速,甚至高速USB接口设备在识别过程中却不存在这个数据线交叉的问题呢?是否是master和slave模式的差异造成的呢?
这部分你可以去参考USB协议,里面有详细的介绍
哦,好 谢谢hcn!
请问hcn: set_idle( ); set_report(); intt0(); 这3个子函数分别是干什么用的? get_descriptor_x(); 这个是获取HID描述符吧?
前面的2个是根据HID协议来做的,后面一个函数是键盘向单片机发送数据的过程,实际流程应该是单片机先发送取数据的令牌,看下有没有数据上传,如果有的话就就读取数据。 get_descriptor_x()就是获取HID描述符
hcn: 我觉得你给的USB键盘程序应该可以用于我的USB扫描枪,只是需要修改接收数据部分。但现在我接上扫描枪后,连设备识别都成问题,就是说扫描枪并不能工作。 我抓了扫描枪的设备描述符,它的包长度是8个字节,全速,跟键盘应该很相似的。 但现在这种情况下,我应该怎么做呢?
hcn: 我觉得你给的USB键盘程序应该可以用于我的USB扫描枪,只是需要修改接收数据部分。但现在我接上扫描枪后,连设备识别都成问题,就是说扫描枪并不能工作。 我抓了扫描枪的设备描述符,它的包长度是8个字节,全速,跟键盘应该很相似的。 但现在这种情况下,我应该怎么做呢?
你可以将描述符发到我们技术信箱,我帮你看下是低速设备还是全速设备?
DEVICE BUS SPEED :FULL
不是看这个的,我要看的是描述符,只有描述符才能确定是全速设备还是低速设备
hcn: 我把设备描述符抓图发到你邮箱了,请你帮忙分析一下。谢谢! bMaxPacketSize0和wMaxPacketSize的大小都是8个字节嘛,即一次中断传输的数据最多是8个字节啊。但是我发现了一个问题: l=rd_usb_data(buffer); 通过观察变量发现,获取设备描述符操作时,l竟为18;获取配置描述符操作时,l竟为34。而根据数据包的长度,l应不超过8才对呀。
你如果直接用我们的命令而不是用外置固件来读取描述符的话,那么这个函数返回的就是你描述符的长度,设备描述符长度为18,配置描述符长度为34