前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >USB Type-C PD spec (3)

USB Type-C PD spec (3)

作者头像
Jasonangel
发布2023-08-22 14:10:46
2560
发布2023-08-22 14:10:46
举报

3、协议层

3.1、消息类型
  • 控制消息
    • 长度固定,16 位
  • 数据消息
    • 长度在 48 ~ 240 位
    • 用于公开能力和协商功率
    • 供应商可自定义
  • 扩展消息
    • 长度最大达 260 byte
    • 提供电源和电池信息
    • 用于安全
    • 用于固件更新
3.2、消息头
3.3、控制消息
3.4、数据消息
Capabilities Message
  • 包含端口信息 + 最多 6 个 PDO
  • SRC 发送 Source_Capabilities 来通告其供电能力
  • SNK 发送 Sink_Capabilities 来通告其吸电需求
  • 分类
    • PDO
      • 固定电源(稳定恒压)
      • 可变电源 (稳压较差)
      • 电池 (可直接连接 VBUS)
    • APDO
      • 可编程电源(PPS,在电压可输出范围内以编程方式调节)
  • 消息中 PDO 的顺序
    • vSafe5V 固定电源对象应始终是第一个对象
    • 其余固定电源对象 (如果存在) 应按电压顺序发送:最低到最高
    • 电池供电对象(如果存在) 应按最低电压顺序发送:最低到最高
    • 可变电源 (非电池) 对象 (如果存在) 应按最低电压顺序发送:最低到最高
    • 可编程电源对象(如果存在)应按最大电压顺序发送:最低到最高
  • 使用场景
    • Source_Capabilities
      • 用于通告 SRC 的供电能力
      • 在 HardReset、上电事件或插入事件后,SourceCapabilityTimer 超时后发送,至少发送 nCapsCount 个,直到收到 GoodCRC
      • 在 PE_SRC_Ready 状态下供电能力变化时发送
      • 在收到 Get_Source_Cap 后发送
      • 多端口系统中,可用功率变化时可发送
    • Sink_Capabilities
      • 用于通告 SNK 的吸电需求
      • 在收到 Get_Sink_Cap 时发送

Source_Capabilities Message

  • SPR 模式
    • SNK 接收到 SRC_CAP,评估并以 Request 响应
    • SNK 请求了 PPS APDO 后,应每隔 tPPSRequest 定期重新请求 APDO,除非
      • SNK 请求的不是 ADPO
      • 发生了 PR_Swap/HardReset
  • EPR 模式
    • SRC_CAP 只能是对 Get_Source_Cap 的回应,且 SNK 不能发送 Request 响应
    • 在 EPR 模式下收到 SRC_CAP 消息,如果不是对 Get_Source_Cap 消息的响应,则 SNK 应启动硬复位
  • 固定电源 PDO (Bit31...30 = 00b)
    • vSafe5V PDO bit29...25 用于传递附加信息
    • 其余 PDO bit29...25 置为 0
  • 可变电源 PDO (Bit31...30 = 10b)
    • 电压不稳定,但固定在一定范围内
    • 最低电压不得低于最高电压的 80%
  • 电池 PDO (Bit31...30 = 01b)
    • 电压字段表示电池的电压范围
    • 电池应能够在整个电压范围提供指定的功率
    • 仅电池 PDO 提供功率而非电流
  • APDO (Bit31...30 = 11b)
    • SPR PPS APDO
    • EPR AVS APDO

Sink Capabilities Message

  • 固定电源 PDO (Bit31...30 = 00b)
    • vSafe5V PDO bit29...25 用于传递附加信息
    • 其余 PDO bit29...25 置为 0
  • 可变电源 PDO (Bit31...30 = 10b)
    • 电压字段表示 SNK 运行所需的电压范围
    • 电流字段表示 SNK 运行所需的工作电流(最大电流)
  • 电池 PDO (Bit31...30 = 01b)
    • 电压字段表示 SNK 运行所需的电压范围
    • 功率字段表示 SNK 运行所需的工作功率(最大功率)
  • APDO (Bit31...30 = 11b)
    • SPR PPS APDO
    • EPR AVS APDO
Request Message
  • 由 SNK 发送以请求功率,发生在 SPR 模式下
  • 固定电源 RDO
  • 可变电源 RDO
  • 电池 RDO
  • 可编程 RDO
3.5、扩展消息

扩展消息头 (Extended = 1b)

  • chunked:是否分块,默认应支持分块
    • 从 Source_Capabilities 和 Request 消息确认 SRC 和 SNK 是否支持不分块
    • 当存在一个端口仅支持分块时,则端口间只能分块发送 Data Size > 26 byte 的扩展消息
    • 向电缆插头发送扩展消息仅支持分块处理
  • Chunked Number:块编号
    • Chunked = 1 时,有效
    • Chunked = 0 时,设置为 0
    • 在请求类消息中,表示所要请求的块编号
    • 在回复请求类消息中,表示回复请求的块编号
  • Request Chunk:是否为请求块
    • Chunked = 1 时,有效
    • Chunked = 0时,设置为 0
  • Data size:数据块中的字节数
扩展消息实例(不分块处理)

请求: Security_Request(Data Size = 7)

响应: Security_Response(Data Size = 30)

扩展消息实例(分块处理)

请求: Security_Request(Data Size = 7)

响应: Security_Response(Data Size = 30)

3.6、定时器
  • 用于规定通讯时的时序
  • 分类
    • 策略引擎的定时器
    • 协议层的定时器
3.7、计数器
  • MessagelDCount
    • 滚动计数器,0~7,用于检测重复消息
      • 接收方收到重复的消息,仍需回应 GoodCRC,但 MessagelD 不变
    • 发送方和接收方各自维护
  • RetryCounter
    • 在重试过程中收到合适的响应,计数器应重置为 0
  • 硬复位或软复位后重置为 0
3.8、Reset

数据复位

  • 任一端口用于重置 USB 数据链路
  • 影响
    • 不改变端口的电源角色和数据角色
    • 不改变现有显性契约
    • 须退出所有的活动模式
    • 须重置电缆 VCONN,DFP 须成为 VCONN SRC
  • 复位失败则进入 ErrorRecovery 状态

电缆复位

  • 只有 DFP 才能发起电缆复位,且 DFP在发起复位前须成为 VCONN SRC
  • 会导致电缆插头退出所有活动模式

软复位

  • 解决通讯协议出错的问题
  • 影响
    • 物理层:不需要重置
    • 协议层: 重置 MessagelDCounter、RetryCounter 和状态机。
    • 策略引擎:通过建立显性契约重置依赖于状态的行为。
      • 注:在 SPR 模式下,源发送源能力信息;在 EPR 模式下,源发送 EPR 源能力信息
    • 电源:不改变

硬复位

  • 电源恢复到默认状态(VBUS -> vSafe0V -> vSafe5V),协议层软复位
  • 无论在 SinkTxOK 还是 SinkTxNG 均可发起。
  • VCONN SRC 复位为 SRC 提供
  • 不改变 Rp/Rd 的状态
  • 复位无法解决问题时须进入 ErrorRecovery 状态
3.9、消息丢弃机制

优先级:SOP > SOP'/ SOP''

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.1、消息类型
  • 3.2、消息头
  • 3.3、控制消息
  • 3.4、数据消息
    • Capabilities Message
      • Request Message
      • 3.5、扩展消息
        • 扩展消息实例(不分块处理)
          • 扩展消息实例(分块处理)
          • 3.6、定时器
          • 3.7、计数器
          • 3.8、Reset
          • 3.9、消息丢弃机制
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档