精华内容
下载资源
问答
  • USB数据格式
    2020-05-30 19:26:43

    USB传输类型:

    1.控制传输:非周期性, 突发(用于命令和状态的传输)

    2.大容量数据传输(Bulk):非周期性,突发(大容量数据的通信, 数据可以占用任意带宽, 并容忍延迟)

    3.同步传输:周期性.(持续性的传输, 用于传输与时效相关的信息, 并且在数据中保存时间戳的信息)

    4.中断传输:周期性, 低频率(允许有限延迟的通信)

    USB传输格式:

    SOP					SYNC			packet content				EOP**
    packet content格式:
    PID(8bit)			地址(7+4)		帧号		   数据		CRC(5bit)
    

    packet分四大类(不同的类型包, 以上的组成部件有所不同):

    	命令(Token) Packet							
    																	 
    	帧首(Start of Frame) Packet			
    													
    	数据(Data) Packet							
    																	 
    	握手(Handshake) Packet	
    

    Packet Identifier数据包类型:

    PID类型							PID名称							对应的packet种类
    Token令牌					 OUT/INT/SETUP/SOF					 令牌包、SOF包
    Data数据					 DATA0/DATA1/DATA2/MDATA				数据包
    Handshake					 ACK/NAK/STALL/NYET						握手包
    Special						 PRE/ERR/SPLIT/PING
    
    
    • 地址
      1.设备地址
      Addr0 ~ Addr6

      2.端点地址
      ENDP0 ~ ENDP3 (LS:最多3个端点, FS/HS设备最多16个端点)

    • 帧号
      11位
      主机每发出一个帧,帧号都会自动加1
      当帧号达到7ffh时, 将归零重新开始计数
      仅在每个帧的帧首传输一次SOF包.

    • 帧格式
      SOF 同步传输 中断传输|控制传输|大容量传输
      全速1ms,高速设备:125us

    • 数据
      根据传输类型的不同,数据域的数据长度从0到1024字节不等.

    			 	control						bulk				interrupt		isoch
    				hs | fs | ls			hs | fs | ls		hs  |  fs  |  ls	hs   | 	fs	 | ls
    数据包长度		64	64		8			512	 64	 N.A		1024 	64	8		1024  1023    N.A
    
    • CRC
      –>Token CRC
      计算地址域和帧号域的CRC
      G(X) = X(5幂) + X(2幂) + 1

    –>DATA CRC
    计算数据域数据的CRC
    G(X) = X(16幂) + X(15幂)+ X(2幂) + 1

    Token类型:
    (PID(8bit) + 地址(7+4bit) + CRC(5bit))
    以下三种PID可选

    >>IN							
    >>OUT				
    >>SETUP		
    eg.
    	SYNC			SETUP		ADDR|ENDP	 		CRC5			EOP
    00000001			0xB4		 3	 0				0x0A			250.000ns	
    

    (PID(8bit) + 帧号 + CRC(5bit))
    SOF包, LS/FS每1MS一个帧.HS每125us一个帧.

    eg.
    	SYNC			SOF			FRAME# 			CRC5			EOP
    00000001			0xA5		1611			0x11			250.000ns
    
    

    DATA Paket类型:
    (PID(8bit) + 数据(0~1024 bit) + CRC(16bit))

    >>DATA0
    >>DATA1
    >>DATA2
    >>DATAM
    eg.
      SYNC				DATA0			Data 					CRC16				EOP
    00000001			0xA5		80 06 00 01 00 00 12 00		0x072f			250.000ns
    
    

    Handshake Packet

    (PID(8bit))
    >>ACK:传输正确完成
    >>NAK:设备暂时没有准备好接收数据, 或没有准备好发送数据
    >>STALL:设备不能进行传输
    >>NYET/ERR:仅用高速传输,设备没有准备好或出错
    eg.
    	SYNC				ACK					EOP
    00000001				0x4B		  		233.330ns
    
    更多相关内容
  • usb帧格式

    千次阅读 2016-06-07 22:46:00
    0. 基本概念 一个【传输】(控制、批量、中断、等时):由多个【事务】组成; 一个【事务】(IN、OUT、SETUP):由一多... USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的...

    http://blog.csdn.net/myarrow/article/details/8484113

    0. 基本概念

           一个【传输】(控制、批量、中断、等时):由多个【事务】组成;

           一个【事务】(IN、OUT、SETUP):由一多个【Packet】组成。

           USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。

    1. 包(Packet)

            包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数据在 USB总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。 
           注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS。

          • USB总线上的情形是怎样的?

           包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。

     

            USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:

     

     

    1.1 PID类型(即包类型)

     1.2 Token Packets

         此格式适用于IN、OUT、SETUP、PING。

    PID            数据传输方向

    IN              Device->Host

    OUT         Host->Device

    SETUP    Host->Device

    PING        Device->Host

    1.3 Start-of-Frame(SOF) Packets

          SOF包由Host发送给Device。
        1) 对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;
        2) 对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;
        SOF包构成如下图所示:

     

    1.4 Data Packets 

         有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization)。

    1.5 Handshake Packets

    • ACK: 对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。

    • NAK: 在数据阶段,对于IN事务,它将由device发出;在握手阶段,对于OUT和PING事务,它也将由device发出;host从不发送NAK包。

    2. 事务(Transaction)

           在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)即:The delivery of service to an endpoint。一个事务由一系统packet组成,具体由哪些packet组成,它取决于具体的事务。可能由如下包组成:

           • 一个token packet

           • 可选的data pcket

           • 可选的handshake packet

           • 可选的special packet

    2.1 输入(IN)事务处理

         输入事务处理:表示USB主机从总线上的某个USB设备接收一个数据包的过程。

            •【正常】的输入事务处理


        

          •【设备忙】时的输入事务处理    


         •【设备出错】时的输入事务处理

      

    2.2. 输出(OUT)事务处理

            输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程。

        •【正常】的输出事务处理
       

     

        •【设备忙时】的输出事务处理

     

        •【设备出错】的输出事务处理

     

    2.3 设置(SETUP)事务处理  

       •【正常】的设置事务处理

     

     
       •【设备忙时】的设置事务处理

     


       •【设备出错】的设置事务处理

     

    3. USB传输类型

           在USB的传输中,定义了4种传输类型:

           • 控制传输 (Control Transfer)

           • 中断传输 (Interrupt Transfer)

           • 批量传输 (Bulk Transfer)

           • 同步传输 (Isochronous)

    3.1 控制传输 (Control Transfer)

          控制传输由2~3个阶段组成:

          1) 建立阶段(Setup)

          2) 数据阶段(无数据控制没有此阶段)(DATA)

          3) 状态阶段(Status)

         •每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。

          控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的。

    3.1.1 建立阶段

         主机从USB设备获取配置信息,并设置设备的配置值。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。

     

    3.1.2 数据阶段

         根据数据阶段的数据传输的方向,控制传输又可分为3种类型:

         1) 控制读取(读取USB描述符)

         2) 控制写入(配置USB设备)

         3) 无数据控制

     

         数据传输阶段:用来传输主机与设备之间的数据。

         • 控制读取

         是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如下图的【Control Read】所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1/DATA0数据信息包回传给主机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包。

         • 控制写入

           是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包。

     

    3.1.3 状态阶段

           状态阶段:用来表示整个传输的过程已完全结束。
           状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包。

           对于【控制读取】而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包。

          相对地对于【控制写入】传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包。
     

     3.2 批量传输 (Bulk Transfer)

          •用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等。

          •批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
          • USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务。
          • 一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。
          • 翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传。

          它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输。它由三种包组成(即IN事务或OUT事务):

            1) token

            2) data

            3) handshake

    1) For IN Token (即:IN Transaction)

         • ACK: 表示host正确无误地接收到数据

         • NAK: 指示设备暂时不能返回或接收数据  (如:设备忙)

         • STALL:指示设备永远停止,需要host软件的干预 (如:设备出错) 

    2) For OUT Token (即:OUT Transaction)

         如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包

         • ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包

            • NAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)

            • STALL: 指示Device endpoint已经停止,且通知Host不再重传

    3) Bulk读写序列

          即由一系统IN事务或OUT事务组成。

    3.3 中断传输(Interrupt Transfer)

        中断传输由IN或OUT事务组成。 

        中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。
         主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。
         同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。

         中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机。

        

         DATA0或DATA1中的包含的是中断信息,而不是中断数据。

    3.4 同步传输(Isochronous Transfer)

    1) 它由两种包组成:

            1) token

            2) data

           同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输。

          同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。

          同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦
    克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。

     

    Isochronous data is continuous and real-time in creation, delivery, and consumption. Timing-relatedinformation is implied by the steady rate at which isochronous data is received and transferred. Isochronousdata must be delivered at the rate received to maintain its timing. In addition to delivery rate, isochronousdata may also be sensitive to delivery delays. For isochronous pipes, the bandwidth required is typicallybased upon the sampling characteristics of the associated function. The latency required is related to thebuffering available at each endpoint.

    A typical example of isochronous data is voice. If the delivery rate of these data streams is not maintained,drop-outs in the data stream will occur due to buffer or frame underruns or overruns. Even if data isdelivered at the appropriate rate by USB hardware, delivery delays introduced by software may degrade applications requiring real-time turn-around, such as telephony-based audio conferencing.

    The timely delivery of isochronous data is ensured at the expense of potential transient losses in the data stream. In other words, any error in electrical transmission is not corrected by hardware mechanisms such as retries. In practice, the core bit error rate of the USB is expected to be small enough not to be an issue.  USB isochronous data streams are allocated a dedicated portion of USB bandwidth to ensure that data can be delivered at the desired rate. The USB is also designed for minimal delay of isochronous data transfers.

     

    转载于:https://www.cnblogs.com/newjiang/p/5568593.html

    展开全文
  • USB协议详解第7讲(补充-USB帧和微帧剖析)

    千次阅读 多人点赞 2021-01-09 09:47:50
    (1)USB2.0和微属于物理层时间基准的概念,低速和全速下每个时长为1ms,高速下每个又分为8个微,即每个微时长为125us。 (2)USB主机和设备控制器同步后,每个微起始点开始传输数据,如果没有数据,...

    目录

    1.概念

    2.全速USB传输(帧)

    3.高速USB传输(微帧)


    上一篇讲解端点描述符的时候提到了帧和微帧的概念,可能很多人会晕,这节课先做下补充,避免大家放弃学习。

    1.概念

    (1)USB2.0帧和微帧属于物理层时间基准的概念,低速和全速下每个帧时长为1ms,高速下每个帧又分为8个微帧,即每个微帧时长为125us。

    (2)USB主机和设备控制器同步后,每个微帧起始点开始传输数据,如果没有数据,则SOF包发送完毕之后,总线进入空闲状态,一会下面看解析图。

    (3)每一个帧(微帧)起始点会先发送一个SOF包(帧起始包)它以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。帧起始包之后可以是输出(OUT)、输入(IN)、建立(SETUP)等令牌包(核心:令牌包一定是主机发送的,后续详解),在令牌包中指定数据包去向或者来源的设备地址和端点(Endpoint),从而保证了只有一个设备对被广播的数据包/令牌包作出响应。

    (4)再次强调,USB全速设备1ms产生一个帧,而高速设备每125us产生一个微帧。

    下面我们来看看全速USB传输帧和高速USB传输微帧的解析图:

    2.全速USB传输(帧)

    全速USB传输每一个帧为1ms。首先我们看上一帧,首先会发送一个SOF包(帧起始包),此时USB主机检测到总线没有事务可以传输,则总线进入idel(空闲状态),这里的空闲时间996.917us,我们其实可以计算发送一个SOF包的总线有效带宽时间(1000us-996.917us),大概3us左右,大家可能会问,为什么是3us,那就给大家详细计算下。

    为什么是3us,因为全速USB 12Mhz的时钟频率,SOF包长度为4字节(同步 1字节+SOF 1字节+Frame域和CRC域 2字节),4*8 = 32bit,传输时间 = 1/12M*32 + 250[EOP] = 83.3333ns*32+250ns = 2916ns = 3us,EOP是end of packet占用的时间,过瘾吧,提示大家下,包后面会详细讲解。

    紧接着我们看下一帧,同样的首先会发送一个SOF包(帧起始包),等了176.817us后,可能有事务了,紧接着USB主机会发送一个SETUP令牌包,也就是请求哪个设备哪个端点进行传输,紧接着两个事务传输完成。我们这里一定要注意,第二个事务传输完毕之后,主机检测到没有事务了,总线同样会进入空闲状态,这里空闲了478.767us,大家自行计算。

    帧而复始,一直会这样一帧帧下去,主机就是用这种方式和各个设备数据传输的。

    3.高速USB传输(微帧)

    高速USB传输每一个微帧为125us,含义其实和上面的一样。首先我们看上一帧,首先会发送一个SOF包(帧起始包),此时USB主机检测到总线没有事务可以传输,则总线进入idel(空闲状态),这里的空闲时间124.804us,我们其实可以计算高速传输协议下发送一个SOF包的总线有效带宽时间(125us - 124.804us),大概0.2us左右,大家可能会问,为什么是0.2us,我只想告诉大家,高速USB传输的时钟为480Mhz,如果看到这里还不知道请百度下。

    紧接着我们看下一帧,同样的首先会发送一个SOF包(帧起始包),等了17.4us后,可能有事务了,紧接着USB主机会发送一个SETUP令牌包,也就是请求哪个设备哪个端点进行传输,紧接着两个事务传输完成。我们这里一定要注意,第二个事务传输完毕之后,主机检测到没有事务了,总线同样会进入空闲状态,这里空闲了98.704us,大家自行计算。

    微帧而复始,一直会这样一帧帧下去,主机就是用这种方式和各个设备数据传输的。

    1.版权归本作者(一个早起的程序员)所有;

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

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

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

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

    展开全文
  • USB封包格式

    2020-11-13 05:24:44
    也就是在1 ms的(高速是125 μS微,将1 ms切成8份)开始时,等时传输会利用SOF激活传输并达到同步传输的作用。而在每一个开始时,SOF会传给所有连接上去的全速设各(包含集线器)。因此,SOF封包并不适用于...
  • 零. 概述 本文章主要讲下蓝牙RFCOMM协议...第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等 第三篇:传统蓝牙controller介绍,主要介绍传

    零. 概述

    本文章主要讲下蓝牙RFCOMM协议(bluetooth rfcomm)的帧格式,包括Address,Control,Length Indicator,Information,FCS等

    一. 声明

    本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

    第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

    第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

    第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

    第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

    第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

    第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

    第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

    第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

    另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

    -------------------------------------------------------------------------------------------------------------------------

    CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

    蓝牙交流扣扣群:970324688

    Github代码:https://github.com/sj15712795029/bluetooth_stack

    入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

    蓝牙学习目录https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

    --------------------------------------------------------------------------------------------------------------------------

    二.RFCOMM帧格式

    2.1 参数Address:

    EA参数:这部分在蓝牙RFCOMM协议中一直为1

    C/R参数:此部分是代表RFCOMM的command还是response,官方解释如下:

    这个理解起来稍微我有绕,我翻译一下:

    C/R(命令/响应)位表示帧是命令还是响应,它的值不仅取决于帧是否携带命令或响应,还有信道的哪一端发送帧。建立连接的设备(通过在DLCI 0上发送SABM命令)称为initiator。响应的设备(通过在DLCI 0上发送UA响应)称为responder。网络上都对这个地方说明的模凌两可,对于上面的这段话其实也说的模棱两可,我来总结下:

    1)对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,initiator发送给responder,C/R=1,response相应initiator C/R也为1。

    2)对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,response发送给initiator C/R为0,initiator响应给responder,C/R=0.

    3)对于UIH帧,这个称为数据帧,initiator发送给responder,C/R=1,response发送给initiator C/R为0.

    总结图标如下:

    为了便于我上面的总结理解,那么加一个流程图,来加深你们的印象

    下面我们用BTsnopp来一一看下以上个3case:

    1)对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,initiator发送给responder,C/R=1,response相应initiator C/R也为1。

    分别解析如下:

    从截图看出是对方来连接我们signaling,所以对方是initiator,所以对方发送SABM种的C/R是1,而我们回复的UA帧中的C/R也为1

    以下例子都是以对方为initiator来说明

    2)对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,response发送给initiator C/R为0,initiator响应给responder,C/R=0.

    从1)中我们可以看到我们是responder,对方是initiator,所以按照我们发送给对方的SABM帧的C/R是0,对方回应我们的也是0

    3)对于UIH帧,这个称为数据帧,initiator发送给responder,C/R=1,response发送给initiator C/R为0.

    上图解析如下:

    可以看到对方给我们的UIH帧C/R为1,我们给对方的UIH帧C/R为0

    讲到这里你应该明白了C/R位了吧,我感觉我是全网在这里说明最清晰的。

    D参数:这个同样比较绕,我们来看下官方解释

    D其实就是DLCI中的direction bit

    网上也没有一个特别明确的说明,我自己总结了下,感觉也是比较清晰:

    建立连接的设备(通过在DLCI 0上发送SABM命令)称为initiator。响应的设备(通过在DLCI 0上发送UA响应)称为responder,这点在上面我们也已经说明了。initiator自己的D=1,responder自己的D=0,所以如果在DLCI已经建立连接后,后续initiator连接responder某一个profile的时候(比如HFP),那么应该是DCLI=0+ server chanel<<1,如果是responder连接initiator的某一个profile,那么应该是DCLI=1+ server channel<<1

    后续交互封包的UIH的DCLI一直不变

    举几个例子来说明下这里(remote是initiator,local是responder):

    来一个initiator连接responder的btsnoop

    可以发现server channel是9,那么按照算法应该是0+9<<1,所以DCLI应该是0x12

    来一个responder连接initiator的btsnoop

    可以发现server channel是13,那么按照算法应该是1+13<<1,所以DCLI应该是0x1B

    Server channel:说白了就是上层profile的rfcomm channel

    注册到SDP中,整个流程就是SDP问询对方的RFCOMM channel,然后再发起RFCOMM的连接(比如HFP,HSP,SPP,OPP等),连接完毕交互完参数,就相当于上层profile连接成功

    2.2 Control参数

    主要是标示RFCOMM frame type是什么,截图如下:

    帧分别作用如下:

    SABM:异步平衡模式设置指令 SABM 命令可以用在异步平衡模式下,并且它的控制字段只能有一个字节。设备通过首先发送 UA 应答来确认接收到 SABM命令,DLC 发送和接收状态变量都必须设定为 0。用大白话讲就是连接命令

    UA:未加编号的确认应答。 UA 应答用在设备对接收到 SABM 和 DISC 后的确认应答

    DM:断开连接模式应答。DM 应答是用来报告设备从数据链路逻辑地断开连接这么一种状态的。在断开模式下,不支持任何命令,直到收到了 SABM 命令,然后停止断开模式。在断开模式下,接收到了 DISC 命令,则要向对方发送一个 DM 应答。

    DISC:断开连接指令。用 DISC 命令可以用来结束一个正在运行或者刚刚开始的模式。它就是通知一方另一方悬置操作,设备必须假定一个逻辑断开模式。在执行这个命令之前,接收设备要通过发送 UA 应答来确认接受 DISC 命令。在DLCI0 中,DISC 命令的发送也和其他的 DLCI 具有同意的意思。

    UIH:带头校验的未编号信息命令和应答用 UIH 命令/应答可以通过不影响V(S)或 V(R)变量来相互发送信息。UIH 是用在传输一些信息的完整性没有它要在正确的 DLCI 上传输重要的情况下的。 FCS 只在地址和控制字段进行计算。 UIH用于对差错码要求不是很高的场合,如语音。

    P/F Bit:P/F是Poll/Final位

    在Commands中,被称为P(poll)位;而在Responses中则被称为F(final)位,大概用法我自己总结如下:

    1)对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,command跟response都设置为1就好。

    2)对于UIH帧,除了给对方credit设置为1外,UIH user帧以及UIH多路控制帧都设置为0就好了。

    2.3 Length Indicator参数

    L1 到 L7 位表示数据字段的长度,其默认值为 31 字节。同样,它可以根据 EA位进行扩展。当 EA=0 时,它接下来的字节如下表表示就可以表示 15 个数字。也就是RFCOMM的后续len是32~32767 byte的字节。

    2.4 Information Field参数

    UIH帧数据,只对UIH帧有效,后续再一一介绍下UIH的格式

    2.5 FCS参数

    帧校验序列(FCS)根据不同帧类型在不同域集上进行运算.下面列出需要进行帧运算的字段:

    对于 SABM、DISC、UA、DM 帧:在地址、控制和长度标志字段上进行运算;

    对于 UIH 帧:在地址和控制字段上进行运算。

    展开全文
  • 通俗易懂的UART协议帧格式

    千次阅读 2020-08-06 21:13:13
    推荐阅读: ...今天的内容关于UART的帧格式,比较简单,玩过单片机的小伙伴应该都知道。 UART的英文全称是:Universal Asynchronous Receiver/Transmitter,意为通用异步收发传输器。 UART因为有两根
  • //设置像素格式 Android上只支持NV21格式 m_camera->setViewfinderSettings(set); //包含头文件QCameraInfo QList<QCameraInfo> cameras = QCameraInfo::availableCameras();//获取可用摄像头设备列表 foreach ...
  • H264帧格式解析

    万次阅读 多人点赞 2019-02-19 19:28:49
    一般可以输出H264USB摄像头,使用的是BP-Baseline Profile,只有I与P。 H264码率控制 VBR:Variable BitRate,动态比特率,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,...
  • USB格式解析

    千次阅读 2017-09-08 17:05:15
    本文对应usb2.0协议的第八章Protocol Layer。 数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制...
  • 2、:时间概念,在USB中,一就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1分为好几份,每一份中是一个USB的传输动作。 3、上行、下行:设备到主机为上行,主机到设备为下行 下面以一问一答的...
  • USB通信协议包格式

    2020-05-20 16:28:19
    USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。 1. 包(Packet) 包(Packet)是USB系统中信息传输的...
  • WIFI:802.11协议帧格式

    千次阅读 2017-06-25 16:33:00
    802协议桢格式  802.11和Wi-Fi技术并不是同一个东西。Wi-Fi标准是802.11标准的一个子集,并且是Wi-Fi联盟负责管理  802协议桢格式: 协议发布年份/日期Op.标准频宽实际速度 (标准)实际...
  • 3. 加密(wep,wpa等)信息,QOS(quality of service)信息,若有加密的数据帧格式和没有加密的数据帧格式还不一样,加密数据帧格式还多了个加密头,用于解密用。然则QOS也是同样道理 0x1: 管理帧协议格式 (Beacon...
  • USB笔记 USB2.0 包格式Packet Formats 令牌包Token Packets 说明 介绍的是USB 2.0协议中包格式(Packet Formats)的令牌包(Token Packets)。 介绍 令牌(Token)由一个指定IN、OUT或SETUP包类型的PID字段,ADDR字段和...
  • 它通过终端应用程序软件设置串行通信参数和数据发送格式,并在信号模拟器内部形成信号闭环反馈,即将实际发送的数据通过反馈回路回送给终端应用程序软件并显示出来。文中详细介绍了USB接口芯片FT245R的工作原理及...
  • 二、测试验证双缓冲模式达到的帧率 1>测试接收一数据所需要的时间; 2>测试解析一数据所需时间; 3>测试算法处理所需时间; 4>测试压缩保存的时间; 三、测试分析: 测试发现,在机械硬盘上保存所花费的时间较...
  • USB笔记 USB2.0 包格式Packet Formats 数据包Data Packets 说明 介绍的是USB 2.0协议中包格式(Packet Formats)的数据包(Data Packets)。 介绍 数据包(data packet)由一个PID、一个包含零个或多个字节数据的数据字段...
  • 封装V4L2接口获取usb camera图像

    千次阅读 2018-10-24 22:13:21
    这里我们使用c++的方式将需要调用到的相关v4l2指令封装成一个UsbCamera类,usb camera等uvc免驱设备可以很简单的通过该类实现yuv数据流的获取处理。 首先定义一个统一的数据结构 struct VideoInfo { struct v4...
  • 摘要:从功能方块图、引脚说明、帧格式、寄存器及其控制指令等几个方面详细介绍SigmaTel公司开发的一款专用于USB与IrDA间桥接控制的新型ASIC:STIr4200S。 STIr4200S是SigmaTel公司开发的一款专用于USB与IrDA间桥接...
  • 目录 1.SOP域(Start Of Packet) ...(1)数据域格式 (2)数据域总结 6.CRC域(循环冗余校验) (1)令牌CRC (2)数据CRC (3)CRC域总结 7.EOP域(End Of Packet) 下面这张图为包的组成结构,由SOP、S
  • (2.2) 1发送字符串格式, 以 '{'开始; '}'结束; ','分隔. 共9个10进制数字 例如: {1,2,3,4,5,6,7,8,9} (2.3) 第9位 区分 Keyboard(64) 或是 Mouse(128) 命令 例如: {0,0,0,0,0,0,0,0,64} --- 发送Keyboard命令 {0,...
  • USB1.1 时间管理

    2019-06-28 01:58:36
    USB1.1中用frame来考量时间,USB2.0中添加了微microframe。每个frame代表1ms,每个microframe代表125us。某一时间单元内的非周期性传输(控制传输和批量传输)的数量要随着这个时间单元内的周期性传输(同步传输...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,538
精华内容 5,015
关键字:

usb帧格式

友情链接: projet.rar