usb设备驱动开发日志之一
在公司做项目的时候遇到一个PCB布线时把DM和DP接反的情况。本来usb接口设计为高速和全速模式,如此一来,就成了低速模式。查了一下资料,看到百合电子工作室的一篇文章《usb设备的插入检测机制》(http://www.baiheee.com/Documents/081126/081126111838.htm)中讲到:
“在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备,上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。”(1)
我们的项目中的usb设备和pc主机之间的数据传输量不是很大。所以我想那就直接用低速模式吧,免得麻烦硬件的朋友再改板子。但是发现程序下载到目标板上,连上usb连接线并上电之后,设备没有正常枚举。设备管理器中显示为未知设备。
在百合电子工作室的那边文章中也提到了不能正常枚举的实验,就是:
“一个简单的实验:只用一个上拉电阻接在USB的+5V和D+或者D-上,WINDOWS也会提示发现新硬件,但是无法找到驱动程序。这时去设备管理器里面看,有显示未知USB设备,并且其VID和PID为0。”(2)
而我这里的也是这样子的,直接一个上拉电阻接到3.3V的电源上,也是不能正常枚举。
而火牛开发板上的usb电路则是使用了一个三极管做开关电路,有软件控制usb的D+引脚的电平高低。
这里我认为我看到实际情况与(2)的描述是相符的,但是跟(1)的表述有明显的矛盾。按照(1)的描述,这应该能枚举成功的。只不过是低速模式而已。而这里却不能成功枚举。何解?
难道是我的程序中设备配置描述表信息有些地方需要更改以匹配低速模式,才能让usb设备成功枚举。?
现在还没有解决办法,只有等待硬件朋友更改电路板接线了。