一直以来在做安卓系统相关的嵌入式通讯(USB、BLE、网络、串口等),最近在讨论 OTG 问题的时候,对该规范又重新理解了一次,这里仅做一些概要和核心点说明,下方会给出具体 OTG 包含协议的参考链接,大同小异就不多赘述了。

1. 硬件接口

与传统的 4 线USB接口不同,OTG接口除了 VCC、GND、D+、D-之外还多了一根 ID 线,对支持 OTG 规范的设备来说,按照连接时的 ID 线状态分为 A 设备与 B 设备,这在传统 USB 中是不区分的。OTG 设备连接时 ID 线被拉低(低电平)代表通讯中的 A 设备,ID 线悬空(高电平)代表通讯中的 B 设备,其中 A 设备始终为总线活动提供 VBus,这点要尤其注意,在连接时就已经确定供电与被供电的设备。

2. USB 主从关系

与传统 USB 通讯不同,OTG 规范规定了符合其规范的设备可以使用 HNP (主机协商协议)来协商 A 设备和 B 设备的主从关系,也即 A 或者 B 都可以作为 USB 主机主动发起通信,相应另一方作为 USB 设备接受主机请求。如 B 通过协商后作主机时仍由 A 设备为总线供电。但是连接时 A 设备会默认作为 USB Host,B 设备作为 USB Slave。

3. OTG 中使用的协议

ADP(Attach Detection Probing):连接检测协议。USB 设备会周期性检测 USB 端口是否有设备插入,如果发起检测的是 A 设备,那么打开电源供电。若是 B 设备,会发送 SNP 会话请求,等待 A 的响应;

SRP(Session Request Protocol):会话请求协议。为了省电,A 设备可以在总线不活动的时候选择关闭 VBus 供电,若 B 设备需要电源来完成通讯,那么可以通过 D+、D-上的信号线脉冲与 A 设备完成 SRP 请求与回应,成功后 A 设备打开 VBus供电。

HNP(Host Negotiation Protocol):主机协商协议。如前所述,开始连接时 A 作为 Host 会枚举 B 型设备,枚举中收到 OTG 描述符以指示 B 是否支持这几种协议。若支持,A 会发送 Set_Feature 使能 B 设备的该特性以允许 B 型设备根据 HNP 在总线挂起时请求作为主机运行。

有关 OTG 中的 SRP 与 HNP 详细的可以参见下方博客:

USB OTG规范的SRP和HNP协议

有问题可随时给我评论或邮件,觉得有用就点赞吧~:-D

USB OTG 的进一步理解相关推荐

  1. Android USB OTG U盘读写相关使用最全总结

    Android USB OTG U盘读写相关使用最全总结 https://blog.csdn.net/qq_29924041/article/details/80141514 androidOTG ( ...

  2. 详述USB OTG发展及协议标准

    USB On-The-Go 扩大了USB 的应用领域,将USB 从传统的PC 与外设通讯的模式,扩展到移动电子和嵌入式领域中,抛开主机PC,实现通常的外设与外设之间点对点(Point to Point ...

  3. [usb]usb otg和host

    USB OTG 设备既能做主机,又能做设备. USB HOST是指主机. 当OTG 插到 HOST 上,OTG 的角色 就是 device. 当device 插到 OTG 上,OTG 的角色就是 HO ...

  4. USB OTG原理+ ID 检测原理

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...

  5. Memcpy, blockcopy的进一步理解

    Memcpy, blockcopy的进一步理解 using System; using System.Runtime.InteropServices; using System.IO; namespa ...

  6. USB OTG ID 检测原理

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...

  7. otg usb 定位_详解USB OTG工作原理及其应用

    原标题:详解USB OTG工作原理及其应用 1994年,Intel,Compaq等七家软硬件全球知名企业为了突破当时PC使用串口和并口传输速度的限制,成立了通用串行 开发者论坛( Implemente ...

  8. Java工作笔记-对反射的进一步理解

    目录 基本概念 代码与实例 基本概念 反射的进一步理解: 将类的各个组成部分封装为其他对象(将一个类的组成部分封装为其他对象) 就是反射. Java代码经历的三个阶段: 1. 写好代码.java后使用 ...

  9. 进一步理解CSS浮动与清除浮动

    本文主要探讨两个问题: 为什么CSS设置浮动会引起父元素塌陷 为什么设置clear:both能清除浮动,并撑开父元素. 起因 CSS的浮动,算是我在写网页时用的最多的属性之一.但要说我对浮动的了解程度 ...

最新文章

  1. 第十五届全国大学生智能车竞赛各分赛区赛道数量以及比赛系统数量
  2. 基于SSM的汽车销售管理系统
  3. 函数exit()详解:参数EXIT_FAILURE(是1),EXIT_SUCCESS(是0)
  4. STM32的SPI驱动代码
  5. VirtualApp技术黑产利用研究报告
  6. 【译】Engineering Security Through Coordination Problems
  7. docker实现宿主机和容器之间数据共享
  8. JS中数组Array的用法{转载}
  9. 我们来聊点成年人的话题!
  10. 张左峰的歪理邪说 之 大话Redmine插件
  11. 【图数据库】Neo4j
  12. 阿德莱德大学招聘博士后研究员
  13. padding不显示背景色_PS常用快捷键有哪些?小白职场必备快捷键,再也不担心被难到...
  14. github 检查代码质量_使用Gradle做Java代码质量检查
  15. 未来人在数据分析中的角色转变
  16. win10没有android驱动安装不了,WIN10 MTP USB驱动无法安装解决方法
  17. 0基础学HTML,从快捷方式(IntelliJ IDEA)入手,一步步就能看懂了!
  18. SpringBoot整合Mail
  19. 【Android】DatePicker时间选择器
  20. PostScirpt打印机驱动程序

热门文章

  1. 5月8日全国软考办专家做客51CTO谈:软考政策、考前复习方法及考场技巧
  2. 初探Golang(3)-数据类型
  3. FreeCodeCamp纳什维尔聚会的回顾
  4. 及时沟通的重要性_沟通与代码同样重要
  5. 深入理解了MySQL,你才能说熟悉数据库
  6. SQL手工注入入门级笔记(更新中)
  7. [No0000178]改善C#程序的建议1:非用ICloneable不可的理由
  8. 单交换机VLAN 配置和结果验证(51cto-o8)
  9. 使用air进行移动app开发常见功能和问题(二)
  10. Rails 3:提高Ajax应用速度