USB On-The-Go 技术概述_接口电路论文
关键词:usb 2.0 otg 规范
usb的广泛应用其正在成为外设与pc机及膝上型电脑连接的工业标准usb外设主要是便携式设备,随着其数量的不断增多,设备之间无主机参与的直接通信成为亟待解决的问题。我们开发了基于usb总线(接口芯片为philips公司的pdiusbd12)的数据采集系统,取得了满意的效果。但在开发usb1.1设备时遇到的设备互连直接通信的解决方案.usb 2.0 虽然在速度等方面有很大的改进,但同样要依赖计算机主机进行通信。
今年底,usb开发者论坛(usb implementers forum,usb if)发布了专门用于usb外设间“可移动互连”的usb2.0补充规范usb on-the-go,其目标是使外设以主机的身份和另外特定的一组外设直接通信。本文中归纳usb 2.0补充规范otg的相关技术,并主要讨论其新增特性。
1 新的协议
otg补充规范对usb2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作。otg有两种设备类型:两用otg设备(dual-role device)和外设式otg设备(perip-heral-only otg device) 。两用otg设备完全符合usb2.0规范,同时它还要提供有限的主机能力考核成绩和一个miniab插座、支持主机流通协议(host negotiation protocol,hnp),并和外设式otg设备一样支持事务请求协议(session request protocol,srp).当作为主机工作时,两用otg设备可在总线上提供8ma的电流,而以往标准主机则需要提供100~500ma的电流。
两个两用otg设备连接在一起时可交替以主机和从机的方式工作,这个特点兼容了现有usb规范主机/外设的结构模型。otg主机同样负责补始化数据通信的任务,比如:总线复位、获取usb各种描述符和配置设备。这些配置完成后,两个otg设备便可以分别以主机和从机方式传输,两个设备主从角色交换的过程由主机传输协议(hnp)定义。以下以两用otg设备为例讨论srp和hnp。
1.1 事务请求协议srp
在以往的usb系统运行过程中,主机提供5v的电源和不低于100ma的总线电流。当otg主机(指以主机方式工作的两用otg设备,又称a-device)连接到有线电源时这种方法是适用的,但像手机这样的自供电移动设备则不能承受如此大的电能浪费。为了节约电源延长电池的使用寿命,当总线上没有活动时,otg主机将挂起总线电源vbus。srp协议可使otg从机(指外设式设备或者以外设方式工作的两用设备,又称b-device,此处指后者)请求a-device重新使能vbus,而后a-device使用hnp协议交换两个设备的工作方式,这两步完成后由新的otg主机开始事务传输。b-device可在前一事务结束2ms后的任意时间开始srp,srp的时序波形见图形1。
b-device将先后执行数据线脉冲调制(data-line pul-sing)和vbus脉冲调制(vbus pulsing) 。它通过使能数据线上拉电阻(全速和高速设备为d+,低速设备为d-)5~10ms实现前者,后者通过驱动vbus实现。vbus必须要有足够长的时间对其电容充电,这个时间应能保证不大于13μf的电容充电至2.1v(otg设备的电容是6.5μf或更小),从而不会对标准主机的96μf或更高的电容充电至2.0v。该限制保证了从b-device引来的vbus电流不会破坏标准主机的端口。
a-device检测到数据线脉冲调制或者vbus脉冲调制后,首先复位总线,然后发送set_feature命令而先不进行设备的枚举,此时b-device尚处在默认的从机状态。如果set_feature命令成功执行,说明b-device为两用otg设备,a-device(使用hnp协议)挂起vbus准备让b-device交换为主机方式接管总线。如果set_feature命令执行失败,说明b-device为外设式otg设备,于是a-device使能vbus准备开始一个传输事务(此时,a-device只是被唤醒,并未改变工作方式)。当a-device认为总线上没有传输需要时,挂起vbus以结束该事务。这种a-device自动检测b-device是否支持hnp协议的特征称为"no silent failure"。
1.2 主机流通协议hnp
当两用设备连接了一个mini-a插头或者mini-b插头时,它相应的便以otg主机或者otg外设的默认方式工作。a-device为默认主机,所以由它提供vbus电源,且在检测到有设备接入时复位总线、八举并配置b-device。
a-device在完成对b-device的使用后,可以通过查询b-device的otg性能描述符来判断是否支持hnp协议(即是否为两用otg设备)。如支持hnp,b-device将返回有效的otg性能描述符,a-device则产生一个set_feature命令(即hnp_enable)来通知b-device可以在总线挂起的时候以主机方式工作,随后a-device挂起总线。hnp的时序波形见图2。
b-device通过上拉电阻(全速时)或者下拉电阻(高速时)拉低d+以示连接断开。随后,作为对b-device断开的响应,a-device使能它的数据线并开始以从机方式工作。完成这些转换后,b-device和a-device便各自以主机角色和外设角色使用总线。如果该b-device属于两用otg设备且a-device不再使用它了,a-device便重发set_feature命令并挂起总线。若b-device申请角色转换时出错,a-device则拉低vbus以结束该事务。当b-device正常结束传输事务时便挂起vbus使能其上拉电阻,重新以从机方式运行。a-device检测到总线挂起后,发出一个连接断开信号并重新以主机方式工作。
2 连接器和电缆
2.1 连接器
usb if在otg中定义了更小的连接器,可以同时用于主机式和外设式的设备、具有更低的电源需求、扩展的电源保护模式和利于上层软件开发的简洁设计。
otg和现有的usb2.0规范完全兼容,一个主要的机械上改进是它的新式连接器。usb 2.0定义了三种连接器对(插头和插座):standard-a、standard-b和mini-b。mini-b连接器是专为较小的外设(如移动电话等)开发的。otg规范增加了第四种插头:mini-a,两种插座:mini-a和mini-ab。这些连接器比最初的usb连接器要小许多(如:mini-a插头截面积只有standard-a插头的38%),更适合于便携式设备。
mini-ab插座用于两用设备。mini-a新增的id脚(以前的usb插头不含此脚)在连接mini-ab时接地短路,而mini-b则使该脚断开,这样两用设备便可识别连接设备的类型以决定设备的默认角色。
mini-a和mini-b插头是严格配对适用的,如:不能将mini-a插头和mini-b插座配合使用。但是,mini-ab插座适合于以上两种插头。在外形上,mini-a更新近于椭圆形,而mini-b更接近于正方形。另外,他们的插头和插座内部的塑料都有颜色:mini-a为白色,mini-b为黑色,mini-ab为灰色。
2.2 电缆
usb 2.0规范定义了两种电缆:standard-a至standard-b和standard-a至mini-b。otg新增了两种电缆:mini-a至standard-b和mini-a至mini-b。mini-a-to-mini-b电缆的延迟被减少到可以在“a端”使用适配器,如:用standard-a插头连接otg两用设备需要一个standard-a插座至mini-a插头的适配器,而且mini-a插头连接standard-a插座时需要一个mini-a插座至standard-a插头的适配器。
3 usb on-the-go设备类型
otg有两种设备:两用otg设备和外设式otg设备。两用otg设备可以作为usb外设或者usb otg主机,并且可为总线提供8ma电流。而外设式otg设备不具备主机性能,它必须在向两用设备(主机)的请求获准后才能通信。两用otg设备必须能以全速方式运行,而高速运行的方式是可选的。外设型otg设备可以设计在高速、全速和低速中的任意一种方式下工作。
3.1 两用otg设备(dual-role device)
两用otg设备都有一个mini-ab插槽,所以一个mini-a至mini-b电缆可以直接将两个两用otg设备连接在一起,而此时用户不会觉察到两个设备的不同,也不知道它们的默认主从配置。
a-device(主机)必须在事务传输过程中提供总线电源,这是a-device和b-device的主要不同,同时也说明了两个设备的连接的非对等关系。a-device负责为总线供电因此它控制通信发生的时机,b-device只有通过srp协议向“主机”请求传输。
设计一个两用设备是比较困难的,因为它要具备:有限的主机能力、可作为一个全速的外设(可选的高速方式)、otg目标设备的列表、目标设备的驱动程序、支持srp、支持hnp、一个mini-ab插座、vbus上不小于8ma的电流输出、与用户通信的方式。
3.2 外设式otg设备(peripheral-only otg device)
外设式otg设备是普通的usb外设。它有一个otg功能描述符说明其支持事务请求协议srp而且它不是两用otg设备。此外,外设式otg设备只能配置mini-b型插座或者必须有一个带mini-a插头的附属电缆,而不能使用mini-ab型插座。
srp是b-device(此处指外设式设备)向a-device请求传输事务时必须使用的协议。它由前面提到的数据线脉冲调制和vbus脉冲调制(b-device产生)两种方法构成。a-device必须能检测这两种方法之一的信号,并开始一个相应的传输事务。除了固件(firmware)略有增加外,b-device同时可产生两种信号的成本并没有增加成本,而且还使实现a-device更加简单(只需根据实际情况提供其中一种方式的检测)。
一个otg设备不必实现otg的所有性能。例如,一个外设式otg设备可能只需支持srp和一个小于等于8ma的默认电流消耗配置。其实,添加对srp支持也较简单:在vbus上接一个驱动电阻并增加一些简单的逻辑,从而产生vbus脉冲调制信号。
另外,无论是两用otg设备还是外设式otg设备,都可以和通用的许机相连,只不过两用otg设备具有一定的主机能力(可以驱动特定的一组otg设备工作)。
4 驱动程序
与pc主机不同,便携式设备没有便捷的方式和足够的空间装载新的驱动程序。因此,otg规范要求每个两用otg设备有一个支持的外设式otg目标设备的列表,列表中包括设备的类型和制造商等。usb if正定义“otg type”规范。对于符合此规范的设备,otg主机只需提供一个驱动程序即可,这将使otg主机无需为每个设备提供单独的驱动程序,从而支持尽量多的otg外设。
与pc机不同,otg两用设备的驱动程序栈由usb主机栈和usb设备栈构成以满足两种工作方式的需要,见图3。otg驱动程序通过连接器的不同或者不否有nhp交换设备的工作方式来决定使用usb主机栈还是usb设备栈。
当otg两用设备以主机方式工作时,usb主机栈工作。其中的主机控制器驱程序负责usb主机栈与硬件端点的数据交换,usb驱动程序枚举并保存设备的,目标外设主机类驱动程序支持目标设备列表里的设备。主机类驱动程序由芯片制造商提供,同时,otg提供通用的主机类驱动程序(可以修改以用于非通用设备)。
当otg两用设备以从机方式工作时,usb设备栈工作。其中的设备控制器驱动程序负责usb设备栈与硬件端点的数据交换,usb协议层负责处理usb协议规范,设备类驱动程序的功能取决于该两用设备的功能(如数码照相机、存储设备、打印机等)。
otg驱动程序负责处理两用otg设备的工作方式转换,同时,它还可以返回其结果(如设备是否支持hnp)并处理总线错误。应用层程序通过otg驱动程序开始或者结束一个传输事务,通过usb主机栈或设备栈与硬件层交换数据。otg两用设备的驱动程序栈配置见图3。
5 数据流模型
otg主机和设备被划分为功能层、usb设备层和usb接口层三个不贩层次,见图4。
usb接口层为otg主机和otg设备提供连接,usb系统软件使用主机控制器来管理主机与usb设备的数据传输。usb系统软件相对于主机控制器而言,处理的是以客户角度观察的数据传输及客户与设备的交互。usb设备层为usb主机系统软件提供一个可用的逻辑设备。主机通过与之功能匹配的客户软件实现其各种功能。
otg设备与以往的usb设备一样的两种通道:数据流通道和消息通道。数据流通道没有定义好的结果,而消息通道则有固定的结构。但是,每个通道都有一定的带宽、传输类型、传输方向和缓冲区大小。自供电设备配置一个默认的控制通道,由它提供该设备的配置和状态等。
usb otg规范是usb2.0规范的补充而不是替代品。pc主机和标准外设并没有被取代,因为新的otg仅适用于需要具有主机功能和更小体积的便携式设备。otg在这些外设间引入了点对点的(point-to-point)通信方式,这使得便携式仪器的发展有了更加广阔的空间。usb otg已受到cypress等芯片供应商、软件开发商和设备制造商的广泛支持,otg不久将会成为新一代的“移动计算”解决方案。