精华内容
下载资源
问答
  • setup事务
    千次阅读
    2021-01-18 19:55:13

    目录

    1.USB传输回顾

    2.USB事务总结

    3.后期内容大纲

    4.传输、事务、包组成学习架构图


    1.USB传输回顾

    前面讲了四种传输的类型的事务组成,包括控制传输,同步传输,批量传输,中断传输。

    2.USB事务总结

    本节我们来对事务(transaction)相关内容做以总结,从前面学习中我们可以看到其实事务有三种类型,Setup事务、Data IN事务、Data OUT事务。

    • Setup事务:主要向设备发送控制命令;

    • Data In事务:主要从设备读取数据;

    • Data OUT事务:主要向设备发送数据。

    回顾下前面我讲的传输、事务、包的关系,"某领导和一个早起的程序员进行了一次交流,说了5件事"。其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当于这次传输过程中的5个事务,当然每件事肯定有若干句对话,就相当于每个事务里面的各种包。

    其实USB所有类型的事务(Setup事务、IN事务、OUT事务)都是由3个包组成(令牌包『Token packet』、数据包『Data packet』、握手包『Handshack packet』),但是,但是,但是除了同步传输所用到的事务,同步传输事务由2个包组成(令牌包、数据包),没有握手包,不会再有其他可能,USB事务组成如下图。

    图片

    其中所有传输的所有事务的令牌包总是由主机发起,所以我们说USB一切事务都是USB主机操纵的,所有的事务都是主机发起的;数据包含本次传输的数据负载;握手包主要是数据接收方回应数据发送方数据是否正常接收到。

    3.后期内容大纲

    事务其实没什么可讲的,大家只要记住事务的概念和上面的内容即可。但是接下来我们会学习到USB包(packet)的详细协议,USB协议基本上都在USB描述符和USB包上面体现的,不过大家也不用担心,我会带着大家学习包的结构和分类各类包的组成及用途四种传输的包组成,课程大纲如下。

    USB协议详解第18讲(USB包-初探)
    USB协议详解第19讲(USB包-包的组成及分类)
    USB协议详解第20讲(USB包-帧首类包SOF)
    USB协议详解第21讲(USB包-命令类包Token)
    USB协议详解第22讲(USB包-数据类包DATA)
    USB协议详解第23讲(USB包-握手类包Handshake)
    USB协议详解第24讲(USB包-控制传输包详解)
    USB协议详解第25讲(USB包-同步传输包详解)
    USB协议详解第26讲(USB包-批量传输包详解)
    USB协议详解第27讲(USB包-中断传输包详解)

    4.传输、事务、包组成学习架构图

    本架构图后期再学习中会一步一步更新,每一节之后也会逐步完善并更新,最后会完整的展示出来传输、事务、包的结构,让大家在学习过程中对协议框架不混乱。

    图片


    1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

    2.未经原作者允许不得转载本文内容,否则将视为侵权;

    3.转载或者引用本文内容请注明来源及原作者;

    4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

    下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

    更多相关内容
  • USB协议事务流程

    2021-06-17 10:45:35
    一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由...一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。 3.包数据通讯 一个事务由一个或多个包(p

    一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。

    1.传输数据通信

    USB的数据通讯首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。

    2.事务数据通讯

    一次传输由一个或多个事务(transaction)构成,事务可以分为:in事务、out事务、setup事务。

    3.包数据通讯

    一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。

    4.域数据通讯

    一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。

    USB传输

    传输分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。

    1、批量(大容量数据)传输(Bulk Transfers): 非周期性,突发 
    大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等。

    批量输出事务:
    (1)主机先发出一个OUT令牌包(包含设备地址,端点号)。
    (2)然后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包。
    (3)设备解码令牌包,数据包都准确无误,并且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,但是没有能力接收下一次传输),如果没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间重新该批量传输事务。如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。
    批量输入事务:
    (1)主机首先发送一个IN令牌包(包含设备地址,端点号)。
    (2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。如果此时有地址和端点匹配的设备,并且没有检测到错误,则该设备作出反应:设备有数据需要返回,就将一个数据包放在总线上;如果没有数据需要返回,设备返回NAK响应主机;如果该端点处于挂起状态,设备返回STALL。如果主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。如果主机检测到错误,则不做任何响应,设备会检测到超时。注意:USB协议规定,不允许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间重新该批量输入事务。

    2、中断传输(Interrupt Transfers): 周期性,低频率。
    允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等。
    中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。

    3、等时(同步)传输(Isochronous Transfers): 周期性 。
    持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备。


    等时(同步)传输用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。当数据错误时,不再重传操作。因此等时传输没有应答包,数据是否正确,由数据的CRC校验来确认。
     

    4、控制传输(Control Transfers): 非周期性,突发。
    用于命令和状态的传输

    控制传输可分为三个过程:(1)建立过程 (2)数据过程(可选) (3)状态过程
    特性:  
    每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置 。
    方向:  
    控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输 。

    USB事物


     

    USB包

    包的组成:

    包的内容:

    1、PID:

    这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID
    PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包

    2、地址:

    3、帧号:

    4、数据:

    5、CRC:

    Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet

    不同类型包,以上的组成部件有所不同

    1、四种Packet类型之令牌包(Token Packet):
    令牌包用来启动一次USB传输。
    输出(OUT)令牌包:用来通知设备将要输出一个数据包
    输入(IN)令牌包:用来通知设备返回一个数据包
    建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:
    SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制

    例子:

    2、四种Packet类型之SOF Packet
    帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。

     

    例子:

    0xA5:1010 0101:对应上面PID表可知是帧起始包
    3、四种Packet类型之Data Packet

    例子:

    4、四种Packet类型之Handshake Packet 

    例子:

    USB 设备枚举及描述符介绍 
    当一个USB设备插入主机后,会有以下活动: 

     在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点。  

     

     

    例程分析

    我们插上鼠标后后出现如下的信息,我们先来分析第一个传输:

    我们看到第一个是控制传输,它包含了4个事物,分别是:1个setup事务,3个in事务,1个out事务,我们先打开setup事务:

     

    我们看到这个事务里包含了3个包

    第一个包是令牌包,它由主控制器发送给目标设备的0号端口,用于设置目标设备的地址和端口号,我们看到后面两个包都缺省了地址与端口号。在usb系统中,所有的通信都是由主机发出相应的令牌所引起的。

    第二个是数据包,由主控器发送给目标设备,其中数据的内容表示:

    80:表示要求设备向主机发送信息

    06:表示GET_DESCRIPTOR,即设备向主机发送设备描述符

    00与01:Word-sized field that varies according to request

    00与40:Word-sized field that varies according to request; typically used to pass an index or offset

    00:Number of bytes to transfer if there is a:Data stage

    总结一下第二个包就是向默认地址0 发送GET_DESCRIPTOR 指令包,请求设备发送设备描述符

    第三个是应答包:设备接收到主机发送的数据后会给出应答

    接着我们看第一个in事务

     

    我们看到这个事务里也有三个包

    第一个是in包:由主机发送给设备,表示要设备向主机发送上面请求的设备描述符

    第二个是数据包:由设备发送给主机,当然是发送设备描述符,我们来分析一下:

    12:表示接下来要求主机向设备发送信息

    01:CLEAR_FEATURE、

    第三个是应答包,由主机发送给设备

    接着我们来看第二个in事务

     

    这个事务里依旧是3个包

    第一个是in包:由主机发送给设备,表示需要输入

    第二个是数据包:由设备发送给主机,我们来解析一下:

    6D:表示要求主机发给设备数据

    04:Reserved for future use

    第三个是主机给设备的应答包

    最后来看out事务

    第一个是out包:由主机发给设备

    第二个是数据包:由主机发给设备,无数据

    第三个包是设备给主机的应答包

    展开全文
  • SETUP事务 SETUP事务为host控制服务,当host希望传输一些USB规范的默认操作的时候 就需要使用setup事务 4. SOF事务 这个规范上是写用于帧同步,但我没接触过SOF事务,所以也说不明白实际用途 Orz 然后这4个事务又由3种...

    USB协议:

    先看USB接口

    090309144615.png

    可以看出,在USB使用了4根线,分别为电源线,地线,信号线和差分信号线

    差分信号线用于检测信号线的传输是否正确

    下面我们只关注信号线

    然后是USB的串口传输

    090309144823.png

    在串口传输中,由于所有的信号共用一根数据线,所以不仅有先来后到的问题,而且在一个设备和另一个设备进行通信的时候,如果别的设备也进来插一脚,就会导致信号的出错,所以这个时候需要一个管理者,他说好,A设备和我通信,A设备才和管理者通信,通信完成后,管理者说现在到B设备和我通信,A设备你歇一歇,于是B设备才能和管理者通信

    在USB协议中,这个管理者称为host,在一个usb组成的括扑中只能存在一个管理者,也就是一个host

    任何传输都是由host发起的,设备不能说host你注意了,我要和你通信这样

    所以host是一个十分霸道的管理者 = 3=

    呢host又如何发起于其它设备的通信呢?

    现在介绍一下通信规范

    在USB的通信中,分为4个大类

    1. 控制传输

    控制传输用于对设备的控制访问

    2.中断传输

    中断传输用于按一定的时间间隔访问设备(例如鼠标 键盘等)

    3.等时传输

    等时传输用于高流量的无间隔访问设备(视频 音频等)

    4.块传输

    块传输用于对流量的,对时间要求不高的设备(U盘 移动硬盘等)

    这4大类由4种事务组成

    1. IN事务

    IN事务为host输入服务,当host需要从设备获得数据的时候,就需要in事务

    2. OUT事务

    OUT事务为host输出服务,host需要输出数据到设备的时候,就需要out事务

    3. SETUP事务

    SETUP事务为host控制服务,当host希望传输一些USB规范的默认操作的时候

    就需要使用setup事务

    4. SOF事务

    这个规范上是写用于帧同步,但我没接触过SOF事务,所以也说不明白实际用途 Orz

    然后这4个事务又由3种包构成

    1. 令牌包

    令牌包用于指明一次事务的类型

    2. 数据包

    数据包用于事务中数据的传输

    3. 应答包

    应答包用于事务传输完成的握手

    令牌包由4种包组成

    1. in包

    in包用于指明当前的事务为in类型

    2. out包

    out包指明当前事务为out类型

    3. setup包

    setup包指明当前事务为setup类型

    4. sof包

    sof包指明当前事务为sof类型

    数据包由2种包组成,在usb的数据传输中,每个事务的数据包的类型需要反转data0,data1,data0,data1......这样的顺序发送下去,以确保数据的完整性

    1. data0包

    该数据包的类型为0

    2. data1包

    该数据包的类型为1

    应答包由3种握手包组成

    1. ack包

    ack握手包指明当前事务的数据包传输是成功的

    2. nak包

    nak握手包指明当前设备忙,不能处理数据包,请主机稍后再次发送

    3. stall包

    stall握手包指明当前设备不能接收或者传输数据,表示一个严重的错误

    介绍一下事务的组成,除了SOF事务,其它事务都由3个包组成,令牌包,数据包和握手包(这里不介绍SOF事务,因为我用不上  = 3=)

    黄色的包为主机发送,蓝色的包为设备发送

    setup事务的组成如下:

    090309145034.png

    主机先发送一个setup令牌包,再发送一个数据包(0),也就是data0,设备接收无误,则返回给主机一个ack握手包,表示数据传输成功

    在setup事务的数据包中封装了一个8字节长度的数据,在LINUX中称为usb_ctrlrequest

    该结构如下

    struct usb_ctrlrequest {

    __u8 bRequestType;   //辅助请求类型

    __u8 bRequest;        //请求类型

    __le16 wValue;        //请求的辅助数值

    __le16 wIndex;        //请求的辅助数值,通常用于计算索引或者偏移

    __le16 wLength;     //如果控制传输有数据阶段,在这里定义数据的大小

    } __attribute__ ((packed));

    具体字段的值在主机控制器驱动中描述

    这个数据包还有个特别的地方,就是他一定是data0类型的数据包

    in事务的组成如下:

    090309145108.png

    主机发送一个in令牌包给设备,告诉设备,给我传输数据,设备收到这个圣旨之后,马上填充一个数据包并传输到主机,主机收到这个数据包之后会发送一个握手包说明收到了

    在in事务中数据包有data0和data1两种,具体由传输队列决定

    out事务的组成如下

    090309145127.png

    主机发送一个out令牌包之后,再发送一个数据包给设备,设备回应一个握手包表示我收到了

    同样,在out事务中数据包也有data0和data1两种,具体由传输队列决定

    在这里看出,所有的令牌包都是由主机发送的,符合我们之前所说的” 任何传输都是由host发起的”

    现在看看传输类型

    由于在这次试验中的目标是鼠标的模拟,只会接触到控制传输和中断传输,所以我只谈这两种传输,并且先说一下控制传输,中断传输等到主机发起控制传输的时候再解析

    控制传输的组成如下

    090309145151.png

    在控制传输中有3个阶段,分别是setup阶段,数据阶段和状态阶段

    setup阶段指明了一次主机的请求类型

    数据阶段为请求类型所需要传输的数据

    最后的状态阶段用于表示一次控制传输的结束

    setup阶段是由一个setup事务组成的,setup事务之前已经介绍过了

    数据阶段是由1个或者多个连续的in事务或者out事务组成,在这些事务中,数据包的类型由data1开始,不断反转其类型组成一个data1,data0,data1,data0.....的队列

    在控制事务中,数据阶段不是必须的,是否有数据阶段是由setup事务中的请求类型决定的

    状态阶段是由一个in事务或者out事务组成的,有数据阶段的话,状态阶段的事务类型和数据阶段的事务相反,例如数据阶段为in事务则状态阶段的事务为out事务,如果没有数据阶段,则和setup包中bRequestType中的传输方向字段相反

    并且状态字段中事务的数据包类型一定为data1

    现在看USB软件模型中最基本的传输单位 – 包

    包是由字段组成的

    字段有7种,不同的包由不同的字段组成,现在先看看有哪7种字段

    1. 同步字段

    在USB1.1协议中同步字段为8位,用于包的数据同步,表明一个包的开始,这8位固定为1000 0000

    2. PID字段

    包ID字段为8位,前4位标识这个包的类别,后4位为效验,前4位的类别为

    令牌包

    0001:OUT包    1001:in包     0101:sof包     1101:setup包

    握手包

    0010:ack包    1010:nak包    1110:stall包

    数据包

    0011:data0包     1011:data1包

    在2.0协议中规范了更多的包,我这里就不介绍了

    3. 地址字段

    地址字段用于标识usb设备的绝对位置,在一个usb主机的括扑中可以有128个设备,排除主机的0号地址位外,可以接127个设备,在usb的通信中,一个设备只有一个地址号,为什么是128个设备呢?因为这个地址字段只有7位......

    4. 端点字段

    端点字段为4位,用于标识传输类型,0号端点默认用于控制传输,在低速设备中只使用3个端点,而高速和全速设备则可以使用全部的16个端点

    5. 帧号字段

    帧号字段为11位,用于sof事务中的帧号表达

    6. 数据字段

    数据字段的最大长度由端点决定,对于低速,全速和高速设备有不同的定义

    7. CRC字段

    用于效验数据的正确性,检测数据传输是否有误,在令牌包中为5位,在数据包中为16位

    令牌包,数据包和握手包的字段组成

    setup包,in包和out包这3个令牌包的组成都一样

    090309160552.png

    数据包的组成

    090309160633.png

    握手包的组成

    090309160657.png

    将上面控制传输中的包详细划分为字段,可以得到下面这个图

    090309160724.png

    这里软件上的基本协议就介绍完了~ 详细部分在之后的详细中再慢慢介绍

    展开全文
  • 2.1 SETUP令牌包 2.2 DATA0 数据包 2.2.1bmRequestType(向谁请求) 2.2.2bmRequest(什么请求) 2.2.4wIndex 2.2.5wLength域 2.3ACK数据包 3.可选的数据阶段包详解 3.1 如果第一阶段指定数据传输方向为设备到...

    目录

    1.控制传输包结构

    2.设置阶段包详解

    2.1 SETUP令牌包

    2.2 DATA0 数据包

    2.2.1 bmRequestType(向谁请求)

    2.2.2 bmRequest(什么请求)

    2.2.3 wValue

    2.2.4 wIndex

    2.2.5 wLength

    2.3 ACK数据包

    3.可选的数据阶段包详解

    3.1 如果第一阶段指定数据传输方向为设备到主机

    3.2 如果第一阶段数据传输方向为主机到设备(数据长度大于0)

    3.3 如果第一阶段数据传输方向为主机到设备(数据长度为0)

    4.状态阶段包详解

    4.1 如果第二阶段指定数据传输方向为设备到主机

    4.2 如果第二阶段指定数据传输方向为主机到设备(数据长度大于0)

    4.3 如果第二阶段指定数据传输方向为主机到设备(数据长度为0)


    1.控制传输包结构

    控制传输由三个阶段组成,设置阶段可选的数据阶段状态阶段,其中设置阶段由1个SETUP事务组成,数据阶段由0个或者多个IN/OUT事务组成,状态阶段由1个IN/OUT事务组成,其中每个阶段事务包结构有所不同,下图可以直观看出控制传输写传输的包结构组成。

    2.设置阶段包详解

    设置阶段由1个设置事务组成,SETUP事务由SETUP令牌包DATA0数据包ACK握手包组成。如下图所示。

    2.1 SETUP令牌包

    从上图可以知道SETUP PID为1101B,则补码校验为0010,在链路上传输先低后高则为,1011_0100(0xB4),下图为SETUP包的链路波形图。

    2.2 DATA0 数据包

    从上图可以知道DATA0 PID为0011B,则补码校验为1100,在链路上传输先低后高则为,1100_0011(0xC3),下图为DATA0数据包的链路波形图。

    Setup Data就是DATA0数据包里面的8个字节的数据Data,包含主机的很多设置信息(数据传输方向、数据类型、目标类型、附加数据、数据阶段传输的数据长度等等),这8个字节含义如下,我们一一解析。

    2.2.1 bmRequestType(向谁请求)

    D7:传输方向

    • 0 = 主机至设备;
    • 1 = 设备至主机;

    D6..5:命令类型

    • D6D5=00:标准请求命令; 
    • D6D5=01:类请求命令;
    • D6D5=10:用户定义命令;
    • D6D5=11:保留。

    D4..0:接受者类型

    • 0=设备;
    • 1=接口;
    • 2=端点;
    • 3=其它
    • 4-31 保留

    这个域表明此请求的特性。特别地,这个域表明了第二阶段控制传输方向。如果wLength域被设作0的话,表明没有数据传送阶段,那Direction位就会被忽略。

    USB说明定义了一系列所有设备必须支持的标准请求,这些请求见下面表。另外,一个设备类可定义更多的请求,设备厂商也可定义设备支持的请求。

    请求可以到设备、设备接口、设备端结点(endpoint)上。当指定的是接口或端点(endpoint)时,wIndex域指出哪个接口或端点。

    2.2.2 bmRequest(什么请求)

    此字段指定特定的请求类型,bmRequestType字段中的TypebmRequest可组合出不同设置,不能的设置,wValue、wIndex、wLength不同,不同设置数据阶段返回的数据含义也不同。

    bmRequest请求类型表。

    描述符类型表。

    2.2.3 wValue

    此域用来传送当前请求的参数,随请求不同而变。

    2.2.4 wIndex

    该字段的内容根据请求而有所不同。它用于将参数传递给设备,特定于请求。

    当bmRequestType的Recipient字段为接口或端点时,wIndex域用来表明是哪一个接口或端结。

    下图显示了用于指定端点时的wIndex格式。

    Direction位(bit7)设置为0表示指定端点为OUT端点,设置为1表示指定端点为IN端点。

    图9-3显示了用于指定接口时的wIndex格式.

    2.2.5 wLength

    wLength表明第二阶段的数据传输长度,第二阶段的数据传输方向由bmRequstType的Direction位指出。wLength域为0则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength(但是可以少于),在输出请求下,wLength指出主机发出的真实的数据量。如果主机发送多于wLength的数据,设备会作出未知响应。

    2.3 ACK数据包

    3.可选的数据阶段包详解

    数据阶段由0个或者多个IN/OUT事务组成。

    3.1 如果第一阶段指定数据传输方向为设备到主机

    如果第一阶段指定读(传输方向为设备到主机),则数据阶段会由连续的多个IN事务组成,事务和包协议结构如下图。

    3.2 如果第一阶段数据传输方向为主机到设备(数据长度大于0)

    如果第一阶段指定写(传输方向为主机到设备),则数据阶段会由连续的多个OUT事务组成,事务和包协议结构如下图。

    3.3 如果第一阶段数据传输方向为主机到设备(数据长度为0)

    如果第一阶段指定数据传输方向为主机到设备,并且长度为0,则无第二数据阶段,事务和包协议结构如下图。。

    4.状态阶段包详解

    状态阶段由1个OUT/IN事务组成。

    4.1 如果第二阶段指定数据传输方向为设备到主机

    如果第二阶段指定数据传输方向为设备到主机,则主机接收完毕数据后,主机请求一个OUT事务告诉设备数据的接收状态。

    4.2 如果第二阶段指定数据传输方向为主机到设备(数据长度大于0)

    如果第二阶段指定数据传输方向为主机到设备,则主机发送完毕数据后,主机请求一个IN事务请求设备数据接收状态。

    4.3 如果第二阶段指定数据传输方向为主机到设备(数据长度为0)

    如果第二阶段指定数据传输方向为主机到设备,请求传输数据长度为0,则主机发送完令牌包后,主机请求一个IN事务请求设备数据接收状态。


    1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除。

    2.未经原作者允许不得转载本文内容,否则将视为侵权;

    3.转载或者引用本文内容请注明来源及原作者;

    4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

    下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

     

    展开全文
  • XYCMS律师事务所建站系统是以asp+access进行开发的企业网站源码。 XYCMS律师事务所建站系统功能介绍: 企业信息管理:包括基本信息管理,添加,在线报名信息管理,问答中心信息管理 新闻中心管理:管理新闻信息内容...
  • XYCMS律师事务所建站系统是以asp+access进行开发的企业网站源码。 功能介绍: 企业信息管理:包括基本信息管理,添加,在线报名信息管理,问答中心信息管理 新闻中心管理:管理新闻
  • 目录 ...前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,今天我们主要讲解控制传输。 控制传输是一种特殊的传输方式,且
  • 一个使编写事务代码更容易的库。 安装 将此行添加到应用程序的 Gemfile 中: gem 'transacted' 然后执行: $ bundle 或者自己安装: $ gem install transacted 用法 在您的文件中要求它: require '...
  • 用Python编写的PostgreSQL事务性队列系统。 它允许您以各种方式将项目推送和弹出队列,以及从队列中弹出项目,还提供了两个计划选项:延迟处理和优先级。 系统使用单个表来容纳所有队列中的所有作业。 具体细节...
  • django-celery-transactions django-celery-transactions保留Celery任务,直到提交了当前数据库事务为止,避免了Celery 所述的潜在竞争情况。 从信号处理程序发送任务,不用担心!特征如果回滚事务,则将丢弃任务。 ...
  • stm:软件事务性内存

    2021-02-04 03:09:08
    stm:软件事务性内存
  • XYCMS律师事务所建站系统 是以asp+access进行开发的企业网站源码。 XYCMS律师事务所建站系统 v3.4 更新日志 1.新增MySQL数据库转换接口 2.优化数据表结构,调用函数优化 XYCMS律师事务所建站
  • XYCMS律师事务所建站系统是以asp+access进行开发的企业网站源码。 功能介绍: 企业信息管理:包括基本信息管理,添加,在线报名信息管理,问答中心信息管理 新闻中心管理:管理新闻
  • RunNErrand是一个Web应用程序,它不仅为希望通过与社区中的其他人联系而获得额外现金的学生提供机会,而且还为需要日常事务或其他问题的学生提供帮助。 使用此应用,学生可以通过过滤位置发布任务或接受最适合他们...
  • 万友志诚私人管家是管理私人日常事务的得力助手,并有事前提醒功能、记录日记、记录收入、支出等很多有用的功能。万友志诚私人管家包括程序有:账务管理: 收入登记、支出登记
  • 为您提供XYCMS律师事务所建站系统下载,XYCMS律师事务所建站系统是以asp+access进行开发的企业网站源码。XYCMS律师事务所建站系统功能介绍:企业信息管理:包括基本信息管理,添加,在线报名信息管理,问答中心信息...
  • 鸿言事务管理 v2.1.zip

    2019-07-11 03:28:45
    鸿言事务管理软件是一套用来管理个人事务、工作事务等各种事务的软件,通过本软件可以方便、快捷、安全地管理您的事务信息。可以灵活设置事务内容、类别、状态、处理进度、处理效果等等。可以对事务的处理信息、相关...
  • 鸿言事务管理软件是一款个人事务管理软件,具有事务分类、事务提醒、处理记录和处理进度等功能,事务太多,左支右绌?鸿言事务管理可以帮您解决问题 鸿言事务管理软件官方介绍 鸿言事务管理是用来管理个人事务、...
  • 第二篇 USB2.0协议简述(包-事务-传输)

    千次阅读 2020-11-03 10:32:11
    4.1 关系图 以控制传输,主机请求设备的描述符数据为例,关系图如下: 说明: ① 控制传输一般用来实现一条USB协议定义的请求 ② SETUP事务用来将一条请求命令发送到设备 ③ IN事务用于USB设备向主机返回主机所请求...
  • PostgreSQL的分布式事务管理工具
  • sails-mysql-transactions, 带有mySQL事务支持的帆/水线 ORM 带有复制支持的MySQL事务性 ORMsails-mysql-transaction 是用于MySQL的船帆ORM适配器,具有事务和复制群集支持。这个适配器在流行的sails-mysql 适配器...
  • 查看MySQL最近的事务执行信息发布时间:2020-03-03 12:35:07来源:51CTO阅读:103作者:wjw555课题:查看MySQL最近的事务执行信息*虽然我们可以通过查询慢查询日志查询到一条语句的执行总时长,但是如果数据库中存在...
  • 重试有关死锁和事务序列化错误的数据库事务。 支持MySQL,PostgreSQL和SQLite。 例子 通过拯救ActiveRecord :: TransactionIsolationConflict并重试事务,gem自动工作。 安装 将此添加到您的Gemfile中: gem '...
  • XYCMS律师事务所建站系统 v3.0.zip
  • 如果要检查新事务,请将事务保存到数据库,检查并添加当前未保存到数据库的所有事务。 设置 您必须安装python 3 使用画中画 $ pip install -U aiobml 从来源 $ git clone ...
  • 分布式LinQ事务

    2013-10-10 10:48:06
    分布式LinQ事务,介绍如何使用分布式LinQ事务
  • 叁月快速事务管理系统(网络版)是一款“特别”的事务管理应用。 特别简单 1:“特别简单”:只要通过客户端登录界面点击“注册机构”即可创建一套完全属于你自己机构的事务管理系统。 使用也特别简单,设置系统...
  • Neo4j HTTP事务端点的.Net API。 (v2.0.0) 公开基于Neo4j 强类型图形查询API。 连接字符串 var clientFactory = Fluently . Configure ( " Server=http://localhost:7474/db/data/;User Id=neo4j;Password=...
  • 合金工人面向事务的高可用Web Worker通信框架。腾讯出品,可以继续居住腾讯文档等大型前端项目的考验。特色面向事务及命名空间的通信封装,支持大规模业务的场景。 Promise化调用代替跨线程事件监听,无缝支持async ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,764
精华内容 10,705
关键字:

setup事务