USB有 “主设备” 和 “从设备” 之分。 “主设备” 通常写为 “USB HOST”或“USB OTG” ,而“从设备”一般写为“USB DEVICE” 。STM32F103系列的芯片只能做“USB DEVICE” ,STM32F105和STM32F107系列才可以做“USB OTG” 。
USB信号是差分信号,信号线为D+、 D-。 在USB HOST端, D+、 D-各接一个15kohm的下拉电阻。
而在USB DEVICE端,这时就有高速低速设备的区别了。USB1.0、1.1、2.0协议中 都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:
高速设备:D+ 接一个1.5K的上拉电阻,D-不接; 低速设备则相反:
这就是为什么板上的USB接口的D+上接一个1.5K的上拉电阻到3.3V的原因。
这样当USB DEVICE插入到USB HOST中时,如果是高速设备,则D+被拉高,D-不 变;低速设备则与之相反。这个上拉过程需要大概2.5us的时间,USB HOST在这个时间 内便检测到了该信号,即可判断有USB DEVICE plug in,和该device的类型,然后开始通讯、枚举等。 所以,USB协议虽然非常复杂,一般人不太好掌握,但USB硬件却是非常简单的:如果是USB HOST,例如PC机,那么在USB接口的D+、D-差分线上都接一个15K电阻到地就可以了;如果是USB DEVICE,例如我们的STM32开发板,那么在USB接口的D+接一个1.5K的上拉电阻到3.3V就可以。
综上所述:当你的USB是作为从设备(类似U盘,USB键盘)时,需要在D+(或者D-)接上拉1.5K电阻;反之,你的USB是作为主机,用来外接USB键盘、U盘时,电路只需要在D+/-上接下拉电阻;
另外,在高速USB传输时,需要考虑信号的完整性问题,即阻抗匹配。阻抗匹配是指在能量传输时,要求负载阻抗要和传输线的特征阻抗相等,此时的传输不会产生反射,这表明所有能量都被负载吸收了。反之则在传输中有能量损失。下图中的 R55、R56的22欧姆电阻是阻抗匹配电阻。