USB HOST与 USB OTG的区别及工作原理

在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!

零 USB背景知识

USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一。

硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。例如,PC上的插座就是母头,USB设备使用公头与PC连接。

目前USB硬件接口分三种,普通PC上使用的叫Type;原来诺基亚功能机时代的接口为Mini USB;目前Android手机使用的Micro USB。

Host

USB是由Host端控制整个总线的数据传输的。单个USB总线上,只能有一个Host。

OTG

On The Go,这是在USB2.0引入的一种mode,提出了一个新的概念叫主机协商协议(Host Negotiation Protocol),允许两个设备间商量谁去当Host。

预了解更多USB知识,请参考USB官网以及下面这篇文章: http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

USB HOST/DEVICE/OTG概念:

OTG控制器可以做host,也能做device,控制器的角色一般由USB ID电平来决定。完整的USB2.0 OTG 控制器硬件信号如下:

USB_ID:输入信号,由 USB OTG 协议定义,用于识别 USB 口所接设备的默认角色(host or device)。USB_ID 默认上拉,处于 device 状况,如果要控制器进入 host 状态,需外接 mini-A 口或 micro-A 口将 USB_ID 短接到地。

也可以由软件进行强制切换,通过控制 /sys/bus/platform/drivers/usb20_otg/force_usb_mode 实现,可以有如下三种值:

  1. 由硬件即USB ID决定
  2. 强制 host模式
  3. 强制 device模式

HOST模式和OTG模式区别

OTG和HOST的区别就是HOST支持的设备多一点,但需要有对应的从设备接口连接才能实现数据传输,而OTG传输方便,不需要别的机器上有从设备的接口就能传输。

USB OTG的工作原理

OTG补充规范对USB 2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作。OTG有两种设备类型:两用OTG设备(Dualrole device)和外设式OTG设备(Peripheralonly OTG device) 。两用OTG设备完全符合USB 2.0规范,同时,他还要提供有限的主机能力和一个MiniAB插座、支持主机流通协议(Host Negotiatio n Protocol, HNP),并和外设式OTG设备一样支持事务请求协议(Session Request Protocol, SRP)。当作为主机工作时,两用OTG设备可在总线上提供8 mA的电流,而以往标准主机则需要 提供100~500 mA的电流。

2个两用OTG设备连接在一起时可交替以主机和从机的方式工作,这个特点兼容了现有USB 规范主机/外设的结构模型。OTG主机负责初始化数据通信的任务,比如:总线复位、获取USB 各种描述符和配置设备。这些配置完成后,2个OTG设备便可以分别以主机和从机方式传输信息,2个设备主从角色交换的过程由主机传输协议(HNP)定义。

1.1主机(Adevice)和从机(Bdevice)的初始功能

设备的初始功能是通过定义连接器来实现的。OTG定义了一个叫做MiniAB的袖珍插孔,他能直接接入MiniA或者MiniB插口,MiniAB有一个ID引脚 上拉至电源端,MiniA插头有一个与地连接好的ID(R<10 Ω),Mini B插头有一个与地连接的开路ID引脚(R>100 kΩ)。当2个OTG设备连接到一起的时候 ,MiniA插头边的ID引脚会注入一个“0”状态,MiniB插头边的ID引脚为 “1”,ID为0的OTG设备默认为主机(A device),ID为1的OTG设备默认为从机(B device)。图1对上述内容进行了图解。

1.2 对话请求协议SRP(Session Request Protocol)

这个协议允许Adevice(可以是电池供电)在总线未使用时通过切断Vbus来节省电源消耗,也为Bdevice启动总线活动提供了一种方法。任何一个Adevice, 包括PC或便携式电脑,都可以响应SRP;任何一个Bdevice,包括一个标准USB外设, 都可以启动SRP;要求一个双重功能设备既能启动SRP,又能响应SRP。

1.3 主机流通协议HNP(Host Negotiation Protocol)

HNP是一种用来实现Adevice和Bdevice主机/从机转换的协议(实际上是电缆的反转)。主/从机功能交换的结果表现在下列过程中:

(1)利用上拉电阻来发送信号给从机。
  (2)A device可在B device上设置“HNP Enable”特性。
  (3)B device断开上拉。
  (4)A Device与上拉电阻相连,表明A device从属于从机。
  (5)A device给Vbus供电。
  (6)B device检测A device的上拉。
  (7)复位/列举/使用A device。

1.4 驱动程序

与PC主机不同,便携式设备没有便捷的方式和足够的空间装载新的驱动程序。因此,OTG 规范要求每个两用OTG设备有一个支持的外设式OTG目标设备的列表,列表中包括设备的类型和制造商等信息。

与PC机不同,OTG两用设备的驱动程序栈由USB主机栈和USB设备栈构成以满足两种工作方式的需要。OTG驱动程序通过连接器的不同或者是否有NHP交换设备的工作方式来决定使用USB主机栈还是USB设备栈。

当OTG两用设备以主机方式工作时,USB主机栈工作。其中的主机控制器驱动程序负责USB 主机栈与硬件端点的数据交换,USB驱动程序枚举并保存设备的信息,目标外设主机类驱动程序支持目标设备列表里的设备。主机类驱动程序由芯片制造商提供,同时,OTG提供通用的主机类驱动程序(可以修改以用于非通用设备)。

当OTG两用设备以从机方式工作时,USB设备栈工作。其中的设备控制器驱动程序负责USB 设备栈与硬件端点的数据交换,USB协议层负责处理USB协议规范,设备类驱动程序的功能取决于该两用设备的功能(如数码照相机、存储设备、打印机等)。

OTG驱动程序负责处理两用OTG设备的工作方式转换,同时,他还可以返回其结果(如设备是否支持HNP)并处理总线错误。应用层程序通过OTG驱动程序开始或者结束一个传输事务, 通过USB主机栈或设备栈与硬件层交换数据。

1.5 数据流模型

OTG主机和设备被划分为功能层、USB设备层和USB接口层3个不同层次,如图2所示。

USB接口层为OTG主机和OTG设备提供物理连接,USB系统软件使用主机控制器来管理主机与 USB设备的数据传输。USB系统软件相对于主机控制器而言,处理的是以客户角度观察的数据传输及客户与设备的交互。USB设备层为USB主机系统软件提供一个可用的逻辑设备。主机通过与之功能匹配的客户软件实现其各种功能。

OTG设备与以往的USB设备一样有两种通道:数据流通道和消息通道。数据流通道没有定义好的结果,而消息通道则有固定的结构。但是,每个通道都有一定的带宽、传输类型、传输方向和缓冲区大小。自供电设备配置一个默认的控制通道,由他提供该设备的配置和状态等信息。

一问一答:

  1. 什么是USB OTG?

USB OTG是USB 2.0的补充规范

2. USB OTG针对USB 2.0的最重要扩展是什么? 更具节能性的电源管理和允许设备以主机和外设两种形式工作。

  1. USB2.0中定义三种类型:

HOST(主机),Device(设备), HUB

OTG新增两种设备: Dual-role device(两用设备),Perip-heral-only OTG device(OTG外设)

  1. USB 2.0中定义了三种连接器对(插头和插座):

Standard-A(主机),Standard-B(外设),Mini-B(较小的外设)

OTG新增插头: Mini-A

OTG新增插座: Mini-A和Mini-AB(同时支持Mini-A或Mini-B的插头)

其中插头和插座内部的塑料颜色:Mini-A为白色,Mini-B为黑色,Mini-AB为灰色

  1. USB 2.0中定义了两种电缆:

Standard-A至Standard-B, Standard-A至Mini-B OTG增加的两种电缆:Mini-A至Standard-B, Mini-A至Mini-B

  1. OTG的Dual-role device(两用设备)必须具备:

1) 有限的主机能力

2) 可作为全速的外设(可选的高速方式)

3) 可作为全速的主机(可选的低速或高速方式)

4) OTG目标设备的列表及驱动程序

5)支持SRP,HNP

6)一个Mini-AB插座

7)VBUS上不小于8mA的电流输出

8)与用户通讯的方式

  1. Perip-heral-only OTG device(OTG外设):
  • 是普通的USB外设
  • 支持SRP
  • 一个Mini-B插座(不能使用Mini-AB)
  1. Android usb如何实现既可以发现accessory设备,同时也可以发下host设备

做usb通信,首先要先弄清楚哪边是HOST那边是SLAVE 比如你的android手机做host,要获得slave,用UsbDevice表示slave 要是你的android手机做slave,要获得host,用UsbAccessory表示host

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏APP测试

说好不哭,现在就带你了解直播类音视频测试!

显而易见,优酷、爱奇艺、全民K歌、QQ音乐、网易云等音视频直播市场的繁荣是大势所趋

16960
来自专栏用户5521492的专栏

关于自学 JAVA 的几点建议

许久不见,最近公众号多了很多在校的师弟师妹们。有很多同学都加了我微信问了一些诸如 [如何自学 Java ]的问题,我都一一解答了,这是大家对我的信任,我非常感谢...

9220
来自专栏APP测试

速看,APP测试之ADB最全指南!

ADB全称Android Debug Bridge, 是android sdk里的一个工具,目的是起到调试桥的作用,用这个工具可以直接操作管理android模拟...

10930
来自专栏APP测试

APP测试之使用ADB可能遇到的错误及解决办法

%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

19630
来自专栏用户5521492的专栏

SpringMVC 工作原理

DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

7330
来自专栏编程之旅

移动端H5页面踩过的CSS坑

知乎有网友的评论是:这个问题通过css是无法解决的,即使解决了也是一种通过微调来实现的hack方法,因为文字在content-area内部渲染的时候已经偏移了,...

9140
来自专栏FunTester

httpclient 爬虫实例——爬取三级中学名

本人在使用 httpclient 的过程中,突然想起来可以爬取一些数据,比如全国的中学名。当然不是空穴来风,之前也做过这方面的爬虫,不过基于selenium 做...

7510
来自专栏我的前端路

移动端调试痛点?送你五款前端开发利器!

之所以写这个总结,还要从上周的一次移动端项目的 debug 说起。那天,测试小姐姐拿着自己的 iphone6s 过来找我,说页面打不开。我想:这怎么可能,我手机...

10400
来自专栏用户5521492的专栏

SpringBoot 实战 (十四) | 统一处理异常

如题,今天介绍 SpringBoot 是如何统一处理全局异常的。SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice...

8760
来自专栏搜云库技术团队

面试必备:Zack 大佬带您深入Spring MVC DispatchServlet 源码分析

之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》...

9560

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励