Fork me on GitHub
侧边栏

六、USB PD协议层之数据消息

数据消息应由消息头组成,后面跟着一个或多个数据对象。数据消息很容易识别,因为消息头中的Number of Data Objects字段为非零值。

有许多类型的数据对象用于组成数据消息。例如:

  • 电源数据对象(PDO),用于公开Source端口的电源功能或Sink的电源要求。

  • 汇聚端口用于协商合同的请求数据对象(RDO)

  • 用于传达供应商特定信息的供应商定义数据对象(VDO)

  • 用于PHY层合规性测试的BIST数据对象(BDO)。

  • 电池状态数据对象(BSDO),用于传达电池状态信息。

  • 警报数据对象(ADO),用于指示源或接收器上发生的事件。

数据消息中使用的数据对象类型由消息头的消息类型字段定义,并在下表“数据消息类型”中进行了总结。“send by”列表示可以发送给定消息的实体(源、接收器或电缆插头);未列出的实体不得发布相应的消息。“Valid start of packet”列表示只能在SOP数据包中发布的消息和可以在SOP*数据包中发出的消息。

image

1、Capabilities Message

能力消息(Source_Capabilities Message or Sink_Capabilities Message)应至少有一个vSafe5V的电源数据对象(PDO)。能力消息还应包含发送端口的信息,然后最多包含6个额外的电源数据对象。功能消息中的电源数据对象应按以下顺序发送:

  1. vSafe5V固定电源对象应始终是第一个对象。
  2. 剩余的固定电源对象(如果存在)应按电压顺序发送;从最低到最高。
  3. 电池供电对象(如果存在)应按照最低电压顺序发送;从最低到最高。
  4. 可变电源(非电池)对象(如果存在)应按最低电压顺序发送;从最低到最高。
  5. SPR可调电压电源对象(如果存在)应发送。
  6. 可编程电源对象(如果存在)应按照从最低到最高的最大电压顺序发送。

在下图中,Number of Data Objects字段为2,vSafe5V加上一个其他电压

image

电源数据对象(PDO)增强功率数据对象(APDO)。它们用于形成Source_Capabilities Messages和Sink_Capability Messages。

电源数据对象有三种类型。它们包含除了消息头中编码的信息之外的其他信息,用于识别三种类型的电源数据对象中的每一种:

  1. 固定电源用于公开调节良好的固定电压电源。
  2. 可变电源用于公开调节非常差的电源。
  3. 电池用于公开可直接连接到VBUS的电池。

有三种类型的增强功率数据对象:

  1. SPR可编程电源用于公开电源,其输出电压可在公布电压范围内进行编程调整,并由电源限制为可编程电流限制。
  2. SPR和EPR可调电压电源用于公开电源,其输出电压可以在公布电压范围内进行调整,但在其他方面等同于固定电压电源(AVS不支持可编程电流限制)。

电源数据对象还用于公开可能使用的其他功能,例如在电源角色交换的情况下。

电源应发送一个或多个电源数据对象的列表,以传达其功能。然后,Sink可以通过返回包含功率数据对象索引的请求数据对象来请求这些能力中的一个,以协商双方同意的合同。

如果PDO中给出了最大最小电压电流值,则应将其视为绝对值

Source和Sink不应协商允许电流超过其插座或连接插头支持的最大电流功率水平(见[USB Type-C 2.3])。电源应将其提供的功能限制为其插座和连接插头所支持的最大电压。Sink只能从Source提供的任何功能中提出请求。

Source通过发送Source_capabilities消息来公开其电源能力。Sink通过发送信宿能力消息来公开其功率需求。两者都由几个32位电源数据对象(Power Data Object)组成

image

当B31…B30是11b时,通过将功率数据对象字段从2位扩展到4位,增强功率数据对象(APDO)被定义为允许支持四种以上的PDO类型。通用APDO结构如下表

image

2、Capabilities Message的使用

2.1、被Source使用

源发送Source_Cabilities消息,作为广播端口功能的一部分,或作为对Get_Source_Cap消息的响应。

硬复位、上电事件或插头插入事件之后,Source端口应在每次SourceCapabilityTimer超时后发送Source_Capabilities消息,作为广播,由链接上的接收端口进行解释。Source应继续发送至少nCapsCount Source_Cabilities消息,直到收到GoodCRC消息。(这些计时器计数器的值会在后面的文中单独说明)

此外,只有在以下情况下,才能通过端口发送Source_Capabilities消息:

  • 通过Source端口从PE_SRC_Ready状态向该端口供电的能力发生变化。
  • 通过Source端口或双角色电源(DRP)端口响应Get_Source_Cap消息。
  • 当多端口系统中的可用电源发生变化时,即使该端口的源功能没有改变,也可以选择由PE_SRC_Ready状态的源端口执行。

2.2、被Sink使用

Sink发送Sink_Capabilities消息以响应Get_Sink_Cap消息。

在VBUS上检测到vSafe5V,并且在SinkWaitCapTimer超时后没有看到Source_Capabilities消息时,具有USB电源传输功能的Sink应发送硬重置。如果连接的电源具有USB电源传输功能,它会通过发送Source_Capabilities消息进行响应,从而允许开始电源协商。

2.3、被DRP设备使用

双角色电源设备在以源角色操作时发送Source_Capabilities消息,作为广播端口功能的一部分。双角色电源设备发送Source_Capabilities消息以响应Get_Source_CapMessage,而不管其当前的操作角色如何。类似地,双角色电源设备发送Sink_Capabilities消息以响应Get_Sink_Cap消息,而不管它们当前的操作角色如何。

3、Source_capabilities Message

Source端口应在一系列32位电源数据对象(PDO)中报告其能力(见表“电源数据对象”),作为Source_capabilities消息的一部分(见图“具有2个电源数据对象的示例能力消息”)。电源数据对象用于传达源端口提供电源的能力,包括目前作为Sink操作的双角色电源端口。

每个电源数据对象应描述特定的电源能力,如最大允许电流下的电池(如2.8-4.1V)或固定电源(如15V)。

消息头中的Number of data Object段将定义数据消息中消息头后面的电源数据对象数。所有Source极应至少提供一个报告Safe5V的电源数据对象。电源不应提供相同类型(固定、可变、电池)和相同电压的多个电源数据对象,而是应提供一个具有该电源能力和电压的最高可用电流的电源数据对象。

带配件支持的Sink不提供VBUS(请参阅[USB Type-C 2.3])。当向配件提供VCONN时,即使未应用VBUS,带有配件支持的Sink仍被视为Source;在这种情况下,他们将在第一个电源数据对象中公布最大电流设置为0mA的vSafe5V。这样做的主要目的是使带配件支持的Sink进入PE_SRC_Ready状态以进入备用模式。

SPR模式下的Sink应评估其接收到的每个Source_Capability消息,并应以RequestMessage进行响应。如果其功耗超过Source的能力,则应重新协商,以免超过Source最近公布的能力。

在SPR模式下,与PPS APDO签订明确合同的Sink应至少在每次tPPSRequest中定期重新请求PPS APDO,直到:

  • Sink请求PPS APDO以外的其他内容。
  • 存在权力角色交换(PR_Swap)。
  • 存在硬重置(Hard_Reset)。

EPR模式下接收到响应Get_Source_Cap消息的Source_Cabilities消息的Sink不应以请求消息进行响应。如果EPR模式下的Sink接收到Source_Capabilities消息,而不是响应Get_Source_Cap消息,则Sink应启动硬重置。

已接受具有可编程RDO的请求消息的Source,如果在tPPSTimeout内未接收到具有可编程RDO的请求消息,则应发出硬复位信号。Source应在以下情况后停止这种行为:

  • 接收带有固定、可变或电池RDO的请求消息。
  • 存在权力角色交换。
  • 存在硬重置。

3.1、电力储备管理

当Sink从Source Capabilities发出包括最大工作电流/功率的请求时,可以将功率储备分配给Sink。

特定Sink的功率储备大小计算为其最大工作电流/功率字段与其工作电流/电源字段之间的差值。对于具有多个端口的集线器,可以在多个Sink之间共享相同的功率储备。电源储备也可以由Sink临时使用,该Sink表示可以通过设置GiveBack标志来回馈电源。

如果功率储备已分配给Sink,则Source应将功率储备指示为其发送的每个Source Capabilities消息的一部分。当同一功率储备在多个Sink之间共享时,Source会将功率储备作为其发送给每个Sink的每个Source_Capabilities消息的一部分。每次USB电源传输Source发送包括功率储备能力的能力,然后接受来自Sink的包括由其最大工作电流/功率指示的功率储备的请求时,它确认功率储备是与Sink的明确合同的一部分。

当储备被具有回馈功能的Sink临时使用时,Source将在其发送的每个Source_Capabilities消息中显示可用的功率储备。然而,在这种情况下,当Sink请求功率储备时,Source应返回等待消息,同时使用GotoMin消息检索该功率。一旦获取了额外的功率,Source应发送一条新的Source_Capabilities消息,以触发来自请求功率储备的Sink的新请求。

Source可以在任何时候取消分配功率储备,但应通过发送新的Source_capabilities消息向使用功率储备的一个或多个Sink指示取消分配。

3.2、固定电源数据对象

下表描述了描述了固定电源(00b)PDO。

image

由于所有USB提供程序都支持vSafe5V,因此所需的vSafe5V固定电源数据对象也用于传递以位29…23返回的附加信息。所有其他固定电源数据对象应将第29…23位设置为零。

对于不提供任何功能的Source,电压(B19…10)应设置为5V,最大电流应设置为0mA。这用于双角色电源设备等情况,该设备在其默认角色中不提供任何功能,或者需要外部电源提供电源。

当Source希望消耗VBUS电源的Sink进入其最低功率状态时,电压(B19…10)应设置为5V,最大电流应设置为0mA。这用于Source希望Sink绘制pSnkSusp的情况。

3.2.1、Dual-Role Power

当端口具有双重角色电源功能时,即支持PR_Swap消息时,应设置双重角色电源位。这是一种静态功能,对于给定的设备,无论设备当前的电源角色如何,都应保持固定。

如果Source _ Capabilities Message中的Dual Role Power位设置为1,则Sink_ Capabibility Message中的双重角色功率位也应设置为1。如果Source _ Capabilities Message中的Dual Role Power位设置为零,则Sink_ Capabibility Message中的双重角色功率位也应设置为零。

3.2.2、USB Suspend Supported

在签订合同之前,或者当USB Communications Capable位设置为零时,此标志未定义,并且Sink应遵守[USB 2.0]、[USB 3.2]、[USB4]、[USB Type-C 2.3]或[USB BC 1.2]中定义的挂起规则。在协商合同之后:

  • 如果设置了支持USB挂起标志,则Sink应遵循[USB 2.0]、[USB 3.2]或[USB4]规则进行挂起和恢复。在挂起期间,PDUSB外围设备可能会占用pSnkSusp;PDUSB集线器可在暂停期间提取pHubSusp(见第7.2.3节“水槽备用”)。
  • 如果USB挂起支持标志被清除,则Sink不应应用[USB 2.0]、[USB 3.2]或[USB4]规则进行挂起,并可继续使用协商电源。请注意,当USB被挂起时,USB设备状态也会被挂起。

Sink可以通过在请求消息中设置“无USB挂起”标志向源指示他们希望清除“支持USB挂起的”标志(请参见第6.4.2.5节“无USB悬挂”)。

3.2.3、Unconstrained Power

当外部电源可用,足以在为外部设备充电时为系统提供足够的电源时,或当设备的主要功能是为外部设备供电时,应设置Unconstrained Power位。

由于外部电源,要设置无限制电源位,外部电源应为:

  • 交流电源,例如墙壁插孔,直接连接到Sink。

  • 或者,如果是PDUSB集线器:

    • 具有无约束功率位设置的PD源。
    • 多个PD源,所有这些源都设置了无约束功率位。

3.2.4、USB Conmunication Capable

应仅为能够通过USB数据线(例如D+/-或SS Tx/Rx)进行通信的Source设置USB Conmunication Capable(USB通信能力)位。

3.2.5、Dual Role Data

当端口具有双重角色数据功能时,即支持DR_Swap消息时,应设置Dual Role Data位。这是一种静态能力,对于给定的设备,无论设备当前的电源角色或数据角色如何,都应保持固定。如果Source _ Capabilities消息中的Dual Role Data位设置为1,则Sink_ Capabibility消息中的双重角色数据位也应设置为1。如果Source_Capabilities消息中的Dual Role Data位设置为零,则Sink_Capability消息中的双重角色数据位也应设置为零。

3.2.6、Unchuncked Extended Message Support

当端口可以在单个未阻塞消息中发送和接收数据大小>MaxExtendedMsgLegacyLen字节的扩展消息时,应设置Unchuncked Extended Message Support位。

3.2.7、ERP Mode Capable

EPR模式可编程能力是一种静态能力,如果电源设计为供电功率超过100W并在EPR模式下运行,则应设置该能力。

当设置此位时,EPR Source:

  • SPR模式下的操作应仅发送EPR_Source_Cabilities消息以响应EPR_Get_Source_Cap消息
  • 只有当Cable和Sink也报告它们具有EPR功能时,才能进入EPR模式。

3.2.8、Peak Current

USB电源输送固定电源只需要输送RDO的操作电流(IOC)字段中要求的电流量。然而,在某些用途中,例如计算机系统,其中存在短脉冲串,在活动的情况下,可能希望短时间内使电源过载。

例如,当计算机系统试图维持平均功耗时,峰值电流越高,维持这种平均功率所需的低电流(见第7.2.8节“吸收-峰值电流操作”)周期就越长。峰值电流字段允许电源公布此附加功能。此功能仅用于直接端口到端口连接,不应通过集线器提供给下游接收器。

每个固定电源PDO应包含一个峰值电流场。想要提供一组过载能力的电源应通过相应的固定电源PDO中的峰值电流字段进行公告(见下表6.10“固定电源峰值电流能力”)。不支持过载能力的电源应在相应的固定电源PDO中将这些位设置为00b。

支持Source_Capabilities_Extended消息的峰值电流1…3字段中指定的扩展过载能力的电源(见第6.5.1节“源_能力-扩展消息”)也应将这些位设置为00b。希望使用这些扩展功能的Sink应首先发送Get_Source_Cap_extended消息,以确定Source支持哪些功能(如果有的话)
image

3.3、可变电源(非电池)电源数据对象

下表6.11“可变电源(非电池)PDO–电源”描述了电源的可变电源(无电池)(10b)PDO。电源的电气要求见第7.1.3节“电源类型”。

image

电压字段应定义输出电压应在的范围。这并不表示将提供的电压,但应在该范围内。绝对电压,包括任何电压变化,不得低于最低电压,也不得超过最高电压。最小电压不得低于最大电压的80%。

3.4、电池电源数据对象

下表6.12“电池电源PDO–电源”描述了电源的电池(01b)PDO。电源的电气要求见第7.1.3节“电源类型”。

电压字段应代表电池的电压范围。电池应能够在整个电压范围内提供功率值。绝对电压,包括任何电压变化,不得低于最小电压,且不得超过最大电压。

注意:电池PDO使用电力而不是电流。

Sink可以监测电池电压。

image

3.5、增强功率数据对象

电压字段定义了输出电压范围,在该范围内,电源应在SPR PPS模式下以20mV步长进行调节,在SPR AVS模式和EPR AVS模式下以100mV步长进行调整。最大电流字段包含可编程电源应能够在公布电压范围内提供的电流。电源的电气要求见第7.1.3节“电源类型”。

3.5.1、SPR可编程电源APDO

下面的表6.13“SPR可编程电源APDO–电源”描述了在SPR模式下工作并提供5V至21V电源的SPR可编程供电电源(1100b)APDO。

image

3.5.2、PPS电力限制

设置PPS功率受限位时,SPR PPS Source的操作方式应与PPS功率有限位清除时相同(见第7.1.4.2节“SPR可编程电源(PPS)”),但以下情况除外:

  • 可在图7-9“SPR PPS恒定功率”中的可选操作区域内提供超过电源额定PDP的功率。

SPR PPS Source不得拒绝输出电流小于或等于APDO中最大电流的RDO,即使请求的输出电流大于电源的PDP/请求的输出电压。

当PPS功率限制位被清除时,SPR PPS源应提供最大电流,最高可达APDO中公布的最大电压。

3.5.3、EPR可调电压电源APDO

下表6.14“EPR可调电压源APDO–电源”描述了在EPR模式下运行并提供15V至48V电源的EPR可调电源(1101b)APDO。

image

3.5.3.1、PDP

PDP字段应包含AVS端口的PDP。

有关AVS APDO中PDP如何与最大可用电流相关的更多信息,请参见第10.2.3.3节“可选规范性扩展功率范围(EPR)”和图10-6“有效EPR AVS操作区域”。

posted @ 2025-04-30 11:44  yooooooo  阅读(604)  评论(0)    收藏  举报