新手友好 | USB 系统框架和电气信号分析

科技   2024-10-28 18:50   湖北  

一、USB系统硬件框架和软件框架


1. UBS设备使用示例


我们把USB设备比如Android手机接到PC端,此时会发现:

  • 右下角弹出"发现android phone"

  • 跳出一个对话框,提示你安装驱动程序


从这里我们可以引申出几个问题:


1.USB设备插到电脑上去,接触到的对方设备是什么?

答:是USB控制器,是USB控制器内嵌的root hub


2.既然还没有"驱动程序",为何能知道是"android phone"?

答:windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone",提示你安装的是"设备驱动程序"。

USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。


3.为什么一接入USB设备,PC机就能发现它?

答:PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平。

USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;它一接入PC,就会把PC端USB口的D-或D+拉高,从硬件的角度通知PC有新设备接入。


4.USB设备种类非常多,为什么一接入电脑,就能识别出来它的种类?

答:PC和USB设备都得遵守一些规范。比如:USB设备接入电脑后,PC机会发出"你是什么"?USB设备就必须回答"我是xxx", 并且回答的格式是固定的。

USB总线驱动程序会发出某些命令想获取设备信息(描述符),USB设备必须返回"描述符"给PC。


5.PC机上接有非常多的USB设备,怎么分辨它们?

答:每一个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号。PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址)。


6.USB设备刚接入PC时,还没有编号;那么PC怎么把"分配的编号"告诉它?

答:新接入的USB设备的默认编号是0,在未分配新编号前,PC使用0编号和它通信。


2. 硬件框架


在USB系统中,有2个硬件概念:

▪ USB Host:它跟处理器相连,处理器通过USB Host跟各类USB设备通信。USB Host中集成有一个root hub。

▪ USB Device:这分为两类设备

     ▫ Hub:用来扩展USB接口

     ▫ Function:就是普通的USB设备,比如U盘、声卡等



3. 软件框架



APP可以通过USB设备驱动程序访问USB设备,也可以绕过USB设备驱动,直接通过USB控制器驱动访问USB设备。


二、USB电气信号


1. 学习的起点


USB 2.0协议支持3种速率:低速(Low Speed,1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)。


USB Hub、USB设备,也分为低速、全速、高速三种类型。一个USB设备,可能兼容低速、全速,可能兼容全速、高速,但是不会同时兼容低速、高速。


1.1 USB设备状态切换图



1.2 硬件线路


下图是兼容高速模式的USB收发器电路图:



USB连接涉及Hub Port和USB设备,硬件连接如下:



2. 电子信号


USB连接线有4条:5V、D+、D-、GND。数据线D+、D-,只能表示4种状态。USB协议中,很巧妙地使用这两条线路实现了空闲(Idle)、开始(SOP)、传输数据(Data)、结束(EOP)等功能。


2.1 低速/全速信号电平



2.2 高速信号电平



2.3 设备连接与断开


2.3.1 连接


Hub端口的D+、D-都有15K的下拉电阻,平时为低电平。全速设备内部的D+有1.5K的上拉电阻,低速设备内部的D-有1.5K的上拉电阻,连接到Hub后会导致Hub的D+或D-电平变化,Hub根据变化的引脚分辨接进来的是全速设备还是低速设备。


高速设备一开始也是作为全速设备被识别的。


全速设备、高速设备连接时,D+引脚的电平由低变高:



低速设备连接时,D-引脚的电平由低变高:



2.3.2 断开


对于低速、全速设备,接到Hub时导致D-或D+引脚变为高电平,断开设备后,D-或D+引脚变为低电平:



对于高速设备,它先作为全速设备被识别出来,然后再被识别为高速设备。工作于高速模式时,D+的上拉电阻是断开的,所以对于工作于高速模式的USB设备,无法通过D+的引脚电平变化监测到它已经断开。


工作于高速模式的设备,D+、D-两边有45欧姆的下拉电阻,用来消除反射信号:



当断开高速设备后,Hub发出信号,得到的反射信号无法衰减,Hub监测到这些信号后就知道高速设备已经断开,内部电路图如下:



2.4 复位


从状态切换图上看,一个USB设备连接后,它将会被供电,然后被复位。当软件出错时,我们也可以发出复位信号重新驱动设备。


那么,USB Hub端口或USB控制器端口如何发出复位信号?发出SE0信号,并维持至少10ms。


USB设备看到Reset信号后,需要准备接收"SetAddress()"请求;如果它不能回应这个请求,就是"不能识别的设备"。


2.5 设备速率识别


2.5.1 低速/全速


Hub端口的D+、D-都有15K的下拉电阻,平时为低电平。全速设备内部的D+有1.5K的上拉电阻,低速设备内部的D-有1.5K的上拉电阻,连接到Hub后会导致Hub的D+或D-电平变化,Hub根据变化的引脚分辨接进来的是全速设备还是低速设备。



2.5.2 高速


高速设备必定兼容全速模式,所以高速设备内部D+也有1.5K的上拉电阻,只不过这个电阻是可以断开的:工作于高速模式时要断开它。


高速设备首先作为全速设备被识别出来,然后Hub如何确定它是否支持高速模式?


Hub端口如何监测一个新插入的USB设备能否工作于高速模式?流程如下:

▪ 对于低速设备,Hub端口不会监测它能否工作于高速模式。低速设备不能兼容高速模式。

▪ Hub端口发出SE0信号,这就是复位信号。

▪ USB设备监测到SE0信号后,会发出"a high-speed detection handshake"信号表示自己能支持高速模式,这可以细分为一下3种情景。

     ▫ 如果USB设备原来处于"suspend"状态,它检测到SE0信号后,就发出"a high-speed detection handshake"信号。

     ▫ 如果USB设备原来处于"non-suspend"状态,并且处于全速模式,它检测到SE0信号后,就发出"a high-speed detection handshake"信号。这个情景,就是一个设备刚插到Hub端口时的情况,它一开始工作于全速模式。

     ▫ 如果USB设备原来处于"non-suspend"状态,并且处于高速模式,它会切换回到全速模式(重新连接D+的上拉电阻),然后发出"a high-speed detection handshake"信号。


"a high-speed detection handshake"信号,就是"高速设备监测握手信号",既然是握手信号,自然是有来有回:

▪ USB设备维持D+的上拉电阻,发出"Chirp K "信号,表示自己能支持高速模式

▪ 如果Hub没监测到"Chirp K "信号,它就知道这个设备不支持高速模式

▪ 如果Hub监测到"Chirp K "信号后,如果Hub能支持高速模式,就发出一系列的"Chirp K"、"Chirp J"信号,这是用来通知USB设备:Hub也能支持高速模式。发出一系列的"Chirp K"、"Chirp J"信号后,Hub继续维持SE0信号直到10ms。

▪ USB设备发出"Chirp K "信号后,就等待Hub回应一系列的"Chirp K"、"Chirp J"信号

     ▫ 收到一系列的"Chirp K"、"Chirp J"信号:USB设备端口D+的上拉电阻,使能高速模式

     ▫ 没有收到一系列的"Chirp K"、"Chirp J"信号:USB设备转入全速模式



2.6 数据信号



2.6.1 低速/全速的SOP和EOP


SOP:Start Of Packet,Hub驱动D+、D-这两条线路从Idle状态变为K状态。SOP中的K状态就是SYNC信号的第1位数据,SYNC格式为3对KJ外加2个K。


EOP:End Of Packet,由数据的发送方发出EOP,数据发送方驱动D+、D-这两条线路,先设为SE0状态并维持2位时间,再设置为J状态并维持1位时间,最后D+、D-变为高阻状态,这时由线路的上下拉电阻使得总线进入Idle状态。



2.6.2 高速的SOP


高速的EOP比较复杂,作为软件开发人员无需掌握。


高速模式中,Ide状态为:D+、D-接地。SOP格式为:从Idle状态切换为K状态。SOP中的K状态就是SYNC信号的第1位数据。


高速模式中的SYNC格式为:KJKJKJKJ KJKJKJKJ KJKJKJKJ KJKJKJKK,即15对KJ,外加2个K。


2.6.3 NRZI与位填充


NRZI:Non Return Zero Inverted Code,反向不归零编码。NRZI的编码方位为:对于数据0,波形翻转;对于数据1,波形不变。



使用NRZI,发送端可以很巧妙地把"时钟频率"告诉接收端:只要传输连续的数据0即可。在下图中,低速/全速协议中"Sync Pattern"的原始数据是"00000001",接收端从前面的7个0波形就可以算出"时钟频率"。



使用NRZI时,如果传输的数据总是"1",会导致波形维持不变。如果电平长时间维持不变,比如传输100位1时,如果接收方稍有偏差,就可能认为接收到了99位1、101位1。而USB中采用了Bit-Stuffing位填充处理,即在连续发送6个1后面会插入1个0,强制翻转发送信号,从而让接收方调整频率,同步接收。而接收方在接收时只要接收到连续的6个1后,直接将后面的0删除即可恢复数据的原貌。


NRZI数据格式如上图所示。


讲师招募


招募要求

完成符合要求的机器人相关视频制作

总时长需达到 3小时以上

视频内容需为精品课程,确保高质量和专业性


讲师奖励

享受课程收入分成

赠送 2门 古月学院在售精品课程(训练营除外)


联系我们

添加工作人员微信:GYH-xiaogu




古月居
专业的ROS机器人知识社区和产业服务平台
 最新文章