Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1176700
  • 博文数量: 93
  • 博客积分: 7185
  • 博客等级: 准将
  • 技术积分: 3560
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-02 13:54
文章分类
文章存档

2011年(43)

2010年(11)

2009年(27)

2008年(12)

分类: 嵌入式

2010-01-26 11:32:31

1. 概要

OTG设备使用插头中的ID引脚来区分A/B DeviceID接地被称作为A-Device,为连接时候的USB HostA-Device始终为总线提供电力,ID悬空被称作为B-Device,为连接时候的USB Device,设备的USB Host/USB Device角色可以通过HNP切换。

 

OTG设备连接时不能跨越USB Hub,如果跨越USB Hub则失去HNP功能。

 

这里要注意A-Device/B-DeviceUSB Host/Device不是一回事 没有必然的绑定关系A-Device就一定要是HostA-Device只是连接时的Host可以通过HNP切换,切换完毕A-Device变成USB Device但是仍然为总线提供电力。

 

2.设备类型

Embedded Host:提供标准的A插座,普通的USB Host并带有TPL(支持设备列表)

OTG Device:使用Micro AB插座,可以在运行时切换Host/Device

仅外设B-Device:仅仅能作为外设的B-Device(分为插头一体和插头线缆分离的)。

 

注意:OTG Device在插头插入后会先打开VBus,如果没有设备连接则关闭VBus,并开启ADP侦测,而Embedded Host则不会再次关闭VBus

 

3.协议

SRPSession Request Protocol):

B-Device使用。通过数据线上的脉冲,请求A-Device打开VBUS并且开始一个SessionSession为从VBUS打开到关闭这一段时间。

支持:A-Device允许回应SRPB-Device(包括仅能作为外设的B-Device),允许发起SRP。一个能够支持HNPB-Device应该能够发起SRP。当A插头插入时关闭VBusHost必须支持回应SRPVBus总是打开的Host不必响应SRP

 

ADPAttach Detection Protocol):

提供设备检测是否有对端设备插入。

支持:任何OTG设备,Embedded Host,支持SRPB-Device允许ADP ProbingB-Device和仅能作为外设的B-Device还必须支持ADP Senseing如果他们支持ADP Probing

 

HNPHost Negotiation Protocol):

OTG设备通过HNP来切换Host/Device角色。

当前的USB Host通过HNP Polling(类似Polling Hub)通过轮询GetStatus()命令返回的数据中的Host request flag查询对端设备是否请求变为HostPolling间隔为1-2秒。

当当前的USB Host决定允许B-Device转变为Host以后通过SetFeature()打开b_hnp_enable,本次Session结束后Host回到A-Device手里。

 

4.设备框架

OTG描述符

在设备枚举时,A-Device通过GetDescriptorB设备请求OTG描述符。OTG描述符也应当作为GetConfiguration()的一部分返回。其中的bmAttributes标示B-Device是否支持ADP/HNP/SRP

 

标准设备特性,通过SetFeature()设置。

b_hnp_enable

设置此特性,显示B-Device被允许进行HNPA设备必须在T(HOST_REQ_SUSP)时间内挂起总线。

a_hnp_support

早期OTG版本的兼容特性,设置这个特性指示B-Device对端的A-Device支持HNPA-Device应当对B-Device设置此特性如果A-Device支持HNP

a_alt_hnp_support

废弃

 

GetStatus()

其中数据部分OTG Status最低位为Host Request flag,指示当期的USB Device角色期望变为USB Host角色。

 

5.一般连接过程(Host -> Device

OTG Device /Embedded Host 仅作为外设的B-device(带A插头型)

Host端检测到A插头插入,停止ADP,打开VBus,因为B-DeviceA插头与设备作为一体,此时B-Device必定与A插头连接,Host检测到外设连接,开始枚举。

 

OTG Device/Embedded Host 仅作为外设的B-deviceA插头为线缆连接)

Host段检测到A插头插入,停止ADP,打开VBus,如果B-Device是线缆连接完毕在将A插头插入则整个连接过程与上面无异,因为此时B-Device可能还没有插入插头,则设备连接超时,VBus再次关闭,等待下一次ADP的改变(线缆连接完毕),再次打开VBus,此时开始正常总线枚举。

 

OTG Device OTG Device

Host端检测到插头插入,则打开VBus,如果没有外设检测到,则关闭VBus,打开ADP ProbingDevice端检测到插头插入,则打开SRP,如果线缆没有插入,则SRP超时,Device端开始进行ADP Probing,当线缆连接完毕,Device端侦测到ADP变化,发送SRP请求Host打开VBusHost回应SRP并且打开VBus,完成设备连接。

 

6OTG DeviceHost/Device)与普通USB Host/Device

OTG DeviceDevice)插入普通USB Host

SPEC指示OTG Device满足所有USB外设条件,电器原理实现未查明。

普通USB设备插入OTG DeviceHost):

OTG兼容,但是电器原理实现未查明,对VBus的打开,以及ADPSRP的处理有疑问。在usb.org上有人问起这个问题,回复只是讲会识别并且兼容,但是实现原理及监测细节未知。

原贴地址:

 

最新的一些思考和猜想:

1.ADPOTG Device作为Host,既可以关闭VBus又能够监测普通USB设备的关键。

 

2.OTG Device作为Host如果不支持ADP,但是支持SRP的,VBus应当始终打开(或者通过插入中断?RootHub Polling),如果要关闭VBus则仅能支持会发起SRPOTG Device,普通的USB设备和不支持SRPOTG Device,在Host没有ADP的情况下无法在关闭VBus的情况下检测到设备(除了插入中断)插入并且通过SRP打开VBus

 

: OTG Device作为HostA插头插入时会尝试打开VBus,如果插入设备线缆在A插头插入时已经连接完毕,则在这次插入时,正常枚举。如果插入设备线缆在A插头插入时没有连接,作为HostOTG Device又不支持ADP,但是支持SRP,那么插入设备可以在线缆插入后发起SRP打开VBus,如果插入设备不支持SRP。则设备工作不正常?

 

3.OTG Device在监测总线活动和设备连接前会在插头插入时首先检测插头(普通USB不会检测插头,因为不关心,OTGID引脚会起控制器中断),从而决定OTG Device角色,并且通过ADP等待设备连接,然后打开VBus进行总线活动。

 

关于SRPADP

作为一个B-Device或者是普通的USB Device,怎样打开VBus进行总线枚举是他们的最终目的。

SRPB-Device请求A-Device打开A设备的手段之一,而ADP虽然作为检测插入设备为目的但是有些EH/OTG Device会在ADP检测到状况以后不等到SRP的到来(或者说不支持SRP)就打开VBus,倘若没有设备连接,再关闭VBus并且打开ADP继续侦测(仅限于OTG Device EH不会),更有甚者检测完A插头直接打开VBusADP出来的较晚,很多早期的OTG控制器中,根本没有ADPHNP Polling的字样,估计那时候可能SPEC里面还没有这些东西)这让SRP显得有些多余,但是我们作为一个B-Device的时候还是应当在开始总线操作前发出SRP,保证不支持ADP只支持SRP并且插头插入时不打开VBus仅仅在受到SRP才打开VBus的控制器上,设备也能进行正常枚举。

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