USB(Universal Serial Bus)是通用串行总线的缩写,它是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。多媒体电脑刚问世时,外接式设备的传输接口各不相同,如打印机只能接LPT、调制解调器只能接RS232、鼠标键盘只能接PS/2等。繁杂的接口系统,加上必须安装驱动程序并重启才能使用的限制,都会造成用户的困扰。因此,创造出一个统一且支持易插拔的外接式传输接口,便成为无可避免的趋势,USB应运而生。最新一代的USB是USB4,传输速度为40Gbit/s。物理接头USB Type-A、Type-B接头分正反面,新型USB Type-C接头不分正反,目前已经大规模用在手机设备上.1996年 USB 1.0 速度只有1.5Mb/s——1998年 USB 1.1版本传输速率(两种模式):低速(Low Speed)1.5Mbps全速(Full Speed)12Mbps——2000年4月 USB 2.0版本USB 2.0兼容所有USB 1.0外部设备及电缆线等,传输速率达480Mbps(高速High Speed 系列)。——2008年11月 USB 3.0版本 最大传输速率高达5.0Gb/s,也就是625MB/s ——Super Speed引入了新的电源管理机制,支持待机、休眠和暂停等状态
2)全速/低速USB总线设备连接方法全速设备:D+上接1.5k上拉电阻;低速设备:D-上接1.5k上拉电阻;
3)电气特性收发器:对地电源电压为4.75~5.25V,设备吸入的最大电流值为500mA ,D+、 D-上不加电压。USB设备:高速在D+上加3.0~3.6V电压, 低速反之。D+、D-线电气特性: 无驱动:高速VD+ > 2.7V, VD-<0.8V, 低速反之; 有驱动:高速VD+ > 2.0V, VD-<2.0V, 低速反之。 D+、D-线信号特性: 高电平:VD+ - VD->200mV,VD+ >2.0V ; 低电平:VD- - VD+ >200mV,VD- >2.0V 。 D+、D-线数据特性:NRZI(不归零反向码) 逻辑0:D+、D-线上电平高、低间跳变; 逻辑1:D+、D-线上电平不变。
USB总线系统中的设备可以分为三个类型: USB主机( USB主控制器/根集线器(USB Host)):只能有一个,管理USB系统,每秒产生一帧数据;发送配置请求对USB设备进行配置操作,对总线上的错误进行管理和恢复。 USB 集线器(USB HUB):类似于网络集线器,完成USB设备的添加(扩展)、删除和电源管理等。 USB总线设备(USB功能外设 USB function)。传输协议
我们定义这样几个状态:假设D+,D-分别表示usb信号线的电平信号。那么对于usb full speed function(high speed ,low speed是不同的),我们定义差分数据线上可能出现的四个状态:Data J state:D+=1,D-=0;Data K state:D+=0,D-=1;SE0:D+=D-=0;SE1:D+=D-=1数字串构成域,域再构成包,包是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。 USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下: SYNC(8或32 bits) PID(8 bits) DATA(0-1023bytes) CRC(5或6bits ) EOP(2 bit)域(字段)由若干位组成(多少位由具体的域决定),域可分为七个类型: 同步域(SYNC)由8位/32位组成,作为每个数据包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为000000001。 作用:① 通知USB串行接口引擎数据要开始传输;② 同步主机和设备之间的时钟。格式:Full/low-speed为8位,high-speed为32位。① 全速/低速设备的同步域为00000001;② 高速设备的同步域为31个0,后面跟1个1;注意:这是对发送端的要求,接收端在解码时,0的个数可以少于这个数。 包标识符PID是用来标识一个包的类型。PID共有8位,目前USB协议仅使用4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。传输的顺序为PID0,PID1,PID2,PID3,...,PID7。包的类型包括令牌包(token packet, PID1~0为01)、数据包(data packet, PID1~0为11)、握手包(handshake packet, PID1~0为10)、特殊包(special packet, PID1~0为00):
在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容。它仅存于DATA数据包中,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(同步传输)。在总线传输中,总是先传输字节的最低位,最后传输字节的最高位。 (1)ADDR设备地址数据域: ADDR数据域由7位组成,可用来寻址多达127个外围设备。 (2)ENDP端点数据域: ENDP数据域由4位组成,通过这4个位最多可寻址出32个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中。对于慢速设备可支持端点0以及端点1作为中断传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点。 (3)Frame Number: 当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。帧序列号由主机产生,且每个数据帧自动+1,最大数值为0x7FF。当帧序列号达到最大数时将自动从0开始循环现在的USB已经可以当成万能接口了,跟其他接口转换也相对比较容易,所以具体的通信流程不做赘述了。
小结:
1.之前做过USB摄像头(3T硬盘损坏,导致项目资料丢失,不然可以将原理图,代码,工作流程介绍展开),现在只能建议兄弟们做好阻抗匹配,USB线最好是带屏蔽的,或者将DP,DM,GND绞在一起也能缓解信号干扰和衰减。
2.USB2.0的速度理论最高是480M,一般的跑到300M就差不多,再高基本很难达到了。
3.一般SOC和MCU是要加PHY芯片的,不过现在多数已经集成了,不需要加PHY芯片了。
4.USB3.0的发送和接收是可以互换的,兄弟们搞反了也没事,估计应该没有兄弟会去关注这点,USB也是分主从的,理论上是接127个设备。