一、PD协议解析(持续更新中)

笔者最近在调试艾为半导体的PD芯片,第一次接触PD快充协议,记录本篇作为学习开发记录,方便随时回忆。
本文主要基于《Universal Serial Bus Power Delivery Specification Revision: 3.2》手册,一些配图来自该手册或PD2.0手册。
若有不对,请多多指教~
另外,------“天下苦5V1A久矣!”

简要的说,PD是一种协议,并不直接参与到充电的具体操作,而是作为充电设备和用电设备沟通的桥梁。让“设备”与“设备”可以互相了解、合作。

一、PD角色总览

PD协议规范了各种场景下的供电、用电角色,按照不同场景进行划分。把这些角色搞明白后,后面的内容就好理解了。

(1)DFP/UFP,根据数据方向来划分,分为三种角色:
  • Downstream Facing Port (DFP):面向下游的端口,即USB HOST,一般是供电设备
  • Upstream Facing Port (UFP):面向下游的端口,即USB Device或USB集线器,一般是用电设备
  • Dual-Role Data Ports:双角色数据端口,可以作为DFP或UFP进行操作

不过要注意,一个产品可以是双角色数据端口,但不是双角色电源端口
它可以在DFP和UFP角色之间进行逻辑切换,即使它是仅供电端口或仅用电端口。

(2)Power supply,根据供电/用电来划分,分为三种角色:
  • Source:顾名思义,能供电的
  • Sink:顾名思义,能用电的
  • Dual-Role Power(DRP) Ports:顾名思义,既能供电用能用电的(不是同时),结果取决于设备间的协商
  • Dead Battery or Lost Power Detection:第一眼不知道是个啥
  • VCONN Source:第一眼不知道是个啥,好像跟电缆通信相关,后续补充
(3)Provider/Consumer,特定场景下根据正在供电/用电的设备来划分,分为两种角色:

这两个概念跟Source,Sink挺相近的,一开始笔者也搞混了以为是同个东西的不同说法,实际上是有区别的。

  • Source vs Provider
    Source是一个固定角色,指物理上提供电力的设备;Provider则是一个动态角色,指的是特定时刻下正在提供电力的设备。
    Provider可以是Source,也可以是支持Dual-Role Power(DRP)在供电时的角色。
  • Sink vs Consumer:
    同上

二、PD协议总览

PD协议类似其他通信协议,也是分了好几层,可以参考官方的协议栈示意图。数据根据协议层层嵌套,但各层处理数据时又相当独立,各司其职。由于PD协议相对其他通信协议较为简单,后面我会按照由物理层到设备策略层的方向,慢慢拨开它的战争迷雾。
在这里插入图片描述

三、Physical Layer

PD通信以Packet为最小单位,Packet的组成非常的传统,由前导包Preamble、SOP、数据、CRC和EOP组成。
那么物理层在这其中做哪些事情呢?

  • 对于发送方物理层:
    1、填充前导包Preamble、SOP和EOP;
    2、计算CRC;
  • 对于接收方物理层:
    1、识别前导包Preamble、SOP和EOP,知道什么时候来数据了,且能知道数据什么结束。
    2、计算CRC并对比,如果正确,就把数据包传递给Protocol层;如果错误,就忽略并等待下一包数据;

整体的物理层就是这么朴实无华,当然其中还包括一些数据编码解码的工作,这里不多介绍,只要知道除了Preamble其他bit都是经过编码的即可,接下来补充一些细节。
数据包格式

(1)Preamble

根据PD官方文档,前导包由64bit交替的’0’和’1’组成,起始位为’0’,结束位为’1’。
且前导包不会使用4b/5b编码,可以直接用示波器或者逻辑分析仪抓到电平变化。

(2)SOP

SOP主要用于标识和区分不同类型数据包,接收方识别到SOP才能进行下一步,遇到不认识的SOP就过滤数据。
SOP一共有以下几种:

  • SOP:Start of Packet Sequence
  • SOP‘:Start of Packet Sequence Prime:一般要获取高性能USB-C电缆的特性时使用
  • SOP’':Start of Packet Sequence Double Prime:一般要获取电缆插头的特性信息时使用
  • SOP’_Debug:Start of Packet Sequence Prime Debug
  • SOP’'_Debug:Start of Packet Sequence Double Prime Debug
(3)数据包,后文详细讲
(4)CRC

CRC使用的是CRC32,CRC公式比较复杂不做介绍,知道初值是0xFFFFFFFFH即可。
CRC32计算的范围是除了Preamble、SOP、EOP和自己以外的所有数据。

CRC32校验在PD通信中非常重要,因为通信过程中,收到任何一个包,都需要校验CRC32成功后返回GoodCRC包给对方,表示你发的东西我收到了,可以继续后面的过程了。如果CRC32出错,可能会导致整个通信过程中断。

(5)Hard Reset

硬复位是一串特殊的数据流,由物理层组织发送,作用就是让通信双方复位到初始状态重新通信。

四、Protocol Layer

…未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值