USB OTG的工作原理

2023-11-11

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设备默认为主机(Adevice),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)Adevice可在Bdevice上设置“HNP Enable”特性。
  (3)Bdevice断开上拉。
  (4)ADevice与上拉电阻相连,表明Adevice从属于从机。
  (5)Adevice给Vbus供电。
  (6)Bdevice检测Adevice的上拉。
  (7)复位/列举/使用Adevice。
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设备一样有两种通道:数据流通道和消息通道。数据流通道没有定义好的结果,而消息通道则有固定的结构。但是,每个通道都有一定的带宽、传输类型、传输方向和缓冲区大小。自供电设备配置一个默认的控制通道,由他提供该设备的配置和状态等信息。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

USB OTG的工作原理 的相关文章

  • PHP中如何有效防止跨站请求伪造(CSRF)

    我正在努力阻止CSRF https www owasp org index php Cross Site Request Forgery CSRF in php questions tagged php通过以下方式 A SESSION to
  • 是否有其他方法可以访问延迟自定义操作中的会话详细信息?

    我有一个自定义操作 需要获取以下值才能将某些部分从安装文件夹复制到 VS2010 文件夹 VS2010目录路径 VS2010DEVENV财产 安装路径 INSTALLLOCATION财产 为了提供足够的权限 我将自定义操作设置为Execut
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • 当用户使用相同的凭据登录两次时如何使用户会话无效

    我正在使用带有 Richfaces 和 Facelets 的 JSF 1 2 我有一个应用程序 其中包含许多会话范围的 Bean 和一些应用程序 Bean 假设用户使用 Firefox 登录 创建一个会话 ID A 然后他打开 Chrome
  • PHP session_destroy() 警告会话对象销毁失败[重复]

    这个问题在这里已经有答案了 我有这个 php 脚本 但在破坏会话时遇到问题 我收到这个警告 警告 session destroy 会话对象销毁失败 第 6 行 C xampp htdocs template nota finalizare
  • 修改不同Django用户的会话数据

    这可能不可能 但是当某些情况发生时 我想修改某些登录用户的会话数据 标记一些额外的逻辑需要在下次加载页面时运行 有没有办法通过用户 ID 访问用户的会话 tldr Query Session模型 然后通过修改匹配会话SessionStore
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • PHP 自定义会话处理程序问题 (PHP 7.1)

    我刚刚在计算机上从 PHP 7 0 迁移到 PHP 7 1 当前版本的 WAMP 的全新 全新安装 它似乎破坏了自定义会话处理程序中的某些内容 该处理程序应该将会话保存到数据库而不是使用文件系统 自定义处理程序类是 class db ses
  • ExpressJS & Websocket & 会话共享

    我正在尝试制作一个基于 Node js 的聊天应用程序 我想强制 websocket 服务器 ws 库 使用 ExpressJS 会话系统 不幸的是 我被困住了 用于获取会话数据的 MemoryStore 哈希值与 cookie 中的会话
  • ASP.net,将对象添加到会话变量

    我正在尝试跨回发将对象添加到会话变量中 我的代码类似于以下内容 Supply sup Supplies GetSupply supplyItemID Session CartObjects sup 现在 编译器会抛出一个错误 指出 运算符不
  • Session_set_save_handler 未设置

    我在设置 session set save handler 时遇到问题 我将 php ini 配置为 session handler user 这个简单的测试失败了 Define custom session handler if sess
  • 会话不会保留值并始终返回 null

    我有一个网站 它完全通过 HTTPS 即使有人尝试通过 HTTP 访问 他也会被重定向到 HTTPS 我正在使用表单身份验证 最近 我更改了一个设置以使站点更安全 之后会话不保留值并且始终返回 null 设置是
  • 随机 IIS 会话超时

    我有一个非常奇怪的问题 我正在寻求任何建议 我有一个运行在 IIS 6 上的 ASP NET 网站 它在大多数情况下运行良好 但是 会话似乎是随机清除的 因此 如果我登录 单击周围 我就会被随机启动 有时是在 30 秒 4 次点击之后 有时
  • OnPostAuthenticateRequest 中的 HttpContext.Current.Session 为 null

    这是一个n00b问题 也许你可以帮忙 当我在Application OnPostAuthenticateRequest事件 我无法查看Session since HttpContext Current Session一片空白 这是空的原因吗
  • 在 Laravel 中获取身份验证用户 ID

    如果用户登录 Laravel 5 1 我们可以访问用户 ID Auth user gt id 在我以前的应用程序 不是 laravel 中 当用户登录时 我正在为 userid 注册一个会话 我正在检查 SESSION user id 是否
  • session_regenerate_id(true) ajax 请求或快速刷新时的无效会话

    为了避免会话固定 我在每个 PHP 页面的开头使用以下代码 session set cookie params 900 domain 1 1 session start session regenerate id true 但如果页面刷新太
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • 用户可以更改 PHP 中 $_SESSION 的值吗?

    这是我的想法 我想知道是否可能 将信息存储在 PHP 的 SESSION 变量中有多安全 在 SESSION 变量中存储变量有两个潜在的 不安全 风险 另一个答案所描述的第一个称为 会话固定 这里的想法是 由于会话 ID 存储在 cooki
  • 如何终止会话或会话 ID (ASP.NET/C#)

    当用户单击注销按钮时 如何销毁会话 会话 名称 我正在 MSDN 上查看 ASP NET API Reference 它似乎没有太多信息 看来还是比较有限的 但我找不到 ASP NET 类等的任何其他页面 我努力了 Session Aban

随机推荐

  • 微信小程序中使用websocket

    实现多账号登录踢出效果 效果图 一 创建websocket监听方法 websocket js export const ws connect function id wx connectSocket 创建一个 WebSocket 连接 ur
  • 【探索AI潜能,连结现代通讯】相隔万里,我们与AI一同赏月。

    1 写在前面 近年来 AI得到了迅猛的发展 尤其是大模型的出现受到了广泛的关注和讨论 ChatGPT 文心一言等纷纷登场 可谓是百家争鸣 而AI大模型所延申出的子项目如AI绘画 AI写作等 在各自的领域展示出了惊人的潜力 最圆的月亮在中秋
  • Winform项目之学生成绩管理系统设计与实现(三)

    1 班级管理 private ClassService classService new ClassService public ListClassForm InitializeComponent this dgvListClass Row
  • 排序算法——交换排序(快排*)和归并排序

    上篇文章介绍了插入排序和选择排序 详见https mp csdn net postedit 97524495 3交换排序 所谓交换 就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 交换排序的特点是 将键值较大的记 录向序
  • Qt线程---链接信号与槽的connect

    connect用于连接qt的信号和槽 在qt编程过程中不可或缺 它其实有五个参数 只是一般使用默认值 在满足某些特殊需求的时候可能需要手动设置 1 Qt AutoConnection 默认值 使用这个值则连接类型会在信号发送时决定 如果接收
  • 用VUE实现登录页

    代码展示 1 头部实现
  • 动态、静态链接库的使用和讲解

    目录 一 静态库 静态库链接案例 二 动态库 动态库链接案例 三 两者的对比 大家有没有想过为什么要用链接库 其实使用链接库是为了你所在的公司以及你个人的方便 比如 实现资源共享 便于维护和升级 比较安全 一 静态库 1 静态库的命名格式
  • Unity XR 教程专栏引导

    下面对我出过的 Unity XR 开发教程做个分类 XR Interaction Toolkit 系列教程 该专栏介绍了用 OpenXR XR Interaction Toolkit 开发的基础用法 学习后能够对 XR 开发中的手部动画 移
  • WebStorm 2018 最新激活码 license server

    最新的激活码 可以用的 还是热的 将地址 http active chinapyg com 或者 http idea toocruel net 任意一个复制到License Server中
  • eclipse运行程序时只有run on server

    最近写jsp的程序比较多 写java程序时 发现一点击运行按钮就开始启动服务器了 这是因为没有写主函数的原因 注意这个问题
  • Django基础 one

    一 DRF视图 1 Django REST framework是一个建立在Django上的Web开发框架 可以快速开发REST API接口 2 它提供了序列化器Serialzier ModelSerializer 的定义 可以帮助我们简化序
  • mongodb教程_MongoDB教程

    mongodb教程 Welcome to the MongoDB tutorial index post MongoDB is one of the most widely used NoSQL database 欢迎使用MongoDB教程
  • 终于搞定了部分网站无法打开的问题

    最近机器出现一个烦人的问题 有些网站无法打开 最初以为是实验室网络的问题 后来发现别人的机器能打开 于是开始折腾自己的机器了 hosts文件没有异常 关掉杀毒软件 防火墙 症状依旧 在浏览器地址栏中敲入url回车之后 浏览器很快报错无法访问
  • 使用过滤器,格式化超过1万和1千的数字,保留一位小数

    filters handleCount count if count gt 10000 count count count 1000 10000 W else if count gt 1000 count count count 100 1
  • 如何查找出Linux使用的shell版本号

    一 找出正在使用的shell类别 有很多种方法可以找出目前正在使用的shell类别 最简单的方法是使用特殊的shell参数 1 通过特殊的shell参数 可以查找出正在运行的shell的PID 参数是只读的不能修改 下面的指令也可以显示正在
  • uni-app image懒加载

    1 uni app官方给的文档注意看 lazy load Boolean false 图片懒加载 只针对page与scroll view下的image有效 微信小程序 百度小程序 字节跳动小程序 飞书小程序 只针对page与scroll v
  • windows 安装 Linux 子系统教程 (wsl)

    目录 背景 安装 wsl 安装 php 背景 因为日常工作中有一些场景需要使用 Linux 环境 并且有时候需要写一些自动化脚本来方便提效 而 wsl 具备安装便捷 占用轻量 使用便捷的特性 所以 wsl 无疑是最好的选择 安装 wsl 使
  • cmake 返回当前路径的上层路径 string(REGEX REPLACE...)

    返回当前路径的上层路径 先上实现代码 string REGEX REPLACE learn basic 1 PROJECT INIT PATH PROJECT SOURCE DIR 说明 CMakeLists txt 所在路径 可由cmak
  • 3、Jupyter Notebook,Matplotlib的使用

    目录 1 Jupyter Notebook使用 1 1 界面启动 创建文件 1 1 1 界面启动 1 1 2 新建notebook文档 2 Matplotlib使用 2 1 实现一个简单的Matplotlib画图 2 2 Matplotli
  • USB OTG的工作原理

    USB OTG的工作原理 OTG补充规范对USB 2 0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作 OTG有两种设备类型 两用OTG设备 Dualrole device 和外设式OTG设备 Peripheral