USB主机是如何检测到设备的插入的呢?首先,在USB集线器的每个下游端口的D+和D-上,
分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻
拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备,
上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。这样,当设备插入到集线器时,
由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一条拉高了。集线器检测
到这个状态后,它就报告给USB主控制器(或者通过它上一层的集线器报告给USB主控制器),
这样就检测到设备的插入了。USB高速设备先是被识别为全速设备,然后通过HOST和DEVICE
两者之间的确认,再切换到高速模式的。在高速模式下,是电流传输模式,这时将D+上的
上拉电阻断开。
一个简单的实验:只用一个上拉电阻接在USB的+5V和D+或者D-上,WINDOWS也会提示
发现新硬件,但是无法找到驱动程序。这时去设备管理器里面看,有显示未知USB设备,
并且其VID和PID为0。根据这个,我们可以简单的判断设备是否枚举成功。如下图所示,
分别是枚举不成功和枚举成功的图。
(来自USB小组专区:http://group.ednchina.com/93/
By computer00 @ 2007-09-03)
builder 说的我也遇上了,使用3段式也是因为HDL的D是description 不是design的缘故,在IEEE 1364上没有说一定要用3段式,但是,写成1段式就不行,除非你骗过编译器(不是综合器),让它认为你写的不是状态机。(比如在Quartus II中把状态机的reg,直接assign到一个output上,大家可以试试哟)。
嘿嘿,我见过一种机器生成的代码,采用现态逻辑驱动同步输出,还能避免输出慢一拍的问题,过些天给大家传上来。不过这种方法适合机器生成,手工编写难度大,而且需要较复杂的思路。
另外,上面说的独立实现计数器的方法确实很好。代码清晰得多,也利于调试。
用户271389 2013-4-26 17:07