单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:4236|回复:0

USB开发学习笔记

[复制链接]
ID:60266发表于 2014-8-18 02:39|显示全部楼层
            USB概述USB为目前广泛被使用的一种串行通讯协议,它包含USB1.0 USB1.1 USB2.0 USB3.0,其中USB1.0USB1.1支持低速模式(1.5Mb/S)与全速模式(12Mb/s),USB2.0还支持高速模式(480Mb/s),USB3.0在做到兼容前面的同时,自己的速度提升到高达5Gbps全双工...
USB是一种主从通信模式,通信过程由主机(host)发起,从机(device)只能被动的负责应答,通信只能在主机与从机之间进行...
为了突破主从通信模式对通信的限制,出现了USBOTG,USB设备可以灵活的工作在主机或者从机这两种状态下,这样设备与设备之间通过模式切换就可以进行工作,大大提高了USB的使用范围
USB的拓扑结构
主机可以有 一个或者多个USB主控制器(host controller)和根集线器(roothub),主控制器负责数据的处理,而集线器一个接口与通路为主机与设备,一个主控制器可以通过集线器为USB设备提供多个USB接口,但是这些接口总的带宽是不变的,在集线器的作用下,集线器可以形成多层嵌套,但是有一定的限制,在USB1.1中,HUB的层数最多只能为4层,USB2.0规定做多为6层,一个USB控制器理论上通过集线器扩展接口后,最多可以挂接127个设备,因为USB协议规定每一个USB设备具有一个7bit的地址
USB的电气特性
USB接口使用的是差分电平传输,在低速与全速模式下,使用的电压传输,在高速模式下,使用的是电流传输;
标准的USB连接线使用的是4芯电缆,其中包括Vbus D- D+ GND(在USB OTG中连接线为5条,多了一天身份识别线ID)
USB在传输过程使用的是NRZI编码方式,
USB协议规定,设备在未配置之前,从Vbus上获取的电流最多是100mA,在配置之后,最多可以从Vbus上获取的电流为500mA,,Vbus的电压为5V,
USB的插入检测机制
在USB集线器引出的各个子USB物理接口上,D+D-分别接了一个15K的下拉电阻到地,因此在没有设备插入的情下,D+ D-呈现低电平,而在USB的设备端,D+或D-接了一个1.5K的上拉电阻到3.3V的电源(具体接在D+还是D-上,由具体的设备决定)--->速度快的,上拉电阻接正的,速度慢的,上拉电阻接负的;
当设备插入到集线器上的接口时,集线器下的相应端口的V+或V-,就会出现电平变化,由串联公式可以知道这时V+或V-上的电压大概为3V,一个高电平信号给了集线器,集线器在将这个状态上报给控制器,这样就检测到了设备的插入,
如果是USB的高速设备在插入到集线器上时,先被识别成全速设备,通过集线器与设备的双方确定后,再转到高速模式,由于高速模式下,为电流传输,所以这时D+上的上拉电阻需要断开。
USB的各描述符之间的关系
USB1.1中,USB协议包含的描述符有设备描述符、配置描述符、接口描述符、端点描述符、
USB2.0中,新增加了device qualifierDescriptor and Other Speed Configure Descriptor;
一个设备只能有一个设备描述符,该设备描述符决定有多少种配置,每一种配置都有一个配置描述符,在每个配置描述符里面又定义了有多少个接口,每一个接口有一个接口描述符,每一个接口描述符又定义了接口描述符中有多少个端点,每个端点又有一个端点描述符,端点描述符描述了该端点的大小以及类型等信息。
各描述符详细的描述信息请大家参考具体USB开发指南。
USB设备有一个USB设备地址,USB主机通过该设备地址访问USB设备,但是在USB设备内,他包含很多个端点,所以仅有设备地址还不够,还必须要有端点地址,有了这两个地址后,USB主机就可以准确地与USB设备的端点发送与接收数据了
USB设备的枚举过程
USB设备在检测到USB设备插入之后,就要对设备进行枚举,枚举就是获取设备的各种描述符信息,这样主机方便加载合适的驱动程序;
在设备的枚举过程中,使用的是控制传输以确保数据的正确性
USB包结构以及传输过程
USB为串行传输,LSB在前,最后是MSB,
USB总线上的传输数据是以包为基本单位,一个包被分成很多个域,LSB与MSB是以域为单位来划分的;
不同的包有共同的特性,就是都以同步域开始,紧跟着一个包标识符(PID),最终以包结束符(EOP)来结束一个包,其中的同步域的作用是通知USB串行接口数据即将开始传输,做好准备,同步域还可以用来同步主机端与设备端的数据时钟,因为同步域是一串0开始,而0在总线上传输时经过编码为电平跳转。
对于全速与低速设备,同步域使用的是00000001(二进制数在总线上的发送顺序),对于高速设备,同步域使用的是31个0,后面跟个1(这些要求针对的对象是主机);
包结束符(EOP),对于全速、低俗与高速设备也是不一样的,全、低速设备的EOP是一个大约2个数据宽度的单端0(SE0->即D+D-同时为低电平)信号,【对设备的复位就是将SE0状态如果保持10mS、】,而对于全速设备EOP是使用故意的位填充错误来表示,同时通过CRC校验来判断一个位填充错误是真的位填充错误还是EOP标志(CRC校验正确就是EOP);
包标识符(PID)是用来标识一个包的类型,一共8个位,使用其中的4个位来表示,另外4个位取反进行校验用,
包的类型有4类:令牌包(PID1~0:01)、数据包(PID1~0:11)、握手包(PID1~0:10)、特殊包(PID1~0:00),
每一个类型的包中有可以子分为几种不同功能的包:
令牌包:OUT(0001)、IN(1001)、SOF(0101)、SETUP(1101)
数据包:DATA0、DATA1、DATA2、MDATA(后两种USB1.1不支持)
握手包:ACK、NAK、STALL、NYET(最后一种USB1.1不支持)
特殊包:PRE、ERR、SPLIT、PING(后三种USB1.1不支持)
因为USB为主从结构,数据传输由主机发起,设备只能被动的接听数据(除了远程唤醒功能外【远程唤醒并不传输数据,只改变下总线状态】),所以需要主机发送一个令牌来通知哪个设备进行响应,如何响应;
OUT:输出令牌包用来通知设备将要输出一个数据包
IN:输入令牌包用来通知设备返回一个数据包
SETUP:建立令牌包只用在控制传输中,他跟输出令牌包作用一样,用来通知设备输出一个数据包,两者区别在SETUP包后只使用DATA0数据包,且只能发送设备的控制端点,并且设备必须要接受,而OUT包没有这种限制。
SOF:帧起始包在每帧(或微帧)开始时发送,她以广播的形式发送,所有USB高速与全速都可以接收到SOF包,USB全速设备每毫秒产生一个帧,而USB高速设备每125微秒产生一个微帧。在每次帧(微帧,每毫秒内的8个微帧的帧号一致)开始时,通过SOF包发送帧号,USB主机则对当前的帧号进行计数,SOF令牌包之后是不跟数据传输,其他的都带有数据传输
每一个令牌包最后都有一个CRC5的校验,他只校验PID之后的数据不包括PID本身
。。。。。


手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网