Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213301
  • 博文数量: 47
  • 博客积分: 72
  • 博客等级: 民兵
  • 技术积分: 171
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-31 11:44
文章分类

全部博文(47)

文章存档

2015年(14)

2014年(5)

2013年(11)

2012年(17)

分类: LINUX

2015-02-27 11:31:28

原文地址:usb-OTG-ADP-HNP-SRP 作者:laoyouji

1. USB速率

这得从USB的发展过程说起。
USB 1.0:最早的USB标准,有187.5Kbps和1.5Mbps两种传输速率,最高传输速率1.5Mbps
USB 1.1:传输速率为USB 1.0标准的8倍,有1.5Mbps和12Mbps两种传输速率,最高速率12Mbps
USB 2.0:较新的USB标准,最高传输速率为480Mbps
USB 3.0:据说是最新的USB标准,最高传输速率为4.8Gbps(还没见过这种设备)
可能是出于兼容性方面的原因,USB 2.0支持三种传输速率:
low speed:1.5Mbps(HID设备,例如鼠标、键盘、游戏手柄,通常使用这种速率)
full speed:12Mbps
high speed:480Mbps

2. USB OTG

想了解USB OTG的工作原理,需要知道三个协议:
ADP:Attach Detection Protocol
HNP:Host Negotiation Protocol
SRP:Session Request Protocol

2.1 ADP

USB主从设备或USB OTG设备,如何知道USB总线上有没有挂接其它USB设备呢?USB设备会周期性地检测USB端口的电容值,如果USB端口电容值变化足够大,大到可以 确定有新的USB设备接入了,那么USB A型设备会为USB总线提供电源,并检测设备连接;而USB B型设备则发起一个会话请求(SRP),并等待A型设备的响应。

2.2 HNP

2.2.1 主从设备是如何确定的?

USB OTG既可以做主设备,也可以做从设备。在系统运行过程中,OTG设备的角色(主设备or从设备)可以转换,但是,在系统刚启动时,OTG设备的角色是确定的。如何确定的呢?下面来解决这个问题 
 

上图是几种典型的USB接口,其中Mini-A型、Mini-B型、Micro-AB型和Micro-B型口都有五个管脚,管脚顺序是
1:Vbus
2:D-
3:D+
4:ID
5:GND
若 是ID管脚接地,则该设备为A设备;若ID管脚悬空,则该设备是B设备,其中A设备是initial host,B设备是initial peripheral。即系统刚启动时,A设备是主设备,B设备是从设备。如下图所示,左边的设备是B设备,右边的USB设备是A设备。
 

值得注意的是,在系统运行的过程中,USB设备的主从角色可能会变化,但是A设备/B设备的名称不会变化。也就是说,在系统运行过程中,A设备有可能从主设备变成从设备,但是A设备仍然叫做A设备;B设备类似。
另外,A设备始终是供电设备,而与A设备扮演的角色无关。即使A设备变成了从设备,仍然由A设备供电。

2.2.2 为什么需要更换主从设备的角色呢?

 
上图为一个需要互换角色的例子。左边是一台PDA,PDA里有打印机驱动,但由于它是B设备,因此初始角色是从设备。很显然,在打印服务的过程中,有必要互换PDA和打印机的角色。
我们在开发i.MX233开发板的过程中,ID管脚没有引出来,因此,默认i.MX233是从设备。可是USB摄像头也是从设备,这样i.MX233没有办法转换成主设备,从而i.MX233无法使用USB Camera。

2.3 SRP


正如刚刚提到的那样,A设备一直供电,即使A设备通过HNP协议由主设备变成从设备了,也一直由A设备供电。然而,在嵌入式系统里,尤其是 只有电池供电的系统里,功耗是一个很重要的性能指标。A设备可以通过停止供电终止会话,进而降低功耗。这样就产生了一个问题,如果B设备要求开启一个会 话,该怎么办?
SRP可以解决这个问题。根据SRP,B设备可以请求A设备打开电源,开始一个会话(session)。
 
如上图所示,B设备中的SRP PULSE会先给D+引脚一个脉冲,之后再给VBUS一个脉冲,这样可以唤醒A设备。相应的,右边的A设备检测到D+或VBUS上的信号,则开启VBUS并启动会话。

阅读(1620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~