0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据包的结构及传输过程

单片机匠人 来源:单片机匠人 作者:单片机匠人 2022-03-11 09:19 次阅读

今天我们来详细地说说数据包的结构以及它们的传输过程。USB是串行总线,所以数据是一位一位地在数据线上传送的。既然是一位一位地传送,就存在着一个数据位先后的问题。usb使用的是LSB在前的方式,即先出来的是最低位数据,接下来是次低位,最后是最高位(MSB)。一个包,又被分成了很多个域(field),而LSB、MSB就是以域为单位来划分的。

前面说过,USB数据在发送到总线上之前,要先经过位填充,再经过NRZ1编码。在这里讨论时,所用的数据都是原始的数据,即没有经过位填充和NRZ编码的原始数据。以后也是如此,凡是没有明确说明是位填充或NRZI编码过的数据,默认为原始的数据。另外还有一个数据传输方向的问题,因为在USB系统中,主机处于主导地位,所以把从设备到主机的数据叫做输入,从主机到设备的数据叫做输出。

USB总线上传输数据是以包为基本单位的。一个包被分成不同的域。根据不同类型的包,所包含的域是不一样的。但是不同的包有个共同的特点,就是都要以同步域开始,紧跟一个包标识符PD( Packet Identifier),最终以包结束符EOP(End Of Packet)来结束这个包。

同步域是用来告诉USB的串行接口引擎数据要开始传输了,请做好准备。除此之外,同步域还可以用来同步主机端和设备端的数据时钟,因为同步域是以一串0开始的,而0在USB总线上就被编码为电平翻转,结果就是每个数据位都发生电平变化,这让串行接口引擎很容易就能恢复出采样时钟信号;对于全速设备和低速设备,同步域使用的是0000001(二进制数,线上的发送顺序);对于高速设备,同步域使用的是31个0,后面跟1个1(需要注意的是,这是对发送端的要求,接收端解码时,0的个数可以少于这个数)。

图1是一个全速或者低速USB数据包的同步域经过NRZ编码后的波形。这个波形有7次电平翻转,即对应着7个0,最后一个电平不翻转,即对应着1个1当串行接口引擎检测到一个位的数据未发生翻转后(即收到数据1),就认为包标识符PID开始了,如图1.9.1中的PID0PD1,就是包标识符的最低两位。

cfaa03a4-894d-11ec-952b-dac502259ad0.jpg

cfc05302-894d-11ec-952b-dac502259ad0.png

图1 全速设备和低速设备的同步域

包结束符EOP,对于高速设备和全速/低速设备也是不一样的。全速/低速设备的EOP是一个大约为2个数据位宽度的单端0(SE0)信号。SE0的意思就是,D+和D同时都保持为低电平。由于USB使用的是差分数据线,通常都是一高一低的,而SE0不同,是一种都为低特殊的状态。SE0用来表示一些特殊的意义,例如包结束、复位信号等。前面提到USB集线器对USB设备进行复位的操作,就是通过将总线设置为SE0状态大约10ms来实现的。对于高速设备的EOP,使用故意的位填充错误来表示。那么如何判断一个位填充错误是真的位填充错误还是包结束呢?这个由CRC校验来判断。如果CRC校验正确,则说明这个位填充错误是EOP;否则,说明传输出错。具体的定义请参看USB协议,这里只要知道有EOP这么一个东西就行了。

包标识符PID是用来标识一个包的类型的它总共有8位,其中USB协议使用的只有4位(PID~PID3),另外4位(PI4~PID7)是PID~PD3的取反,用来校验PID。USB协议规定了4类包,分别是令牌包(token packet,PD1~0为01)、数据包( data packet,pid1~0为11)、握手包(handshake packet,piD~0为10)和特殊包( special packet,PiD1~0为00)。不同类的包又分成几种具体的包。图2 是USB2.0协议中规定的各种PID,其中有些是在USB1.1协议中没有的,用号标出。

cfaa03a4-894d-11ec-952b-dac502259ad0.jpg

cff19b42-894d-11ec-952b-dac502259ad0.png

图2 USB2.0中定义的各种PID

以上是数据包的结构以及它们传输的过程,今天的分享就到这里。

往期回顾:

●USB的四种传输类型之控制传输

●指针和数组的恩恩怨怨

●USB的四种传输类型之中断传输等时传输

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    7890

    浏览量

    263949
  • 数据包
    +关注

    关注

    0

    文章

    252

    浏览量

    24360

原文标题:USB的包结构以及包的类型

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    华纳云:服务器平均响应时间和数据包大小之间的影响

    服务器的平均响应时间与数据包大小有一定的关系,但这只是影响响应时间的众多因素之一。具体来说,数据包大小对服务器响应时间的影响可以从以下几个方面来理解: 1.数据传输时间 影响: 较大的数据包
    的头像 发表于 10-10 14:01 176次阅读

    请问DCTCP与DCUDP 的登录数据包和心跳数据包与服务器端是如何交互的?

    DCTCP与DCUDP的登录数据包和心跳数据包与服务器端是如何交互的?
    发表于 07-25 06:37

    esp8266怎么做才能每秒发送更多的数据包呢?

    数据包的速度,即每秒大约 50 个 UDP 数据包。高波特率唯一改变的是,在数据包较大的情况下,我可以以与轻量级数据包相同的速度发送数据包
    发表于 07-22 08:00

    使用AT SAVETRANSLINK时UDP数据包丢失怎么解决?

    Android 发送一个小 UDP 数据包(5 字节)。这个小数据包被我的微控制器在UART上接收到。微控制器将更大的数据包(可变长度,约 100 字节)发送回 UART。ESP在UART上接
    发表于 07-18 07:17

    能否在ESP结束之前通过串行端口停止传入的UDP数据包传输以解析下一个UDP数据包

    丢弃在ESP完成之前不需要的数据包,以便通过串行端口发送它以接收下一个数据包, 如果没有,我必须按顺序读取所有传入的数据包,需要的和不需要的, 而且波特率不足,主机处理器开销大, 我能否在 ESP 结束之前通过串行端口停止传入
    发表于 07-16 06:18

    NONOS如何检查是否实际发送了UDP数据包

    我发现进入深度睡眠通常无法传输发送的最后一个 UDP 数据包。我现在将睡眠延迟 30 毫秒,这是一个黑客。 我宁愿有一种方法来检查是否可以休眠,或者以其他方式能够注册指示数据包已发送的回调(无线电发送缓冲区为空)。 说清楚:
    发表于 07-12 06:14

    can总线的数据传输过程是什么

    CAN总线(Controller Area Network)是一种用于汽车和工业控制系统的通信协议。它具有高可靠性、实时性和灵活性,因此在许多领域得到了广泛应用。本文将详细介绍CAN总线的数据传输过程
    的头像 发表于 06-16 10:18 2342次阅读

    在AN65974中短数据包和零长数据包是什么意思?

    在 AN65974 中,短数据包和零长数据包是什么意思? 非常感谢!
    发表于 05-30 07:41

    在Fx3控制器中,USB数据包中的数据有效载荷无法正常发送的原因?

    在 Fx3 控制器中,在流式传输过程中,从主机收到了意外的端点停止请求。 在调试过程中,我发现 USB 数据包中的数据有效载荷无法正常发送,请问出现这种错误的原因是什么。 下面附有错误
    发表于 05-28 06:37

    如何在AIROC GUI上获取良好数据包和总数据包

    使用 IQxel-MW LifePoint 作为发生器并发送波形BT_1DH5_00001111_Fs80M.iqvsg,但无法在 AIROC 工具中接收数据包。 以下是从 IQxel 发送
    发表于 05-22 06:39

    如何确保DMA传输过程中的数据都是好的?

    有没有哪位大佬清楚DMA原理的 想请教下,芯片厂是如何确保DMA传输过程中的数据都是OK的 比如传输前后SRAM里面的数据不变,传输出来的
    发表于 04-12 06:23

    请问高端网络芯片如何处理数据包呢?

    随着网络芯片带宽的持续提升,其内部数据包处理单元的工作负载也随之增加。然而,如果处理单元无法与网络接口的传入速率相匹配,将无法及时处理数据包,这不仅会导致数据包随机丢失,更会降低网络的吞吐量。
    的头像 发表于 04-02 16:36 581次阅读
    请问高端网络芯片如何处理<b class='flag-5'>数据包</b>呢?

    DPDK在AI驱动的高效数据包处理应用

    传统的数据包处理方式是数据包先到内核最后再到用户层进行处理。这种方式会增加额外的延迟和CPU开销,严重影响数据包处理的性能。 DPDK 绕过内核,在用户空间中实现快速数据包处理。
    的头像 发表于 02-25 11:28 858次阅读
    DPDK在AI驱动的高效<b class='flag-5'>数据包</b>处理应用

    使用P4和Vivado工具简化数据包处理设计

    电子发烧友网站提供《使用P4和Vivado工具简化数据包处理设计.pdf》资料免费下载
    发表于 01-26 17:49 0次下载
    使用P4和Vivado工具简化<b class='flag-5'>数据包</b>处理设计

    网络丢率正常范围及其影响因素

    网络丢率正常范围及其影响因素 网络丢率是评估网络性能和稳定性的重要指标之一。 一、网络丢率的定义和测量方法 网络丢率是指在数据传输过程
    的头像 发表于 12-29 14:45 5648次阅读