四、USB PD协议层之消息

news/2024/12/31 7:32:23/文章来源:https://www.cnblogs.com/linhaostudy/p/18638726

先来看看协议层主要做什么事情:
本章描述了USB电源传输规范协议层的要求,包括:

  • 如何构建和使用消息的细节。
  • 计时器和超时值的使用。
  • 使用消息和重试计数器。
  • 复位操作。
  • 错误处理。
  • 状态下的行为。(状态机)

1、Message

先来了解一下Message,本规范定义了三种类型的Message:

  • 控制消息是比较短的并且用来管理两个端口之间的信息流或者不需要额外数据的信息交换,控制消息是16bit长度

  • 数据消息是用来在两个端口之间交换信息的,数据消息的长度范围在48-240bit

    • 有三种类型的数据消息
      • 用来展示能力和协商电力
      • 用来BIST
      • 供应商定义的
  • 扩展消息被用来在两个端口之间交换信息,数据长度最大为260bit

    • 有几种类型的扩展消息
      • 用于Source和电池信息
      • 用于安全
      • 用于固件更新
      • 用于供应商定义

2、Message构建

所有消息应由消息头可变长度(包括零)数据部分组成。消息源自协议层并传递到物理层,或者它由物理层接收并传递到协议层。
下图说明了一个控制消息作为一帧数据包的一部分,显示了由协议层和物理层提供的部分。

下图说明了一个数据消息作为一帧数据包的一部分,显示了由协议层和物理层提供的部分。

下图说明了一个扩展消息作为一帧数据包的一部分,显示了由协议层和物理层提供的部分。

3、Message Header

如下表“消息头”所定义。消息头包含有关消息和PD端口功能的基本信息。

1)Extended

1个bit,为1是扩展消息,为0是控制消息或者数据消息

2)Number of Data Objects

当Extended为0,此字段表示为32bit数据对象个数,此字段为0,消息是控制消息,非0,消息是数据消息。

当Extended和Chunked都为1,此字段表示包括扩展头在内的32bit数据对象个数。

当Extended为1,Chunked为0,此字段被保留,数据长度由扩展消息头中的Data size决定。

关于chunked字段和扩展头后面会说到。

3)Message ID

此字段的值由消息的发起者维护的一个滚动计数器生成,由于软复位或硬复位,消息计数器应在开机时初始化为零。MessageIDCounter应在成功接收到消息时递增,如收到GoodCRC消息。

4)Port Power Role / Cable Plug

此字段表示当前端口的电源角色
0b:sink
1b:source

在电源角色交换序列期间(PR_swap),对于初始Source端口,PS_RDY消息中的端口电源角色字段应设置为Sink,指示初始Source的电源已关闭

在电源角色交换序列期间,对于初始Sink端口,在接收到来自初始Source的PS_RDY消息后,策略引擎发送的消息的端口电源角色字段应设置为Source

在快速角色交换序列中(FR_swap),对于初始Source端口,在PS_RDY中消息端口电源角色字段应设置为Sink,表明VBUS不是由初始Source驱动的,并且在vSafe5V范围内。

在快速角色交换序列期间,对于初始Sink端口,策略引擎在从初始Source接收到PS_RDY消息后发送的消息,端口电源角色字段应设置为Source。

注意,由初始Sink发出的GoodCrC对初始Source发出的PS_RDY做出回复,将端口电源角色字段设置为Sink因为这是由协议层发起的,后续消息由策略引擎发起,例如发送来指示VBUS已经准备好的PS_RDY消息,将有端口电源角色字段设置为Source。

接收到的消息的端口电源角色字段不应由接收方验证,如果它不正确,也不应该导致软重置、硬重置或错误恢复。

5)Specification Revision

此字段的值应该是下列之一(11b除外):

  • 00b –Revision 1.0
  • 01b –Revision 2.0
  • 10b – Revision 3.0
  • 11b – _Reserved, Shall Not _be used.

在**GoodCRC消息中 此字段没有任何意义 **
在协商期间版本的协同可以参考下表:

6)Port Data Role

此字段表示端口的当前数据角色:
0b:UFP
1b:DFP

如果端口接收到的消息中的端口数据角色字段设置为与其当前数据角色相同的数据角色,除GoodCRC消息外,应执行错误恢复操作。

对于USBType-C®端口,端口数据角色在硬重置后的连接中,端口角色字段应设置的默认值:

Rd决定端口为0b,
Rp决定端口为1b。

如果端口支持USB通信,在连接Source端口默认为DFP,Sink端口默认为UFP。

7)Message Type

此字段表示为将要发送消息的类型,要完全解码消息类型,首先要检查并确定Number of Data Objects字段是控制消息还是数据消息。

4、Extended Message Header

每个扩展消息都应该包含一个跟在Message Header之后的扩展消息头。
扩展消息头用来支持包含Data Size大小的数据块的扩展消息,也可以作为单个消息或者一系列的块发送,当数据块作为一系列的块发送,系列中的每个块除了最后一个都应该包含块能承受的最大字节数,最后一个块应包含剩余数据部分并做4字节填充。

1)Chunked

在Source_Capabilities Message和Request_ _Message端口应该使用未分块的扩展消息支持的字段来决定在一条未分块的扩展消息中是否发Data Size>MaxExtendedMsgLegacyLen字节的消息

当任何一个端口仅支持分块扩展消息时:

  1. 每个扩展消息的Chunked字段设置为1
  2. Data Size > MaxExtendedMsgLegacyLen的扩展消息应在端口之间分组传输
  3. 消息头中的Number of Data Objects应表示消息中 填充到4字节边界并包含扩展头作为第一个数据对象的一部分 的数据对象的数量(也就是从扩展头开始,4字节作为一个数据对象)

当两个端口都支持未分块的扩展消息时:

  1. 每个扩展消息的Chunked字段设置为0
  2. 每个扩展消息应该在两个端口之间进行不分块的传输
  3. 消息头中的Number of Data Objects字段保留,不使用

向电缆插头发送扩展信息时,VCONN 信号源只能发送分块信息。电缆插头应始终以分块方式发送Data Size>MaxExtendedMsgLegacyLen 的扩展消息,并应在每个扩展消息中将Chunked设置为 1。

2)Chunked Number

只有当Chunked设置为 1 时,Chunked Number字段才在消息中有效。如果Chunked设置为 0,则Chunked Number字段也应设置为0。

根据消息是请求数据还是返回请求的数据块,Chunked Number字段的使用方式有所不同:

  1. 在数据请求中,Chunked Number字段表示所请求数据块的编号。请求方 只能将该字段设置为系列中下一个数据块的编号(上一个接收到的数据块之后的下一个数据块)。
  2. 在请求的数据块中,Chunked Number字段表示返回的数据块的编号。系列中每个数据块的数据块编号应从 0 开始,每个数据块递增 1 个,最多不超过 9 个,即总共 10 个数据块。最大为 9,即总共 10 个数据块。

3)Request Chunk

当Chunked为1,此字段仅被用作扩展消息的分块传输,对于扩展消息的未分块传输,应在没有请求/响应机制的情况下发送和接收消息

Request Chunk位应设置为1,以指示这是对数据块的请求,并且应设置为0以指示这是包含Chunk的Chunk响应。除了Chunk zero,请求的数据块只能作为块对该块的相应请求的块响应返回,块请求和块响应应该包含相同的Message Type字段值,当Request Chunk位设置为1时,Data Size字段应为零。

4)Data Size

此字段应指示返回的数据块中总共有多少字节的数据。总计消息中的数据字节数不得超MaxExtendedMsgLen。

如果Data Size字段 < MaxExtendedMsgLegacyLen并且设置了Chunked位,则数据包有效载荷应使用零(0x00)填充到下一个4字节的数据对象边界。(保证数据对象为4字节,不足4字节补0)

5)扩展消息示例

下面举例说明扩展消息分块和未分块的区别,示例使用数据大小为7字节的Security_Request消息,该消息
由数据大小为30字节的Security_Response消息响应
下图显示了总线上的字节顺序,以及此中没有填充的事实案例“Number of Data Objects”字段的值为0,因为它在Chunked为0时被保留。Data Size字段指示当Chunked位设置为0时扩展消息的长度,在这种情况下为7字节。这种为未分块传输

下面我们说明分块传输,下图为一个分块传输的块响应,可以看到Data size为30,已经超过MaxExtendedMsgLegacyLen(26字节),所以之传输最大26字节,剩余4个字节,下次传输

传输剩下的4个字节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860839.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决方案 | 如何实现右键添加【管理系统环境变量】,更加方便快捷的直达环境变量修改页面?

实现如上效果。 本地新建一个bat文件,代码如下:(懒得编辑的直接下载做好的右键管理员身份运行就行:https://wwnb.lanzoul.com/il4DK2jbhwbi )@echo off :: 设置菜单名称、命令和图标路径 set "menuName=管理系统环境变量" set "command=mshta vbscript:cr…

服务器是否禁止了POST请求?

,服务器并没有全局禁止POST请求。通常情况下,服务器是否允许POST请求取决于具体的配置和应用程序的设置。以下是一些可能导致POST请求无法正常发送的原因及解决方法:防火墙或安全组设置:检查服务器上的防火墙或云服务提供商的安全组设置,确保没有阻止POST请求所需的端口(…

FTP登录不了(修改密码,重启后仍然无法登录)

您好,关于您提到的“FTP无法登录服务器,修改过管理密码后仍然无法登录”的问题,我们来详细分析一下可能的原因及解决方案。 FTP登录失败可能是由多种原因引起的,特别是在修改密码和重启服务器之后。以下是几个可能的原因及相应的解决方法:密码修改未生效:修改密码后,有时…

请问网站无法在外网访问怎么办

当您遇到网站无法在外网访问的情况时,这可能是由多个因素引起的。以下是详细的排查步骤和建议:检查域名解析: 首先,请确保域名已经正确解析到服务器的IP地址。您可以使用ping或nslookup命令检查域名解析是否正常。如果域名解析有问题,可能会导致外网无法访问。请确认DNS记…

无限制观看,宝宝巴士儿歌TV

点击上方蓝字睿共享关注我 前言 在现今这个应用繁多的市场中,许多同类软件都设置了付费门槛,这让家长们在挑选时感到不小的负担。但这款应用却与众不同,它完全免费,无需登录,更全程无广告打扰,为家长们提供了一个轻松无忧的选择 安装环境 [名称]:宝宝巴士儿歌 [大小]:2…

越关山——一次全新的尝试和突破

一.蓦然回首 作业一:对aigc熟悉和博客园以及GitHub使用 这份作业是接触软工课程的第一个作业。github和aigc工具早已经有了接触。在平时的写代码和完成部分作业任务时已经接收了不少的ai帮忙,ai已经彻底地改变了我们的生活,改变着学习和工作,所以如何更好地使用ai恐怕在将来…

运算放大电路

虚短和虚断的概念

【PbootCMS】测试邮件标题怎么修改(邮箱配置说明)

不喜欢默认的标题样式, 希望自定义相关参数, 可以通过修改核心文件处理。 红色标记区域代码, 可以根据实际需求修改。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站…

一文搞定宝塔LINUX部署上线前后端分离项目

一文搞定宝塔LINUX部署上线前后端分离项目 地址:http://82.156.126.178/ 部署方案: 宝塔Linux,腾讯云服务器2核2G3M,数据库使用腾讯云托管平台mysql 1.跨域问题解决 首先前端区分线上环境和开发环境,主要是请求地址不一样 import axios from axiosconst prefix=process.en…

Windows10 64环境下用Qt5.12.12自带的mingw730_64构建编译OpenCV4.1.0时cmake-3.20.6中的参数配置

一、环境条件说明: 操作系统:Windows10 64环境 编译工具:用Qt5.12.12自带的mingw730_64构建 构建对象:编译OpenCV4.1.0的Release 64位和Debug 64位动态链接库 构建工具:CMake中的参数配置 二、cmake-3.20.6中的参数配置 1、按照下图配置好OpenCV4.1.0的源代码目录和构建编…

闲着没事,用STC12C5616AD制作一个74hc595测试仪

手头有些特别廉价的直插74hc595,怕这些595因为廉价而质量不过关,因而萌发了制作一个测试仪的想法。 用测试仪先对595进行测试,功能正常了,再接入电路应用。 该测试仪能自动向595写入数据,再读出输出数据进行比对,如果读出的并口数据与串行写入的数据不同,说明该IC损坏或…

控制流平坦化初了解(持续更新)

对于平坦化的学习控制流平坦化初了解 原理 借助LLVM(一个底层虚拟机项目,我目前不理解虚拟机这个概念)这个项目,目前理解为类似于一个编译器的东西,把源码通过各式各样的复杂的语义分析翻译成另一个玩意. 但原本是拿来优化的,然后做安全的人拿来改为混淆,就是OLLVM项目,做安全不…