精华内容
下载资源
问答
  • usb协议

    2007-11-15 10:00:28
    usb协议usb协议
  • USB协议

    2018-10-30 09:03:07
    USB协议起因简介标准历史USBUSB On-The-Go Supplement技术细节概述技术指标机械和电气标准编码方式软件架构端点HCDUSB 封包格式设备分类USB接头电源同类标准比较Storage人机接口设备(HID)扩展关注 通用串行总线...


    通用串行总线(Universal Serial Bus, USB)是连接外部设备的一个串口总线标准,在计算机上使用广泛,但也可以用在机顶盒和游戏机上,补充标准(On-The-Go)使其能够用于在便携设备之间直接交换数据。USB由Intel、Microsoft、Compaq、IBM、NEC等几家大厂商发起。

    起因

    Intel公司开发的通用串行总线架构(USB)的目的主要基于以下三方面考虑:

    1. 计算机与电话之间的连接:显然用计算机来进行计算机通信将是下一代计算机基本的应用。机器和人们的数据交互流动需要一个广泛而又便宜的连通网络。然而,由于目前产业间的相互独立发展,尚未建立统一标准,而USB则可以广泛的连接计算机和电话。
    2. 易用性:众所周知,PC机的改装是极不灵活的。对用户友好的图形化接口和一些软硬件机制的结合,加上新一代总线结构使得计算机的冲突大量减少,且易于改装。但以终端用户的眼光来看,PC机的输入/输出,如串行/并行端口、键盘、鼠标、操纵杆接口等,均还没有达到即插即用的特性,USB 正是在这种情况下问世的。
    3. 端口扩充:外围设备的添加总是被相当有限的端口数目限制着。缺少一个双向、价廉、与外设连接的中低速的总线,限制了外围设备(诸如电话/电传/调制解调器的适配器、扫描仪、键盘、PDA)的开发。USB是快速、双向、同步、动态连接且价格低廉的串行接口,可以满足PC机发展的现在和未来的需要。

    简介

    USB最初是由英特尔与微软公司倡导发起,其最大的特点是支持热插拔(Hot plug)和即插即用 (Plug&Play)。当设备插入时,主机枚举(enumerate)此设备并加载所需的驱动程序,因此使用远比PCI和ISA总线方便。
    USB速度比平行并联总线(Parellel Bus,例如EPP、LPT)与串联总线(Serial Port,例如RS-232)等传统电脑用标准总线快上许多。原标准中USB 1.1 的最大传输带宽为 12Mbps,USB 2.0 的最大传输带宽为 480Mbps。
    USB的设计为非对称式的,它由一个主机(host)控制器和若干通过hub设备以树形连接的设备组成。 一个控制器下最多可以有5级hub,包括Hub在内,最多可以连接127个设备,而一台计算机可以同时有多个控制器。 和SPI-SCSI等标准不同,USB hub不需要终结器。
    USB可以连接的外设有鼠标、键盘、gamepad、游戏杆、扫描仪、数码相机、打印机、硬盘和网络部件。对数码相机这样的多媒体外设USB已经是缺省接口;由于大大简化了与计算机的连接,USB也逐步取代并口成为打印机的主流连接方式。2004年已经有超过1亿台USB设备;到2005年显示器和高清晰度数字视频外设是仅有的USB未能染指的外设类别,因为他们需要更高的传输速率。

    标准

    USB Implementers Forum (USBIF)负责USB标准制订,其成员包括苹果电脑、惠普、NEC、Microsoft和Intel。
    USBIF于2001年底公布了2.0规范,之前还有0.9、1.0、和1.1,他们都是完全向后兼容的。On-The-Go Supplement to the USB 2.0 Specification的当前版本是1.0a。
    USB的连接器分为A、B两种,分别用于主机和设备;其各自的小型化的连接器是Mini-A和Mini-B,另外还有Mini-AB的插口。
    现标准中将UBS统一为USB分为:

    USB版本 USB标志 速率称号 传输速率 理论速度
    USB 3.2 超高速+ SuperSpeed+ 20Gbps 2560MB/s
    USB 3.1 Gen2 在这里插入图片描述 超高速+ SuperSpeed+ 10Gbps 1280MB/s
    USB 3.1 Gen1 在这里插入图片描述 超高速 SuperSpeed 5Gbps 640MB/s
    USB 2.0 Certified Hi-Speed USB.svg 高速 Hi-Speed 480Mbps 60MB/s
    USB 1.1 在这里插入图片描述 全速 Full Speed 12Mbps 1.5MB/s
    USB 1.0 在这里插入图片描述 低速 Low Speed 1.5Mbps 0.192MB/s

    历史

    USB

    USB 1.0 FDR: 1995年11月释出,同一年苹果公司发布IEEE 1394标准,就是著名的火线接口. [52RD.com]
    USB 1.0: 1996年1月释出。
    USB 1.1: 1998年9月释出。
    USB 2.0: 2000年4月释出。这一标准的主要特性就是高速(理论值480Mbps)。这是当前版本。
    USB 2.0: 2002年12月修订。加入三个不同速度标准, 允许所有USB2.0兼容所有标准的USB设备包括1.1和1.0。这使得标准能够向后兼容,但是增加了不察看标记来计算设备吞吐量的难度。
    USB 3.0: 2003
    USB 3.1: 2013
    USB 3.2: 2017

    USB On-The-Go Supplement

    USB On-The-Go Supplement 1.0: 2001年12月发布
    USB On-The-Go Supplement 1.0a: 2003年6月发布,即当前版本

    技术细节概述

    技术指标

    目前USB支持3种数据信号速率,USB设备应该在其外壳或者有时是自身上正确标明其使用的速率。USB-IF进行设备认证并为通过兼容测试并支付许可费用的设备提供基本速率(低速和全速)和高速的特殊商标许可。
    1.5 Mbit/s (183 KByte/s) 的低速速率,主要用于人机接口设备(Human Interface Devices ,HID)例如键盘、鼠标、游戏杆。
    12 Mbit/s (1.4 MByte/s)的全速速率, 在USB 2.0之前是曾经是最高速率,后起的更高速率的高速接口应该兼容全速速率。多个全速设备间可以按照先到先得法则划分带宽;使用多个等时设备时会超过带宽上限也并不罕见。所有的USB Hub支持全速速率。
    480 Mbit/s (57 MByte/s)的高速速率。 并非所有的USB 2.0设备都是高速的。高速设备插入全速hub时应该与全速兼容。而高速hub具有所谓Transaction Translator(事务翻译器)功能,能够隔离全速、低速设备与高速之间数据流,但是不会影响供电和串联深度。

    机械和电气标准

    类型 图片 接口说明 应用
    标准USB接口 在这里插入图片描述 USB标准A、 B插头 标准USB连接器触点 触点 功能(主机) 功能 (设备) 1 VBUS (4.75-5.25 V) 2 D- 3 D+ 4 接地 USB信号使用分别标记为D+和D-的双绞线传输,它们各自使用半双工差分信号并协同工作,以抵消长导线的电磁干扰,
    Mini USB接口 在这里插入图片描述 Mini USB A、 B连接器及其触点 Mini USB连接器触点 触点 功能 1 VBUS (4.4–5.25 V) 2 D− 3 D+ 4 ID 5 接地 mini USB除了第4针外,其他接口功能皆與标准USB相同。第4针成为ID,在mini-A上连接到第5针,在mini-B可以悬空亦可连接到第5针
    USB3.0 A 在这里插入图片描述 针脚定义见下表 9线,是usb2.0的10倍
    usb3.0 B 在这里插入图片描述 看到不较少
    Type C 在这里插入图片描述 双面对称 移动设备用的多

    编码方式

    USB标准采用NRZI方式(翻转不归零制)对数据进行编码。翻转不归零制(non-return to zero,inverted),电平保持时传送逻辑1,电平翻转时传送逻辑0。

    软件架构

    PCB mounting female USB connectors
    一个USB主机通过hub链可以连接多个设备。由于理论上一个物理设备可以承担多种功能,例如路由器同时也可以是一个SD卡读卡器,USB的术语中设备(device)指的是功能(functions)。集线器(hub)由于作用特殊,按照正式的观点并不认为是function。 直接连接到主机的hub是根(root)hub。

    端点

    设备/功能(和集线器)与管道pipe (逻辑通道)联系在一起,管道把主机控制器和被称为端点endpoint的逻辑实体连接起来。 管道和比特流(例如UNIX的pipeline)有着相同的含义,而在USB词汇中术语端点经常和管道混用,甚至在正式文档中。
    端点(和各自的管道)在每个方向上按照0-15编号,因此一个设备/功能最多有32个活动管道,16个进,16个出。 (出( OUT)指离开控制器,而入(IN)指进入主机控制器。) 两个方向的端点0总是留给总线管理,占用了32个端点中的2个。在管道中,数据使用不同长度的包传递,端点可以传递的包长度上限一般是2^n字节,所以USB包经常包含的数据量依次有8、16、32、64、128、256、512或者1024 字节。

    一个端点只能单向(进/出)传输数据,自然管道也是单向的。每个USB设备至少有两个端点/管道:它们分别是进出方向的,编号为0,用于控制总线上的设备。按照各自的传输类型,管道被分为4类:
    控制传输——一般用于短的、简单的对设备的命令和状态反馈,例如用于总线控制的0号管道。
    等时传输——按照有保障的速度(可能但不必然是尽快地)传输,可能有数据丢失,例如实时的音频、视频。
    中断传输——用于必须保证尽快反应的设备(有限延迟),例如鼠标、键盘。
    批量传输——使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的保证)传输数据,例如普通的文件传输。
    一旦设备(功能)通过总线的hub附加到主机控制器,主机控制器就给它分配一个主机上唯一的7位地址。主机控制器通过投票分配流量,一般是通过轮询模式,因此没有明确向主机控制器请求之前,设备不能传输数据。
    为了访问端点,必须获得一个分层的配置。连接到主机的设备有且仅有一个设备描述符(device descriptor),而设备描述符有若干配置描述符(configuration descriptors)。这些配置一般与状态相对应,例如活跃和节能模式。 。每个配置描述符有若干接口描述符(interface setting),用于描述设备的一定方面,所以可以被用于不同的用途:如一个相机可能拥有视频和音频两个接口。接口描述符有一个缺省接口设置(default interface setting)和可能多个替代接口设置(alternate interface settings),它们都拥有如上所述的端点描述符。一个端点能够在多个接口和替代接口设置之间复用。

    HCD

    包含主机控制器和根HUB的硬件为程序员提供了由硬件实现定义的接口主机控制器设备 (HCD)。而实际上它在计算机是就是端口和内存映射。
    1.0和1.1的标准有两个竞争的HCD实现。康柏的 开放主机控制器接口 (OHCI)和Intel的通用主机控制器接口 (UHCI) 。VIA威盛采纳了UHCI;其他主要的芯片组多使用OHCI。它们的主要区别是UHCI更加依赖软件驱动,因此对CPU要求更高,但是自身的硬件会更廉价。它们的并存导致操作系统开发和硬件厂商都必须在两个方案上开发和测试,从而导致费用上升。因此 USB-IF在USB 2.0的设计阶段坚持只能有一个实现规范,这就是扩展主机控制器接口 (EHCI)。因为EHCI只支持全速传输,所以EHCI控制器包括四个虚拟的全速或者慢速控制器。这里同样是 Intel和Via使用虚拟UHCI,其他一般使用OHCI控制器。
    某些版本的Windows上,打开设备管理器,如果设备说明中是否有“增强”(“Enhanced”),就能够确认它是2.0版的。而在Linux系统中,命令lspci能够列出所有的PCI设备,而USB会分别命名为OHCI、UHCI或者EHCI。
    列出为16位地址的为EHCI,32位的为OHCI
    命令lsusb能够显示所有USB设备的信息。命令dmesg能够显示OS启动时关于USB设备的信息。

    USB 封包格式

    USB 的封包格式和早期的internet封包格式非常相似,要了解USB連接原理就一定要先了解封包格式。
    USB packet format:

    OFFSET TYPE SIZE VALUE
    0 HeaderChksum 1 Checksum of the header by adding the header bytes, excluding the header checksum. [
    1 HeaderSize 1 Size of the header, including strings if applicable.
    2 Signature 2 Signature: 0x1234
    4 VendorID 2 USB Vendor ID
    6 ProductID 2 USB Product ID
    8 ProductVersion 1 Product version
    9 FirmwareVersion 1 Firmware version
    10 UsbAttributes 1 USB attributes:Bit 0: If set to 1, the header includes all three strings: language, manufacture, and product strings; if set to 0, the header does not include any strings. Bit 2: If set to 1, the device can be self powered; if set to 0, it cannot be self powered.Bit 3: If set to 1, the device can be bus powered; if set to 0, it cannot be bus powered. Bits 1 and 4 … 7: Not used.
    11 MaxPower 1 Maximum power the device needs in units of 2 mA.
    12 Attribute 1 Device attributes: Bit 0: If set to 1, the CPU speed runs at 24 MHz; if set to 0, the CPU speed runs at 12 MHz.Bit 3: If set to 1, the device’s EEPROM can support 400 MHz; if set to 0, it can not support 400 MHz.Bits 1, 2 and 4 … 7: Not used.
    13 WPageSize 1 Maximum I2C write page size
    14 DataType 1 This value defines if the device is application EEPROM or device EEPROM. 0x01: Application EEPROM 0x02:Device EEPROM Other values are invalid.
    15 RpageSize 1 Maximum I2C read page size. If the value is zero, the whole PayLoadSize is read in one I2C read setup.
    16 PayLoadSize 2 Size of the application, if using EEPROM as an application EEPROM; otherwise the value is 0.
    0xxx Language string 4 Language string in standard USB string format if applicable.
    0xxx Manufacture string Manufacture string in standard USB string format if applicable.
    0xxx Product string Product string in standard USB string format if applicable.
    0xxx Application Code Application code if applicable.

    设备分类

    依附在总线上的设备可以是需要特定的驱动程序的完全定制的设备,也可能属于某个设备类别。这些类别定义了某种设备的行为和接口描述符,这样一个驱动程序可能用于所有此种类别的设备。一般操作系统都为支持这些设备类别,为其提供通用驱动程序。
    设备分类由USB设计论坛设备工作组决定,并分配ID。
    如果一个设备类型属于整个设备,该设备的描述府bDeviceClass的域保存类别ID;如果它这是设备的一个界面,其ID保存在界面描述府的;bInterfaceClass域。他们都占用一个字节,所以最多有253种设备类别。(0x00和0xFF保留)。当bDeviceClass 设为0x00,操作系统会检查每个接口的bInterfaceClass以确定其类别。
    每种类别可选支持子类别(SubClass)和协议子定义(Protocol subdefinition)。这样可以用于主设备类型的不断修订。
    常用设备类别和ID有:

    0x00 保留值
    0x01 USB音频设备, 像声卡这样的设备。
    0x03 人机接口设备, 键盘鼠标等
    0x06 静止图像捕捉设备,用在USB上的Picture Transfer Protocol。
    0x07 USB打印设备, 打印机。
    0x08 USB大容量存储设备 keydrive, 可移动硬盘, MMC卡、SD卡、CF卡读卡器, 数码相机, 数字音频播放器等。 这一类设备显示成一个文件系统。
    0x09 USB hubs。
    0x0A USB通信设备 (“CDC”) used for 调制解调器(包括软件调制解调器), 网卡 (交叉电缆), ISDN, 传真。
    0x0E USB视频设备, 类似摄像头,电视卡的动态图像捕捉设备。
    0xE0 无线控制器,如蓝牙dongles。
    0xFF 定制设备。

    USB接头

    接头是由USB协会所指定,接头的设计一方面为了支持众多USB的基本需求,另一方面也避免以往许多类似串行接头所出现的问题。
    接头设计的相当耐用。许多以往使用的接头较脆弱,即使受力不大,有时针脚或零件也会折弯甚至断裂。而USB接头的金属导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此USB接头不论插拔,都不容易受损。
    不可能把USB接口插错。这是防呆设计,方向相反的插头不可能插到插座里,方向正反很容易感觉出来。
    接头能相对便宜地大量生产。
    在USB网络中,接头被强制使用定向拓扑。USB不支持环形网络,因此不兼容的USB设备之间接口也不兼容。不像其他通讯系统(如RJ-45电缆)不能使用转换插头,防止环形USB网络产生。

    适度的插拔力。USB电缆和小型USB设备能被插口卡住(不需要夹子、螺丝或者其他接口那样的锁扣)。允许通过适当力量插拔,连接器要方便困难环境和残障人士使用。
    由于接头的构造,在将USB插头插入USB座时,插头外面的金属保护套会先接触到USB座内对应的金属部份,之后插头内部的四个触点才会接触到USB座。金属保护套会连接到系统的地点,提供路径使静电可以放电,避免因静电通过电子零件而造成损坏。

    电源

    USB 接头提供一组5伏特的电压,可作为相连接USB设备的电源。实际上,设备接收到的电源可能会低于5V,只略高于4V。USB规范要求在任何情形下,电压均不能超过5.25V;在最坏情形下(经由USB供电HUB所连接的LOW POWER设备)电压均不能低于4.375V,一般情形电压会接近5V。
    一个 USB 的根集线器最多只能提供 500 mA 的电流。如此的电流已足以驱动许多电子设备,不过连接在总线供电HUB的所有设备,需要共享 500mA 的电流额度。一个由总线供电的设备可以使用到它所连接埠上允许输出的所有电源。
    总线供电的HUB可以将电源供给连接在 HUB 上的所有设备,不过 USB 的规范只允许总线供电的 HUB 下游串接一层总线供电的设备,因此,总线供电的 HUB 下游不允许再串接另一个由总线供电的 HUB。许多 HUB 有外加电源,因此可以提供电源给下游的设备,不会消耗总线上的电源。若设备需要的电压超过5V,或是需要电流超过500mA,都需要使用外加电源。

    相对于之前其他沟通介面仅能传递讯息资料,高电压USB插槽本身还能提供5V(伏特)的主动电压,及0.5A(安培)的电流,因此对于一些小型设备而言,可以不必再外接电源供应装置,就能利用来自USB插槽的电力顺利运作。利用这特点,也有厂商开发出适当的排线,将USB拿来当作供电插座般使用,例如作为移动电话的充电器,或是提供小型电灯的电力需要,反而与原本用来连接电脑用的主要用途无关。

    同类标准比较

    Storage

    闪存盘,典型的USB海量存储设备
    USB 使用 USB mass storage device class标准实现Storage设备的连接.它最初被用于传统的磁盘和光盘驱动,但是现在已经扩展到支持大量不同的设备.USB不能用于计算机内部存储设备的基本总线: 像 ATA (IDE), Serial ATA (SATA), 和 SCSI.
    然而, USB有一个非常重要的优点,那就是它能够在不关闭计算机的情况下动态的安装和删除USB设备,这使它成为一个有用的外部设备.今天,大量的生产商提供便携式USB移动硬盘或者一个空的,能够兼容内部驱动的盒子.这些内部驱动通常提供一个转换驱动接口,用以转换IDE, ATA, SATA, ATAPI, 或者 SCSI 到USB port。对于用户来讲,就像连接了一个内部的驱动。其他的竞争标准是eSATA 以及 Firewire.

    人机接口设备(HID)

    USB没有完全取代AT键盘接口和PS/2键盘鼠标接口,但是事实上现在所有主板制造商都提供至少多于一个USB接口。到2004年,大多数新主板都配有多个高速USB 2.0接口,尽管有些是内置在主板上的,需要使用电缆连接到位于主机前面板或者侧面的接口。同样的对游戏操纵杆,手柄,写字板和其他人机接口设备的支持逐渐从原声卡上的“MIDI/游戏”接口和PS/2接口上转移到USB上。现在带着USB转PS/2接口转换插头的USB键盘鼠标相当普遍,他们可以使用任意2种接口之一。
    使用专用键盘鼠标的苹果电脑1999年一月也开始使用USB接口。最初的IPOD只有IEEE1394接口,后来在3G的IPOD,苹果电脑开始支持USB2.0,但是还不能用作充电,现在的IPOD,已经全面兼容USB与IEEE1394,两者均可充电以及连接计算机。

    扩展

    PictBridge标准可以使得消费者使用的图形设备彼此互通(例如数码相机直接通过打印机输出)。一般它使用USB做为其底层通信协议。

    关注

    这一篇主要汇总一些信息。
    在这里插入图片描述

    展开全文
  • USB协议 USB协议 USB协议 USB协议 USB协议 USB协议
  • USB 协议

    2018-11-24 23:35:05
    主机的设备通过一种基于令牌的协议来共享 USB 总线带宽。 USB 总线允许设备连接、配置、 使用以及移除,但是这些操作不会影响其他与 USB 主机相连的设备。 2 usb-fs 2.1 功能描述 USB-FS 2.0 全速/低速模块通过...

    1.简介

    USB 是一种总线,它可以支持一台主机与一系列不同从机之间交换数据。这些连接到 USB
    主机的设备通过一种基于令牌的协议来共享 USB 总线带宽。 USB 总线允许设备连接、配置、
    使用以及移除,但是这些操作不会影响其他与 USB 主机相连的设备。
    2 usb-fs

    2.1 功能描述

    USB-FS 2.0 全速/低速模块通过状态寄存器、控制寄存器以及内存中的数据接口与处理
    器核心进行通信。

    2.2 数据结构

    设备操作的功能是在内存映像中传输或者接收一个在 USB 总线上的请求。为了有效管理
    与 USB 端点的通信, USB-FS 在内存中实现了一个 BDT 表项(缓冲区描述符)。
    2.2.1 缓冲区描述符表

    为了高效地管理端点之间的通信, USB-FS 在系统内存中实现了一个称之为缓冲区描述
    符表的数据结构。BDT 表占据系统内存的一个连续的 512 字节空间,该空间的起始地址由 BDT
    页面寄存器指向。每个端点的方向都需要 2 个 8 字节的缓冲区描述符实体。因此一个具有
    16 个双向端点的系统一共需要 512 字节的内存空间用来实现 BDT。端点的每个方向上的 2
    个缓冲区描述符实体分别为 EVEN BD 以及 ODD BD。这样允许控制器在操作其中一个 BD 的同
    时 USB-FS 操作另外一个 BD。采用双缓冲区描述符的方法允许 USB-FS 很容易地以最大的速
    度传输从 USB 总线上得到的数据。
    软件 API 在需要时通过更新 BDT 来智能地为 USB-FS 管理缓冲区。过这样 USB-FS 可以高
    效地管理数据的发送与接收,同时微控制器负责处理和通信以及其他的功能性程序开销。因
    为缓冲区是由 USB-FS 与微控制器所共享的,因此需要有一个简单的信号量机制来决定允许
    谁来更新 BDT 以及系统中的缓冲区。当为控制器正在操作 BD 实体是,信号量比特 OWN 位被
    清 0。当 OWN 位为 0 时,微处理器可以读写 DB 实体以及系统内存中的缓冲区。当 OWN 位为 1
    时,说明 USB-FS 具有对 BD 实体以及系统中缓冲区操作权,此时 USB-FS 拥有对 BD 表项以及
    相应的数据缓冲区的读写权限,而微控制器不能对该表项以及相应内存中的缓冲区进行任何
    操作。 BD 描述符具有指向内存中缓冲区地址的指针,这种间接地址机制可以同下图中看出
    来。

    2.2.2 USB作为目标设备或者主机

    不论是在哪种模式下, USB 主机或者 USB 目标设备,都是使用相同的数据路径以及缓冲
    区描述符进行数据的发送与接收。正式因为这个原因,一种被称之为基于 USB-FS 内核的命
    名法用来表述 USB-FS 内核与 USB 总线上数据传输的方向。
     2.3 缓冲区描述符表寻址

    当通过 USB-FS 或者为控制器来访问端点数据时,理解缓冲区描述符表的寻址机制是很
    有用的。一些要点如下:
    (1)缓冲区描述符表占据整个系统内存的 512 字节。
    (2) 16 个双向端点完全可以通过整个 512 字节来存储
    (3)每个端点的一个方向需要 16 个字节。
    (4)如果应用程序中的端点少于 16 个,那么可以通过更少的空间(少于 512 字节)来
    实现 BDT
    (5) BDT 页面寄存器指向 BDT 表的起始地址
    (6) BDT 表必须被定位在系统的一个连续 512 字节区间。
    (7)所有端点的 TX 以及 RX 描述符表最好通过索引的方式存到 BDT 表内,这样 USB-FS
    以及微控制器可以很轻松的对其进行访问
    当一个开启某个端点的 USB 令牌到达时, USB-FS 通过其内部集成的 DMA 控制器来查询
    BDT 表。 USB-FS 通过对相应端点的 BD 实体来决定他是否拥有该描述符表项以及该表项在内
    存中的缓冲区。
    为了计算实体在当前 BDT 表中的位置, BDT_PAGE 寄存器将当前的 endpoint(令牌命令
    的端点地址) 、 TX 字段、 ODD 字段连在一起组成一个 32 比特的地址。这种地址机制由下表
    所示。

    2.3缓冲区描述符格式

    2.3.1 USB-FS控制器通过存储在BD中的信息

    (1)谁正在使用内存中的缓冲区
    (2)包标识符为 DATA0 还是 DATA1
    (3)当完成 USB 数据包时,解除对该缓冲区描述符及相应内存的所有
    (4)非地址自动增加(FIFO 模式)
    (5)使能同步数据触发功能
    (6)需要发送或者接受多少数据
    (7)缓冲区在系统内存中的那个位置
    2.3.2 为控制器通过存储在BD中的信息决定以下事件

    (1)谁正在使用内存中的缓冲区
    (2)包标识符为 DATA0 还是 DATA1
    (3)接收到的 USB 令牌包的标识符
    (4)缓冲区在系统内存中的哪个位置

    数据缓冲区描述符(BD)
     

     

     

     3.USB传输

    当 USB-FS 发送护着接收数据时,它将通过 45.3.3 节给出的计算地址机制来计算 BDT
    的地址。
    如果 OWN =1,则进行下列操作
    (1) USB-FS 读取 BDT 表;
    (2) SIE 通过 DMA 向由 BD 计算得到的地址存取数据;
    (3)当令牌完成时, USB-FS 更新当前的 BDT 表。如果 KEEP=0,将 OWN 位清 0;
    (4) STAT 寄存器被更新,并且 TOK_DNE 中断标志位置 1;
    (5)当微控制器处理 TOK_DNE 中断时,会从状态寄存器中读取有关要处理端点的所有
    信息
    (6)于此同时,微控制器重新开辟一个 BD 保证后续的数据能被正确存取在当前端点,
    然后开始处理最后的那个 BD。

    4.USB和主机操作模式

     主机模式逻辑语序像电子摄像机或者掌上电脑等具有 USB 主机控制器。 OTG 逻辑增加了
    一个允许 OTG 主机协商和会话请求(HNP 和 SRP)接口的软件实现。 USB 主机模式允许一个
    类似于电子摄像机的外设直接与一个具有 USB 功能的打印机相连,可以轻松的打印电子照片
    而不用将其上传到 PC 机。在掌上电脑应用中,一个具有 USB 功能的键盘/鼠标可以直接连接
    到掌上电脑来实现多样的轻松的交互。
    主机模式主要使用于手持设备以便其与简单的 HID 设备例如打印机或者键盘进行简单
    的连接,它不适用于基于 PC 机主板具有主机控制器符合 OHCI 或者 UHCI 标准的功能实现。
    USB-FS 作为一个 USB 主机控制的功能不能很好的被 Windows98 操作系统支持。USB 主机模式
    允许批量、同步、中断和控制传输。块数据传输几乎使用所有的 USB 总线带宽。提供支持的
    ISO 传输,但是 ISO 数据流的个数由处理器处理来自于 SIE 的令牌的潜能所限制,并且 ISO
    只是被部分的支持。必须安装相应的客户驱动才能支持主机模式操作。
    设置 CTL 寄存器的 HOST_MODE_EN 位为 1 可以开启主机模式, USB-FS 内核只能工作与外
    设或者主机模式,它不能同时工作于两个模式。当 HOST_MODE 被开启时,只有端点 0 被使用,
    所有的其他端点必须使用软件的方法禁止掉

    5example

    5.1使能主机模式并且检测到一个连接上的设备:

    1.使能主机模式(CTL[HOST_MODE_EN] = 1)。使能下拉电阻,禁止上拉电阻。 SOF 发生
    器开始工作,并且 SOF 计数器被写入的值为 12000。通过向 USB 使能为写 0(CTL[USB_EN]=0)
    来禁止 SOF 数据包的产生这样可以消除 USB 噪声。
    2.使能 ATTACH 中断(INT_ENB[ATTACH]= 1)。
    3.等待 ATTACH 中断(INT_STAT[ATTACH])。通过 USB 目标设备的上拉电阻来改变 DPLUS
    或者 DMINUS 的状态从 0 变为 1(SE0 到状态 J 或者 K)。
    4.检查控制寄存器中 JSTATE 和 SE0 的状态。如果连接到的设备为低速设备(JSTATE 位
    为 0),然后设置地址寄存器中低速标志位为 1(ADDR[LS_EN]=1),并且设置端点 0 控制寄存
    器的没有 HUB 位为 1(EP_CTL0[HOST_WO_HUB] = 1)。
    5.使能复位至少等待 10ms 钟(CTL[RESET]=1)。
    6.使能 SOF 数据包以防止连接上的设备从运行状态状态挂起。
    7.通过发送框架质量开始设备枚举过程,设备框架工作包会发送到连接的设备的默认控
    制管道

    5.2 与接入设备完成控制传输
    1.完成发现一个连接设备的所有步骤;
    2.将端点控制寄存器设置为双向控制传输 EP_CTL0[4: 0]=0x0d;
    3.在内存缓冲区内放置一份设备框架剪力命令的拷贝。
    4.初始化当前 TX EP0 BDT 以发送 8 字节的设备框架命令数据(如, GET DEVICE
    DESCRIPTOR)。
    设置 BDT 命令字为 0x00080080(字节数为 8, OWN 位为 1);然后设置 BDT 缓冲区地址域
    为该 8 字节命令缓冲区的开始地址。
    5.设置 USB 地址为地址寄存器中的值(ADDR[6:0])。 USB 总线复位后, USB 设备地址为
    0,通过设置地址设备框架命令会将其设置为其他的值。
    6.向端点 0 机目标设备的默认控制管道的令牌寄存器写入 SETUP(TOKEN=0xD0)。从而
    在总线上发送 SETUP 令牌,并紧跟一个数据包。该数据包传输结束后,在 BDT 的 PID 域返回
    一个握手包。想 BDT 写入后,会产生令牌结束中断(INT_STAT[TOK_EN]), 结束 SETUP 事务
    的设置阶段。
    7.开始 SETUP 事务的初始化数据阶段(例如得到 GET DEVICE 描述符命令的数据),在存
    储器中为发送建立缓冲区。
    8.初始化当前 TX 端点 0 的 BDT 用于传输数据。首先将 BDT 命令字设为 0x001000C0(字
    节数为 64, OWN 位为 1, DATA 触发为 Data1),然后,将 BDT 缓冲区地址域设置为数据缓冲
    区的开始地址。
    9.向目标设备默认控制通道的端点 0 写入 IN 或这 OUT 令牌, IN 令牌为 GET DEVICE
    DESCRIPTOR 命令(TOKEN=0x90)。该初始化 IN 令牌在总线上,紧跟一个从设备到主机的数
    据包。当数据包完成之后, BDT 被写入并且产生一个令牌完成中断(INT_STAT[TOK_DNE])。
    对于控制传输,一个单独的包数据完成 SETUP 事务的数据阶段。
    10.开始 SETUP 事务的状态阶段,在存储器中建立一个用于接收或发送 0 长度数据包的
    缓冲区。
    11.初始化端点 0 的 BDT 用于发送状态数据。首先,将 BDT 命令设为 0x00000080(字节
    数为 0, OWN 位为 1,数据触发为 Data0);然后,将 BDT 缓冲区地址域设置为数据缓冲区的
    开始地址。
    12.想目标设备默认通道的端点 0 的令牌寄存器写入 IN 或者 OUT 令牌,一个 GET DEVICE
    DESCRIPTOR 命令的 OUT 令牌(TOKEN=0x10)。这将在 USB 总线上初始化一个 OUT 令牌紧跟一
    个 0 字节长度的从主机到设备的数据包。当数据包完成之后,BDT 表将会写入设备的握手包,
    并且产生一个令牌完成中断(INT_STAT[TOK_DNE]),这就结束了 SETUP 事务的数据阶段
    5.3 目标设备发送一个全速块数据

    1.完成发现接入设备的所有步骤并配置接入的设备。向 ADDR 寄存器写入目标设备的地
    址。典型情况是 USB 总线上只有一个设备。所以 ADDR 值为 0x01 并保持不变。
    2.设置 ENDPT0 寄存器为 0x1D,使能带握手的发送和接受。
    3.设置缓冲区描述符表中端点 0 的偶数发送项为最多发送 64 字节。
    4.设置目标 USB 设备地址为地址寄存器的值(ADDR[6:0])。
    5.将 TOKEN 寄存器设置为 OUT,这将触发 OTG 模块发送令牌和数据。
    6.设置缓冲区描述符表中端点 0 的奇数发送项为最多发送 64 字节。
    7.跟第 4 步一样,想 TOKEN 寄存器写入 OUT 令牌。同时可以有两个令牌同时入队,这样
    可以使用双缓冲机制以达到最大的吞吐量。
    8.等待 TOK_DNE 中断,这说明 BDT 的其中一个已经释放给微控制器,并且该传输已经完
    成。如果目标设备发送 NAK,那么 USB-FS 会继续在没有微控制器的干预之下重试已定义的
    传输,除非 EP0 控制寄存器的 RETRY_DIS 位被置位而禁止重试。如果重试禁止为被置位,那
    么握手信号(ACK, NAK, STALL 或者 ERROR(0xf))会被重新写入到 BDT 的 PID 字段。如果
    发生了一个 STALL 中断,那么未处理的数据包会被立刻出队并且在目标设备的错误条件会被
    清除。如果产生一个 RESET 中断(处于 SE0 状态至少 2.5us),那么目标设备会被移除。
    9.产生令牌完成中断(TOK_DNE)之后,可以检查 BDT 并且返回到第 2 步。
    6 OTG操作模式

    USB-OTG 内核体统传感器与控制器来使能 On-The-Go(OTG)操作。这些传感器被 OTG
    的 API 函数使用用来实现主机协商协议(HNP)和会话请求协议(SRP)。提供 API 函数调用
    用来提供访问 OTG 协议的控制信号,包括在设备应用中的 OTG 能力。下面的状态机显示了涉
    及来自 USB 电缆两端的 HNP 以及 SRP 协议的 OTG 操作
     

    展开全文
  • Usb协议

    2016-05-24 09:12:03
     USB(Universal Serial Bus)具有传输速率快,可热插拔等显著特点,应用已经十分广泛,目前的相当多的设备已经支持最新的USB3.0协议。理论上USB1.1的传输速度可以达到12Mbps/秒,而USB2.0则可以达到速度480Mbps/秒,...
    1.概述
    
        USB(Universal Serial Bus)具有传输速率快,可热插拔等显著特点,应用已经十分广泛,目前的相当多的设备已经支持最新的USB3.0协议。理论上USB1.1的传输速度可以达到12Mbps/秒,而USB2.0则可以达到速度480Mbps/秒,并且可以向下兼容USB1.1。USB2.0三种模式,分别为Low-Speed,Full-Speed和High_Speed,这三种模式的参数和应用场景如下:
    USB2.0协议笔记【1】

    2.USB系统
        USB系统由USB Host和USB Device组成。每一个USB system只能存在一个USB Host。USB device分为USB Hub和Functions两种。其中USB Hub下可以挂载Functions设备。有一种特殊的USB device称为Compound Device,这种设备是一个Hub下内部固定挂载了几个Function设备(例如USB摄像头)。
    USB系统的总线拓扑结构如下:
    USB2.0协议笔记【1】

    可以看到,一个USB System只能有一个USB Host。一个USB System最多只能有7层结构,且最下面一层只能挂载Function Device而不能挂载Hub Device。特殊的Compound Device占据两层(图中为6、7)。在一条通信路径上,Host和Device之间最多只能存在5个USB Hub Device。

    3.USB2.0的结构概述和一些概念
    (1)电气方面。分为三种USB设备:Low-Speed(1.5Mb/s),Full-Speed(12Mb/s)和High-Speed(480Mb/s)。USB接线如下:
    USB2.0协议笔记【1】
    (2)Power
    分为bus-powered devices和self-powered devices两种。bus-powered devices依赖总线进行供电,self-powered devices有自己的电源。
    (3)Bus Protocol
    在USB System中,数据传输总是由Host发起。Host和Device的传输路径称为Pipe,分为Stream pipe和Message pipe,Stream pipe 没有USB协议定义的数据结构,Message pipe上传输的则是USB协议定义的数据结构。
    (4)Data Flow Types
    四种基本的Transfer:
    Control Transfers:用于对USB Deviece的Configuration和control。
    Bulk Data Transfers:用于批量传输等实时性要求不高的操作。
    Interrupt Data Transfers:用于实时的可靠的数据传递,如鼠标、游戏手柄等。
    Isochronous Data Transfers:相当于流传输,不可靠,典型应用如语音传输。

    4.USB Data Flow Model
    简单的USB数据流向如下:
    USB2.0协议笔记【1】
    一个有不同速率的USB设备的USB System的数据传输说明:
    USB2.0协议笔记【1】
    USB Host和Device之间数据传输的详细说明图如下:
    USB2.0协议笔记【1】
    对应应用软件来说,传输的模型可以简化如下:
    USB2.0协议笔记【1】
    可以把USB Device抽象成一些Endpoint的集合,这些Endpoint来实现USB Device的Interface。

    下面讲述一些描述USB Data Flow的关键概念。
    (1)Device Endpoints
    是Host和Device之间的communication flow的端点。每一个USB Logical Device就是由这些Endpoint组成的。每一个Endpoint都有唯一的endpoint number和配置决定的数据传输方向,只支持单工传输。可以这样简单描述:Address+Endpoint+Direction。
    当Endpoint Number为0时,这个Endpoit用来作为default control,Host可以通过这个Endpoint来初始化USB设备,可以在这种Endpoint上建立Default Control Pipe。
    Endpoint number不为0的这些Endpoint必须在设备配置完成后才能使用。

    (2)Pipes
    Pipe指的是Host Software和USB Device的endpoint之间建立的连接。主要有两种Pipe:
    • Stream: Data moving through a pipe has no USB-defined structure
    • Message: Data moving through a pipe has some USB-defined structure
    ----Stream Pipes:
    支持bulk,isochronous 和interrupt transfer这3中Transfer。
    ----Message Pipes:
    在Message pipe上传输分为3个stage:
    1.Request from host
    2.Data transfer
    3.Status stage
    Default Control Pipe(Endpoint number为0)就是一种Control pipe。

    (3)Frames and Microframes
    在Low/Full-Speed总线上,USB建立了一个1ms长度的Frame,在High-Speed总线上则是125us的MicroFrame。一个Frame或者MicroFrame可以包含几个transactions。

    (4)Transfer Types
    上文已经叙述,有四种Transfer:
    Control Transfers, Isochronous Transfers, Interrupt Transfers和Bulk Transfers。

    ----Control Transfer一般有三个transaction:Setup bus transaction,Data transaction和Status transaction。Control Transfer只能在message pipes上传输
    8-, 16-, 32-, and 64-byte maximum data payload sizes for full-speed control endpoints, only 8-byte maximum data payload sizes for low-speed control endpoints, and only 64-byte maximum data payload size for high-speed control endpoints。

    ----Isochronous Transfers一般是单向的,可以建立两条pipe,一条输入,一条输出。
    The USB limits the maximum data payload size to 1,023 bytes for each full-speed isochronous endpoint. High-speed endpoints are allowed up to 1024-byte data payloads。注意,Isochronous Transfers针对出错的数据,不会retransmission

    ----Interrupt Transfers属于stream pipe,是单向的。
    The maximum allowable interrupt data payload size is 64 bytes or less for full-speed. High-speed endpointsare allowed maximum data payload sizes up to 1024 bytes.

    ----Bulk Transfers适合大批量的数据传输,且对实时性要求不高,比如,USB设备的数据拷贝。
    属于stream pipe,需要建立两条Pipe来完成双向传输的任务。
    The USB defines the allowable maximum bulk data payload sizes to be only 8, 16, 32, or 64 bytes for full-speed endpoints and 512 bytes for high-speed endpoints.
    low-speed device没有bulk endpoints,不支持Bulk Transfer。

    (5)High Bandwidth Isochronous Endpoints
    Isochronous IN High Bandwidth Endpoints:
    USB2.0协议笔记【1】
    Isochronous OUT High Bandwidth Endpoints:
    USB2.0协议笔记【1】
    对应于一个Frame/MicroFrame内有1/2/3个transaction。

    (6)Split Transactions
    这是一个特殊的Transactions,在Host和Hub之间传输。它允许low-speed device和full-speed device连接high-speed的hubs。

    (7)Bus Access
    USB信息传输的模型如下:
    USB2.0协议笔记【1】

    4.USB基本数据格式
    规定的Byte/Bit Ordering为LSB first。
    USB的packet的格式如下:
    USB2.0协议笔记【1】
    packet的各个Field:
    (1)Sync
    所有的packet都是由Sync开始的。在Low/Full-Speed中,Sync为8bits,在high-Speed中,Sync为32bits。
    (2)Packet Identifier Field(PID)
    USB2.0协议笔记【1】
    PID Types:
    USB2.0协议笔记【1】
    (3)Address Field
    USB2.0协议笔记【1】
    (4)Endpoint Field
    USB2.0协议笔记【1】
    (5)Frame Number Field
    每一个frame的基础上由Host加1,达到0x7FFF时翻转为0。
    (6)Data Field
    USB2.0协议笔记【1】
    (7)CRC
    用于校验,具体校验算法参考Spec。

    5.各种Packet fromat
    (1)Token Packets
    只能由Host发起。格式如下:
    USB2.0协议笔记【1】
    (2)Split Transaction Special Token Packets:SPLIT
    用来支持Host和Hub之间的Split transaction。有两种Split special tokens:a start-split transaction (SSPLIT) and a complete-split transaction (CSPLIT).
    Packets in a Start-split Transaction:
    USB2.0协议笔记【1】
    Packets in a Complete-split Transaction:
    USB2.0协议笔记【1】
    split transaction的结果由Complete-split Transaction来返回。
    一个Split transaction的例子:
    USB2.0协议笔记【1】

    Start-Split Transaction Token:
    USB2.0协议笔记【1】
    参数SC:为0代表start-split token。
    参数Port指的是挂载在Hub下的Host要求传输的那个Port下的USB device:
    USB2.0协议笔记【1】
    参数S:0 – Full speed;1 – Low speed。
    参数E:
    USB2.0协议笔记【1】
    参数ET(Endpoint Type):
    USB2.0协议笔记【1】

    Complete-Split Transaction Token的格式如下:
    USB2.0协议笔记【1】

    (3)Start-of-Frame Packets
    USB2.0协议笔记【1】
    每1ms或者125us由Host发起一次。
    Frames and Microframes:USB defines a full-speed 1 ms frame time indicated by a Start Of Frame (SOF) packet each and every 1ms period with defined jitter tolerances. USB also defines a high speed microframe with a 125 μs frame time with related jitter tolerances。
    示意图如下:
    USB2.0协议笔记【1】

    (4)Data Packets
    USB2.0协议笔记【1】
    有四种Data packet:DATA0,DATA1,DATA2和MDATA。
    DATA0 and DATA1用于数据翻转和同步;high bandwidth high-speed isochronous endpoints使用这四种Data packet;split transactions使用三种Data Packet(DATA0,DATA1和MDATA)。

    (5)Handshake Packets
    主要作用是报告data transaction的status。有四种handshake packet和一种special handshake packet。
    USB2.0协议笔记【1】
    ACK:正确接收。ACK can be returned by the host for IN transactions and by a function for OUT, SETUP, or PING transactions.
    NAK:function无法接收Host的Data或者function没有数据传输给Host。NAK can only be returned by functions in the data phase of IN transactions or the handshake phase of OUT or PING transactions。Host是不能发NAK的。
    STALL:表示functions无法接收湖综合传输数据,或者control pipe的request不支持。Host任何时刻都不会返回STALL。
    STALL:a high-speed only handshake。
    ERR:high-speed only handshake。hub用来报告低速设备的错误,用在split transaction中。

    附录:USB 数据传输的说明示意图:
    USB2.0协议笔记【1】

    展开全文
  • usb协议,usb的讲解USB的数据传输模式 做了一段时间的USB方面的开发,虽然是现成的方案,我们只需要搞清楚它的架构,再添加我们的代码就行了。
  • USB协议分析软件

    2013-09-23 06:51:09
    USB协议
  • 详细描述USB协议 很不错 详细描述USB协议 很不错 中文资料
  • USB协议大全

    2017-02-28 12:22:26
    USB协议大全,开发USB硬件参考资料。
  • 简单介绍USB接口与USB协议
  • usb 协议分析工具

    2020-12-03 18:28:30
    学习usb 协议 USB Device Tree Viewer是一款好用的设备查看器。可以发现所有的usb接口的使用情况。提供连接到您的计算机USB设备的信息。
  • usb协议分析

    2018-02-09 22:05:51
    详细描述了usb协议的规则,特别是集中传输方式,适合编程实现。
  • usb协议相关.zip

    2019-05-12 11:02:20
    1 usb的协议文档,描述usb协议 2 usb协议分析软件 3 usb鼠标、键盘的数据包文件
  • USB协议层,介绍了USB协议,做USB的同学,可以看看
  • usb协议中文版,是学习USB的好材料,找了好久才找到
  • 图解USB协议

    2013-03-17 11:47:35
    USB协议图解,通过此图可以更容易学习USB协议
  • USB协议官方文档

    2017-11-01 23:26:05
    主要配合小编关于USB协议方面博文的一些官方资料,包含usb2.0,3.0的协议,usb存储介质方面用到的scsi,spc4协议,以及uvc协议文档等
  • usb协议详解

    2012-12-09 18:47:17
    usb协议详解
  • 从实用的角度出发,对USB协议进行了简单的解释,并对实际设计USB设备时必须考虑的一些关键问题作了比较全面的讨论。
  • USB协议入门资源

    2019-02-22 11:49:55
    USB协议入门书籍,硬件开发必备系列,建议收藏下载,多多益善。
  • USB协议规范

    2012-10-22 14:45:45
    USB协议规范,介绍的USB协议的详细内容,很值得一读
  • usb协议应用

    2014-05-12 16:52:56
    usb协议介绍及应用,usb376文件的命令详细注解等。
  • USB协议概述

    2012-03-20 17:34:52
    USB协议概述,对USB的协议进行详解。
  • USB协议开发 USB开发

    2013-04-20 10:19:42
    USB协议开发USB开发,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,653
精华内容 3,061
关键字:

usb协议