zoukankan      html  css  js  c++  java
  • 果壳中的USB(1)USB介绍

    了解 USB 标准

    初次接触 USB 不免让人一头雾水,而厚重的、多达 650 页的 USB 2.0 规范(USB 2.0 specification),无意中又会让人望而却步。实际上,这只是一系列 USB 标准的开始,此外还有 USB 类标准(USB Class Standards),比如人机界面设备类规范(HID Class Specification),该规范详细说明了键盘、鼠标这类属于人机接口设备(HID,Human Interface Devices)的常规操作——好在它只有 97 页。如果你要设计一个 USB Host,那就有三个主机控制接口标准(Host Controller Interface Standards)供你选择。这些可都没有在 USB 2.0 规范中详细说明哦。

    好在天可怜见,我们不必苦苦通读这部 USB 标准。一些章节是经由市场需求产生的,其他章节针对底层链路层,这部分通常是由 USB控制器IC 负责,而另一些则是针对主机(Host)和集线器(Hub)开发人员的。下面我们粗略的看下 USB 2.0 规范的章节列表并简要介绍各章内容要点。

    1 引言 包括 USB 产生的机缘和范围。本章中最重要的信息是 USB设备类规范,后续可作为参考查阅。
    无需阅读本章。
    2
    2 术语和缩略语 本章是不言自明的,对于任何标准而言都是必不可少的。 8
    3 背景 明确 USB 的目标是即插即用并为最终用户(而非开发人员)提供便捷。引入了低速,全速和高速速率范围以及直接来自市场的功能列表。
    也无需阅读本章。
    4
    4 体系结构概述 您可以在这里开始阅读。本章提供 USB 系统的基本概述,包括拓扑,数据速率,数据流类型,基本电气规格等。 10
    5 USB 数据流模型 本章开始讨论数据如何在 USB 总线上传输。它介绍了诸如端点和管道之类的术语,然后将本章的大部分内容集中在每种数据流类型(控制,中断,同步和批量)上。了解每种传输类型及其属性很重要,但对于 USB 新手来说却有些繁重。 60
    6 机械特性 本章详细介绍了 USB 的两个标准连接器。此处的重要信息是 A 型连接器面向下游(提供接口供外设接入,如 PC 上的 USB 插口),B 型连接器面向上游(连接外设,比如 USB 数据线)。除了想快速了解下连接器之外,您可以跳过本章,除非您打算制造 USB连接器和/或电缆(USB 数据线)。
    PCB设计人员可以在本章中找到标准尺寸信息。
    33
    7 电气特性 本章讲解底层电信号传输,包括线路阻抗,上升/下降时间,驱动器/接收器规格和位电平编码,位填充等。本章比较重要的内容是,如何通过使用电阻器偏置任一数据来识别设备速度,总线供电式设备,自供电式设备。除非您在芯片级层面设计 USB 收发器,否则可以跳过本章。良好的 USB 设备数据手册将详细列出总线阻抗匹配所需的电阻值。 75
    8 协议层 现在我们开始进入协议层。本章从字节级别描述了 USB 的数据包构成,包括同步,PID,地址,端点,CRC校验字段。一旦掌握了这些内容,数据就会进入下一个协议层,即 USB数据包。
    大多数开发人员仍然看不到这些较低的协议层,因为他们的 USB设备IC 负责解析处理这层协议。但是,了解状态的报告和握手是值得的。
    45
    9 USB 设备框架 这是整个规范中使用最频繁的一章,也是我不厌其烦打印并装订成册的唯一一章。本章详细说明了总线枚举和请求代码(设置地址,获取描述符等),它们构成了 USB 编程人员和设计人员所见过的最常见的协议层。
    本章必须详细阅读。
    36
    10 USB 主机硬件和软件 本章介绍与主机有关的问题。这包括框架和微框架的生成,主机控制器的要求,软件机制和通用串行总线驱动程序模型。除非您要设计主机,否则可以跳过本章。 23
    11 Hub 规范 详细介绍 USB集线器的工作原理,包括集线器的配置,事务拆分,集线器类的标准描述符等。除非是集线器设计人员,否则可以跳过本章。 143
     

    表1 USB 2.0 规范章节提要

    综上,现在我们可以根据需求开始阅读相关的那部分标准。如果你需要为 USB外设(USB peripherals)开发驱动软件,你只需阅读如下章节: 

    • 4 - 体系结构概述
    • 5 - USB 数据流模型
    • 9 - USB 设备框架
    • 10 - USB 主机硬件和软件
    外设硬件设计人员,只需阅读如下章节:
    • 4 - 体系结构概述
    • 5 - USB 数据流模型
    • 6 - 机械特性,和
    • 7 - 电气特性

    本系列读者对象:外设设计者/开发人员

    让我们明确以下事实:(1) 读者中的大部分都针对 USB外设 做开发,(2)读易行难,读标准没问题,但面对设备的具体实现依然举步维艰。据此,接下来的章节聚焦于开发一个 USB设备所需要的知识内容。这可以使您掌握 USB 及其点点滴滴,进而后续您可以研究特定于您的应用的某一具体问题。
     
    USB 1.1 标准在将高速率引入USB 2.0 之前已经足够复杂。为了更好地理解 USB 背后的基本原理,我们忽略了许多特定于高速设备的内容。

    USB(Universal Serial Bus)概述

    USB 1.1 支持两种速率,一种是全速模式(Full Speed),工作速率 12 Mb/s;一种是低速模式(Low Speed),工作速率 1.5 Mb/s。由于 1.5 Mb/s 的数据传输速率较低,所以产生的电磁干扰(EMI)也较小,这就降低了对铁氧体磁珠和电子部件的质量要求,进而降低了器件成本,比如,晶体时钟可以用更便宜的谐振器取代。USB 2.0 虽然还没有在主流的桌面计算机上看到曙光,但它已经将速率提高到了 480 Mb/s。480 Mb/s 被称为高速模式(High Speed),它还有一个竞争对手叫 Firewire 串行总线②。

    USB 数据速率: 

    • 高速:480 Mb/s
    • 全速:12 Mb/s
    • 低速:1.5 Mb/s

     

    通用串行总线由主机控制每条总线只能有一个主机。该规范本身不支持任何形式的多主设备组合。但是,OTG(On-The-Go)作为 USB 2.0 标准的补充规范,引入了主机协商协议(Host Negotiation Protocol),该协议允许两个设备协商主机的角色(OTG 多了一个 ID 线③)。这针对并仅限于单点对点连接,例如手机和个人管理器,而不是多个集线器(Hub),多个设备。USB主机负责执行所有事务并协调带宽。使用基于令牌的协议,可以通过多种传输方法发送数据。

     
    在我看来,USB 的总线拓扑多少还是有些局限性的。USB 初衷之一就是为了减少个人 PC 背部数据线的数量。苹果用户会说这个理念来自于苹果的 ADB 总线(Apple Desktop Bus),ADB 允许只用一根数据线就可以把键盘,鼠标等外设连接在一起(菊花链式连接)。

    但是,USB 使用的是分层星形拓扑(tiered star topology),类似于 10Base T 以太网。这样集线器就是必须的,进而增加了成本,增加了桌面上设备和数据线的数量。好在它并不像看起来那么糟糕,许多设备都集成了 USB 集线器。例如,您的键盘可能包含连接到计算机的集线器,所以您的鼠标和其他设备(数码相机)可以轻松插入键盘背面。内置集线器的设备还有很多,比如常见的显示器。

    相比于简单的菊花链式连接,分层星形拓扑也是有某些有点的。首先,任一设备的供电都可以被监控到,甚至某一设备发生过流(overcurrent )问题,也可以避免对其他 USB 设备造成影响。另外,高/全/低速设备都可以得到支持,只需要集线器过滤掉高速和全速的传输事务,因为这样低速设备就不会接收这些事务。

    任意时刻,任意 USB 总线最多可以挂接 127 个设备。还嫌少?想接更多设备只需增加一个端口/主机就可以了。早期 USB 主机带有两个端口,大部分制造商意识到了这个限制然后开始引入 4 个或 5 个端口主机卡,还有一个内部端口用来接硬盘。

    早期主机只有一个 USB 控制器,从而两个端口共享同一速率的 USB 带宽。随着带宽需求的提高,越来越多的多端口卡自带了 2 个或更多的控制器,允许端口拥有独立的信道。

    USB 主机控制器拥有自己的规范。USB 1.1 有两个主机控制器接口规范(Host Controller Interface Specifications),UHCI(Universal Host Controller Interface)和 OHCI(Open Host Controller Interface)。UHCI 由 Intel 开发,软件复杂,硬件便宜;OHCI 由 Compaq,Microsoft 和 National Semiconductor 联合开发,硬件复杂,软件简单。不言而喻,这部分内容关系到硬件/软件工程师。

    随着 USB 2.0 的引入,需要一个新的主机控制器接口规范来描述特定于 USB 2.0 的寄存器级别的详细信息,EHCI (Enhanced Host Controller Interface)应运而生。重要贡献者有 Intel,Compaq,NEC,Lucent 和 Microsoft,可以预见的是,他们一起致力于为我们提供一个接口标准,从而使得操作系统只需要实现一个新驱动就万事大吉了。让我们拭目以待吧。

    USB,顾名思义这是一个串行总线。它使用 4 根屏蔽线,其中两根是电源线(+5v & GND),另外两根是交叉差分数据信号线。USB 使用反向不归零(NRZI ,Non Return to Zero Invert)编码方案来发送数据,并附带同步字段的,用以同步主机接收器时钟。

    USB 支持即插即用,该功能的实现基于可动态加载/卸载驱动这一特性。用户只需把设备插入总线,主机将检测到这个插入动作,询问新插入的设备信息,并在极短的时间内加载适当的驱动程序——前提是操作系统上已经安装了设备驱动程序。终端用户不必关心设备具体的 IRQ,端口寻址,也不必重启计算机。一旦使用完毕,用户直接拔掉设备即可,USB 主机会检测到拔出事件并自动卸载相应驱动。

    操作系统根据设备的 PID/VID(Product ID/Vendor ID)的组合来加载合适的驱动。VID 由 USB 实施者论坛(Implementor's forum)提供并维护,厂家需要支付一定的费用。另外一些标准组织提供了额外的 VID,可用于教学、研究或业余研究使用等非商业应用。USB 实施者论坛尚未提供此服务。针对这种情况,您可能希望使用分配给系统制造商的 VID。例如,大多数芯片制造商拥有可用于您的芯片的VID / PID组合,而这种组合不以商业设备存在。其他芯片制造商甚至可以向您出售 PID,并将其与 VID 一起用于您的商用设备。

    USB 另一个需要关注的特性是其传输模式。USB 支持控制(Control)、中断(Interrupt)、批量(Bulk)、同步(Isochronous)四种传输模式

    稍后我们将介绍这四种传输模式,这里捎带提下同步传输模式,它允许设备占用一定带宽的情况下保证延迟,所以同步传输是音频或视频应用程序的理想选择,在这些应用程序中,线路拥塞可能会导致数据或帧的丢失。每种传输模式在错误检测和恢复,保证的延迟和带宽等方面为设计人员提供了折衷方案。

    附录

    ①原文地址:https://beyondlogic.org/usbnutshell/usb1.shtml

    ②FireWire:What Is a FireWire® Connection?

    ③OTG线与Micro数据线接线图区别以及OTG功能解析:https://www.lulian.cn/news/otg_gongneng_jiexi-cn.html

  • 相关阅读:
    ElasticSearch2.3.1环境搭建哪些不为人知的坑
    don't run elasticsearch as root.
    翻译 Asp.Net Core 2.2.0-preview1已经发布
    微信小程序与AspNetCore SignalR聊天实例
    .Net Core扩展 SharpPlugs简单上手
    Docker折腾手记-linux下安装
    C#3.0 扩展方法
    微软微服务eShopOnContainers示例之EventBusRabbitMq解析与实践
    C#3.0智能的编译器
    C#3.0导航
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13854783.html
Copyright © 2011-2022 走看看