说起USB,想必大家对这个词儿都不默生,USB接头那么多种,怎么分得清呢?下面由两幅图来简洁表述。
通过上面两幅图,我们心里已经有了一个大致的概念了,那么在USB接口设计的时候,通常我们要在USB的通信线上挂上拉电阻,为什么要这个上拉电阻呢?不要行吗?谈起这个USB的上拉电阻,我们还得从USB的插入检测机制说起,至于这个上拉电阻是挂在D+?还是D-还大有文章,请听我慢慢道来!
USB主机是如何检测到,到插入的设备呢?在USB集线器的每个下游端口的D+ D-上,分别接了一个15K的下拉电阻到地,这样,当集线器的端口悬空没有设备插入时,输入端就被这两个下拉电阻拉到了低电平,而在USB的设备端,在D+或者D-上接了一个1.5K的上拉电阻到3.3V的电源,1.5K的上拉电阻是接在D+还是D-上,有设备的速度来决定,对于全速设备和高速设备,上拉电阻是接在D+上的,而低速设备的上拉电阻则是接在D-上。
USB传输速度
当设备插入到集线器时,接了上拉电阻的那条数据线的电压由1.5K的上拉和15K的下拉分压决定,结果大概在3V(3.3/1.5+15)* 1.5=3V),这对于集线器的接收端来说,是一个高电平信号,集线器检测到这个状态后,它就报告给USB主控制器,这样就检测到设备的插入了,集线器根据检测到的被拉高的数据线是D+还是D-来判断插入的是什么速度类型的设备,USB高速设备先是被识别为全速设备,然后通过集线器和设备的通信确认,再切换到高速设备,在高速模式下,是电流传输模式,这时要将D+上的上拉电阻断开。
USB速度检测
可以做一个简答的实验,用一个10K的上拉电阻接在USB的+5V和D+/D-上,电脑会提示发现新硬件,但是无法找到驱动程序,这时因为D+/D-被拉高,集线器就认为有设备插入了,它就报告给主机,但是主机获取数据却没有响应,就会得到一个无法识别的USB设备,这时你的设备管理器就会显示一个未知USB设备。
换句话来讲,这个如果这个1.5K是其他值,那么D+/D-上拉分压之后的电平就会发生变化,如果再遇到电压纹波,那么就有可能不会被检测到,这个就是1.5K的由来,你明白了吗?
往期回顾:
●C语言与汇编混合工程
●作为程序员你能给自己打几分?
●BMS电池管理系统
END