zoukankan      html  css  js  c++  java
  • usb中的endpoint(端点)和传输模式

    端点

    端点位于USB 外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO。

    每个USB 外设有一个唯一的地址,可能包含最多十六个端点。主机通过发出器件地址和每次数据传输的端点号,向一个具体端点(FIFO)发送数据。

    每个端点的地址为0 到15,一个端点地址对应一个方向。所以,端点2-IN 与端点2-OUT 完全不同。 每个器件有一个默认的双向控制端点0,因此不存在端点0-IN 和端点0-OUT。

    USB四种传输模式

    控制传输、批量传输、中断传输、同步传输

    USB 有上述四种传输类型。枚举期间外设告诉主机每个端点支持哪种传输类型。

    USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction),

    事务有四种类型:Bulk TransactionControl TransactionInterrupt TransactionIsochronous Transaction

    数据包包含部分

    每次事务都会分解成若干个数据包在USB总线上传输。每次传输必须历经两个或三个部分,第一部分——USB控制器向USB设备发出命令,

    第二部分——USB控制器和USB设备之间传递读写请求,其方向主要看第一部分的命令是读还是写,第二部分有时候可以没有。

    第三部分——握手信号。

    批量(Bulk)传输事务

    作用:主要应用在数据大量数据传输和接受数据上同时又没有带宽和间隔时间要求的情况下;

    特点:要求保证传输。打印机和扫描仪属于这种类型这种类型的设备

    适合于传输非常慢和大量被延迟的传输,可以等到所有其它类型的数据的传输完成之后再传输和接收数据。

    批量数据传输分三个阶段:

    第一部分——令牌阶段。

    Host端发出一个Bulk的令牌请求。

    如果令牌是IN请求 ,则是从Device到Host的请求;

    如果令牌是OUT请求,则是从Host到Device端的请求。

    第二部分——传送数据的阶段。

    根据先前请求的令牌的类型,数据传输有可能是IN方向,也有可能是OUT方向。传输数据的时候用DATA0和DATA1令牌携带着数据交替传送。

    数据传输格式DATA1和DATA0,这两个是重复数据,确保在1数据丢失时0可以补上,不至于数据丢失。

    第三部分——握手阶段。

    如果数据是IN 方向,握手信号应该是Host端发出;

    如果数据是OUT方向,握手信号应该是Device端发出。

    握手信号可以为ACK, 表示正常响应,

    NAK, 表示没有正确传送。

    STALL,表示出现主机不可预知的错误。

    如图所示。

    图Bulk传输

    图 Bulk传输时的令牌

    控制(Control)传输

    作用:USB系统软件用来主要进行查询配置和给USB设备发送通用的命令;

    特点:控制传输是双向传输,数据量通常较小;数据传送是无损性的。

    数据宽度:控制传输方式可以包括8、16、32和64字节的数据,这依赖于设备和传输速度。

    控制传输典型地用在主计算机和USB外设之间的端点0(EP0)之间的传输

    控制传输也分为三个阶段,即令牌阶段、数据传送阶段、握手阶段,如下图所示。

    图 控制传输事务

    中断(Interrupt)传输事务

    作用:主要用于定时查询设备是否有中断数据要传输;

    特点:设备的端点模式器的结构决定了它的查询频率从1到255ms之间。

    典型的应用在少量的分散的不可预测数据的传输键盘操纵杆和鼠标就属于这一类型

    (数据量很小)

    中断方式传输是单向的并且对于host 来说只有输入(IN)的方式

    在中断事务中,也分为三个阶段,即令牌阶段、数据传输阶段、握手阶段,如下图所示。

    中断传输事务

    同步(Isochronous)传输事务

    作用:用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传输率的即时应用中。例如执行即时通话的网络电话。

    特点:保证传输的同步性。保证每秒有固定的传输量。

    (与Bulk传输不同)同步传输允许有一定的误码率。(这样符合视频会议等传输的需求,因为视频会议首先要保证实时性,在一定条件下,允许有一定的误码率。)

    同步传输事务有只有两个阶段,即令牌阶段、数据阶段,因为不关心数据的正确性,故没有握手阶段,

    如下图所示:

    图 同步传输事务

  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/leon19870907/p/2184372.html
Copyright © 2011-2022 走看看