精华内容
下载资源
问答
  • usb包
    千次阅读
    2021-11-18 20:00:37

    一个传输由多个事务组成

    一个事务由一个或多个包组成

    数据在主机和端点之间被传输,逐渐与端点的关联叫pipes。一个usb设备可以有多个管道。

    包只能在帧内传输。高速usb总线的帧周期位125us,全速和低速位1ms。帧起始为SOF,帧末尾为EOF。EOF不是一个包,是一种电平状态,EOF期间不允许有数据传输。

    包不能被打断或干扰。属于一次事务传输的几个包必须连续,不能跨帧完成,一次传输由一次到多次事务传输构成,可以跨帧完成。

    包组成:同步字段SYNC、包标识符字段PID、数据字段、循环冗余校验字段CRC、包结尾字段EOP。

    SYNC:全速/低速8位、高速32位

    lsb二进制最低有效位 msb二进制最高有效位

    PID 数据传输方向

    低速设备每个功能最多支持三根管道:端点为零的控制管道+两根额外的管道(一个控制管道和一个中断端点或两个中断端点)。全速和高速最多可以支持16个IN和OUT端点。

    帧号达到7FFH后,将归零重新开始计数。在每帧的帧首传输一次SOF包。
    DATA0和DATA1被定义位支持数据切换同步

    p0-p3,p4-p7是p0-p3的取反,校验PID

    PID1~0:01令牌包、11数据包、10握手包、00特殊包

    令牌包

    由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。

    一个IN PID定义从设备到主机的数据事务。

    OUT和SETUP PID定义从主机到设备的数据事务。

    PING PID定义从函数到主机的握手事务。

    建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。

    CRC不包括PID,在3字节的分组字段数据之后,令牌和SOF分组由EOP分隔。

    IN OUT SETUP (PING)这三个令牌包的地址字段都是设备地址+端点地址的形式组成。

    为拆分事务定义了一个特殊令牌:SPLIT,4字节令牌包。

    拆分事务令牌用于支持主机控制器与高速运行的集线器之间的分离事务,
    其中全速/低速设备与其下游的一些端口进行通信。

    启动拆分事务(SSPLIT)、完全拆分事务(CSPLIT)。

    SPLIT特殊标记中的字段指示特定的拆分事务。

    高速拆分事务有两部分:start-split 4个字节和complete-split 4个字节。

    拆分事务仅定义在主机控制器和集线器之间使用

    FS全速 LS低速

    SPLIT交易仅来自主机

    帧起始数据包
    由主机以全速1ms±0.0005ms发出一次,高速总线125us±0.0625us。
    所有高速/全速都接受SOF数据包。

    数据包

    由PID、数据字段、CRC组成
    有四种类型的数据包,由不同的PID识别:DATA0,DATA1,DATA2和MDATA。

    握手包:

    仅由PID组成,握手包用于报告数据事务的状态。
    支持流控制的事务类型才能返回握手,握手总是在事务的握手阶段返回。

    握手包四种类型:

    ACK: 表示在数据字段上没有比特填充或CRC错误的情况下接收到数据包。对于IN事务,它将由host发出;对于OUT、SETUP和PING事务,它将由device发出。

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

    STALL由函数返回,相应IN令牌或在OUT数据阶段之后响应PING事务。STALL表示函数无法传输或接收数据,或者不支持管道请求。

    NYET是一种高速握手,由高速端点返回。NYET也可以由集线器返回以响应拆分事务。

    更多相关内容
  • 图解USB协议,分为三个部分:枚举过程,数据包分析以及USB标准描述符
  • 目录 1.SOP域(Start Of Packet) 2.SYNC(同步域) 3.PID域(Packet Identifier Field) 4.地址域 (1)设备地址字段 (2)端点地址字段 (3)地址域总结 ...下面这张图为的组成结构,由SOP、S

    目录

    1.包的组成

    1.SOP域(Start Of Packet)

    2.SYNC(同步域)

    3.PID域(Packet Identifier Field)

    4.地址域

    (1)设备地址字段

    (2)端点地址字段

    (3)地址域总结

    5.帧号域

    (1)帧和微帧

    (2)帧号域总结

    6.数据域

    (1)数据域格式

    (2)数据域总结

    7.CRC域(循环冗余校验)

    (1)令牌CRC

    (2)数据CRC

    (3)CRC域总结

    8.EOP域(End Of Packet)

    2.包的分类


    1.包的组成

    下面这张图为包的组成结构,由SOP、SYNC、Packet Content、EOP四部分组成,其中Packet Content最为核心,Packet Content由PID、地址、帧号、数据、CRC组成。

    1.SOP域(Start Of Packet)

    通过将D +和D-线从空闲状态驱动到相反的逻辑电平(K状态),由始发端口发信号通知分组的开始(SOP)。 此开关级别表示SYNC字段的第一位。 当重新传输到小于±5 ns时,集线器必须限制SOP第一位宽度的变化。 通过将通过集线器的标称数据延迟与集线器的输出使能延迟相匹配,可以最小化失真。

    2.SYNC(同步域)

    SOP域之后就是同步域(SYNC)的开始,全速/低速设备SYNC被定义长度为8位(0000 0001),高速长度定义为32位(0000 0000 0000 0000 0000 0000 0000 0001)。 注意,这个长度是对发送端的要求。下图是一个全速/低速设备,经过NRZI编码后的波形。SYNC域中的最后两位是一个标记(电平未翻转,即受到数据1),用于标识SYNC域的结束和PID域的开始。

    3.PID域(Packet Identifier Field

    数据包标识符(PID)域紧跟在同步域之后。 PID由4位类型字段4位校验字段组成,如下图所示。类型字段主要是标识本包的类型,校验字段主要是对类型字段进行校验。为了确保接收端正确解码并识别包类型,发送端会对4位类型字段的每1位取补码赋值到4位校验字段里面,接收端也会进行校验操作,如果4位PID校验位不是它们各自的分组标识符位的补码,则存在PID错误。

    4位类型字段标识的所有包类型如下:

    4.地址域

    使用两个字段来处理功能端点:设备地址字段和端点地址字段。 任一字段上的不匹配设备都必须忽略该令牌, 访问非初始化端点设备也必须忽略该令牌。

    (1)设备地址字段

    如下图,ADDR<6:0>总共可访问128个地址。

    (2)端点地址字段

    如下图, 低速设备每个功能最多支持三个管道,端点号为零的控制管道加上两个额外的管道(两个控制管道,一个控制管道和一个中断端点,或两个中断端点),全速和高速每个功能最多可支持16个IN和OUT端点。

    (3)地址域总结

    地址是由两个地址构成,设备地址+端点地址

    5.帧号域

    (1)帧和微帧

    帧号域是11比特字段,其由主机在每帧的基础上递增。 帧号字段在达到其最大值7FFH时翻转,并且仅在每个帧(微)SOF令牌包发送并累加,说白了就是限时当前USB发了多少帧了。

    USB全速设备1ms产生一个帧,而高速设备每125us产生一个微帧,启动后永不间歇,如下图,图中SOF包中Frame标识了当前帧号。大家可以看我的另一篇文章USB帧和微帧剖析

    (2)帧号域总结

    6.数据域

    (1)数据域格式

    数据域的范围可以是0到1024字节,并且必须是整数个字节,下图显示了多个字节的格式,每个字节内的数据位首先从LSB移出。

     

    (2)数据域总结

    根据不同的传输类型,定义如下一次最大传输量。

    7.CRC域(循环冗余校验)

    (1)令牌CRC

    为令牌提供五位CRC字段,并覆盖IN,SETUP和OUT令牌的ADDR和ENDP字段或SOF令牌的时间戳字段。 PING和SPLIT特殊令牌还包括一个五位CRC字段。

    生成多项式为:  G(X)= X^5 + X^2 + 1

    (2)数据CRC

    数据CRC是应用于数据分组的数据字段的16位多项式。

    生成多项式是:G(X)= X^16 + X^15 + X^2 + 1

    表示该多项式的二进制位模式是1000000000000101B,如果没有错误地接收到所有数据和CRC位,则16位校验和将为1000000000001101B。

    (3)CRC域总结

    8.EOP域(End Of Packet)

    全速或低速设备的结束包:SE0状态用于发信号通知分组结束(EOP)。 通过将D +和D-驱动到SE0状态两位时间,然后将线路驱动到J状态一位时间来发信号通知EOP。 从SE0到J状态的转换定义了接收器处的分组的结束。 J状态被置位一个位时间,然后D +和D-输出驱动器都处于高阻态。 总线终端电阻将总线保持在空闲状态。

    注:SE0的意思是D+和D-都表示为低电平。

    2.包的分类

    每种类型的包组成会有所不同,按照组成所有的包会被分成帧首包SOF(Start of Frame)命令包(Token)数据包(Data)握手包(Handshake)四大类型。

    4种PID类型和4种包类型(按照组成分类)的区别如下,大家注意区分。

     


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

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

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

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

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

    展开全文
  • 使用wireshark抓取USB包

    千次阅读 2020-11-30 14:24:13
    前段时间做项目时里面用到了usb,当时usb驱动不是我写的,项目开发过程中usb驱动出现了一些bug,但写驱动的那个同事又在忙别的,所以自己硬着头皮看了一些。网上搜了大量有关于usb的资料,同时看看usb驱动的代码,然...

    原文地址::https://blog.csdn.net/shiailan/article/details/97305163

    相关文章

    1、Wireshark 抓取USB的数据包----https://www.cnblogs.com/dylancao/p/10856664.html

    2、wireshark的usb抓包分析 1 - 抓取数据----https://blog.csdn.net/pq113_6/article/details/106541581?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control

    3、wireshark的usb抓包分析 2 - 分析数据----https://blog.csdn.net/pq113_6/article/details/106548320?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control

    4、linux下usb抓包:wireshark+usbmon----https://blog.csdn.net/jfleecumt/article/details/51944457?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6.control

    5、Ubuntu 16.04使用Wireshark 抓包分析USB Audio Class 设备流程----https://blog.csdn.net/u012736557/article/details/103654884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control

    6、Linux下USB抓包工具UsbMon的使用和包数据格式解析----https://blog.csdn.net/hdmsfhfg1/article/details/106187648?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control

    7、linux下的usb抓包方法----https://blog.csdn.net/xiaojsj111/article/details/14127607?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control

     

    前段时间做项目时里面用到了usb,当时usb驱动不是我写的,项目开发过程中usb驱动出现了一些bug,但写驱动的那个同事又在忙别的,所以自己硬着头皮看了一些。网上搜了大量有关于usb的资料,同时看看usb驱动的代码,然而还是没看懂,bug也没解决(网上说usb驱动挺难得,现在看来确实是),后来bug还是写驱动的同事解决的。当时就想着有空了,一定要好好看一下usb驱动的代码。
    现在项目也算告一段落了,所以就想着回头好好看看usb驱动。学习usb驱动,抓取usb包是比不可少的。网上查阅了发现抓取usb包的工具,主要有以下三个:Bus Hound,USBlyzer 和-USBTrace,我使用的是Bus hound和USBlyzer。关于这两个工具的使用我就不在这班门弄斧了,我今天想说的是wireshark这个工具。无意中发现wireshark也可以抓取usb数据包,而且列出来的信息也比较直观。
    可能有些人的wireshark无法抓取usb包,那是因为你在安装的过程中都是一路默认下去的。所以如果想用wireshark抓取usb数据的话,可以考虑重新安装。
    在这个步骤时选中USBcap,然后其他默认安装即可:
    在这里插入图片描述
    安装成功后,打开wireshark便会出现下面的USBcap接口:
    在这里插入图片描述
    双击USBcap就可以抓取usb的各种数据包了。
    这是抓到的usb报文:
    在这里插入图片描述
    可以抓到电脑上所有usb设备的报文,如:usb鼠标、usb键盘等等
    报文太多可以通过一些过滤条件,筛选出我们需要的报文。在过滤器中输入usb.addr==“1.5.0”,即可只显示我们想要的报文(因为我想保留的usb设备的地址是5,所以addr等于1.5.0,其中0表示端点0)。
    (注:此处的过滤条件比网络的过滤条件多一个" ",网络过滤条件只需ip.addr==192.168.1.1即可)
    在这里插入图片描述
    下面便是过滤后的报文。可以看出每个所传输的数据,以及该字节所代表的意思(这样就不用hus bound抓到包后一个字节的和协议手册对照了),最下面的是整个包的内容。
    在这里插入图片描述
    (上图中的wLength:18,对应数据包中最好两个字节 12 00,数据包中都是16进制的)

     

    展开全文
  • wireshark抓取USB包

    千次阅读 2021-01-13 13:52:36
    首先下载wireshark,如果使用win7系统,不要下载最新版本...安装完成后,只要USB插入电脑并与电脑进行通信的时候,在打开wireshark的时候会监测到usb数据 流,如图下所示 选择USB进入进行USB数据通信的捕获 ...

    首先下载wireshark,如果使用win7系统,不要下载最新版本,不然安装不完整,监测usb那部分无法安装,我们这里选择了wireshark下载 v3.0.0版本就可以了

    首先百度下载好软件,点击安装,安装过程中遇到这一步,记得打钩,把usb那部分安装了,如图下所示

    安装完成后,只要USB插入电脑并与电脑进行通信的时候,在打开wireshark的时候会监测到usb数据 包流,如图下所示

    选择USB进入进行USB数据通信包的捕获

    展开全文
  • USB协议详解第18讲(USB包-初探)

    千次阅读 2021-01-19 20:18:08
    本节我们开始对USB包进行深入讲解,USB所有的传输都会被分成包进行传输,不同的包里面包含不同的多个数据域(后面一一学习),框图如下。 包的种类及说明 由域构成的包有四种类型,分别是令牌包、数据包、握...
  • 1.控制传输结构 2.设置阶段详解 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.中断传输DATA数据包实现同步操作 3.中断传输详解 3.1中断读传输抓 3.2中断写传输抓 4.中断传输小知识 1.中断传输结构 中断传输和批量传输类似,中断只由一个中断事务组成,中断...
  • 1.同步传输结构 2.同步传输DATAx数据包核心要点 3.同步传输详解 3.1同步读结构 3.1.1全速设备传输小于等于1023字节结构 3.1.2全速设备传输大于1023字节结构 3.1.3 IN令牌波形 3.1.4 数据包波形 ...
  • 则会给主机发送ACK握手包,在高速USB设备传输事务中,如果设备没有准备好,则会给主机发送NYET握手包,如果设备出错,则会给主机发送ERR握手包。 3.PING事务(只在高速传输中有) (1)主机发送PING令牌给设备功能...
  • 1.数据类的分类 数据类有DATA0数据包、DATA1数据包、DATA2数据包、DATAM数据包。 2.数据类的组成 我们今天看数据类的详细结构,数据包的内容由PID域+数据域+16bit CRC域,下图为数据包各个域和抓协议的...
  • 3.SOF发送时间及USB总线结构 1.SOF的发送时间 2.USB总线组成 4.SOF其它核心概念 5.STM32 SOF处理机制 1.的四种类型 根据的组成把分为四种类型,分别是、帧首SOF(Start of Frame)、命令...
  • 1.令牌类的分类 令牌类SETUP令牌、IN令牌、OUT令牌。 2.令牌类的组成 我们今天看令牌类的详细结构,令牌的内容由PID域+地址域+5bit CRC域,下图为令牌类包包各个域和抓协议的对应图。 2....
  • USB是串行总线,所以数据是一位...一个有被分成很多个域(field),而LSB、MSB就是以域来为单位划分的。 这里还有一个数据传输方向的问题,因为在USB系统中,主机处于主导地位,所以把设备到主机的数据叫做输入,...
  • usb包转换成wireshark 可以读取的脚本. 修改*.vmx 文件 添加如下 usb.analyzer.enable = TRUE usb.analyzer.maxLine = 8192 mouse.vusb.enable = FALSE monitor = DEBUG 注意,开启抓包后 会影响虚拟机的性能。...
  • Linux 抓USB包

    千次阅读 2016-01-11 16:42:38
    在windows上有不少抓取USB包的工具,但有种情况程序是基于linux开发的,所以。 这里内核的一个工具usbmon 和 tcpdump,这里在Ubutu下测试,其他嵌入式设备并没有测试,相信只要内核支持了问题就不大。 1....
  • 1.批量传输结构 批量传输由一个或多个批量事务组成,每一个批量事务具有令牌、数据包、握手包,如图下所示。批量事务类型的特点是能够通过错误检测和重试来保证主机和函数之间数据的无错误传递。 需要理解和...
  • USB包格式解析

    千次阅读 2017-09-08 17:05:15
    数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。 (一)域:是USB数据最小的单位,由...
  • MacOS 使用WireShark抓包USB

    千次阅读 2021-07-11 11:04:00
    MacOS 使用WireShark抓包USB安装WireShark检查是否开启SIP关闭/开启 SIP关闭SIP开启SIP开启USB端口监控获取USB设备位置ID(Location ID)WireShark抓参考资料 本人使用的OS版本是11.4,旧版本OS可能会有所不同。 ...
  • 前面章节学习了USB的简要结构组成。本节从四种分类上来学习一下他们的使用场景。   一、令牌 令牌由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。 PING特殊令牌也具有与令牌相同的...
  • linux系统USB方法

    千次阅读 2021-08-11 09:19:48
    Window系统下USB软件工具很多,但linux下USB软件较少,linux系统中可以用wireshark和tcpdump对USB数据进行抓取。Linux下Wireshark和windows版本使用方法相同,下面主要分析下tcpdump的使用方法。 使用...
  • 强大的USB分析工具,提供各种视图,很好用,常开发中难免需要抓,抓可以有很多种方式,比如之前介绍的抓神器charles。 这次我们来看看怎么利用android studio来抓。 主要的工具android studio提供的...
  • USB包组成五部分: 同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP) 设备请求命令 bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2) 我要问...
  • java访问usb

    2010-04-21 15:50:53
    java 访问的 ch.ntb.usb-0.5.7.jar libusb0.dll libusbjava.dll libusb-win32-filter-bin.exe-java package visit ch.ntb.usb-0.5.7.jarlibusb0.dlllibusbjava.dlllibusb-win32-filter-bin.exe
  • wireshark USB过滤

    千次阅读 2019-08-07 16:29:06
    wireshark是Linux下的USB抓包利器,启动抓包之后,会把同一总线的所有USB包抓下来。 如果想只看特定的设备的话就需要对数据包进行过滤。 如在上面的过滤栏中输入: usb.device_address == 12 这样下面显示的...
  • USB协议详解第17讲(USB事务总结)

    千次阅读 2021-01-18 19:55:13
    4.传输、事务、组成学习架构图 1.USB传输回顾 前面讲了四种传输的类型,包括控制传输,同步传输,批量传输,中断传输,我们在USB设备开发中,会实现所用到的每一个端点的端点描述符,每个端点描述符必须要指定...
  • USB的一个抓工具,支持热插拔,实时查看
  • USB工具,串口调试工具,以太网捕工具3个调试工具
  • USB学习系列之四——USB包结构

    千次阅读 2014-01-03 21:48:20
    1.USB的数据传输以为单位,一个包被分成不同的域。USB传输时使用的是LSB在前,MSB在后的方式。 2.不同的所包含的域是不同的,但是都有共同的特点是:以同步域开始,紧跟着一个标识符PID,最终以结束符EOP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 159,671
精华内容 63,868
关键字:

usb包