一般简单的 TYPE-C 使用构成
HOST,DEVICE,CABLE (主机,从机,EMARKER)
PD 协议主要内容大部分集中在,物理层,协议层和协议引擎这三部分。
内容大概有:
‘.’ PD通信协议的编码解码
‘.’ PD协议的流程
‘.’ PD协议的指令构成
‘.’ PD协议的指令解析
PD的物理层由发射模块和接收模块组成,由于CC是单线协议,所以所有通信都是半双工的。
编码方式有两种,分别是BMC 、4B5B
不过两种编码方式不是单独使用的,是一起使用的,可能是为了安全性吧。
BMC编码规则是曼切斯特编码的一个版本,按照脉宽来设定的0和1。
BMC编码后还要经过4B5B编码才能转为被 PD 所识别的数据信号,由于没有相关编码分析仪,没法看到具体数据,但是可用示波器看,然后根据编码的方式解码可读到数据,但这是这样工作量很大,一般用一些集成的 TYPE-C 芯片,里面已经做了处理。
4B5B编码
指令格式
指令格式有两种:控制command和数据command
一个完整包结构包括引导码,SOP*使用场景码,Message Header功能码,Byte0-n数据码和CRC校验码,EOP结束码。
如果Byte数据码没有,说明指令仅仅作为控制指令使用,没有数据内容,所以叫做控制包。有数据内
容的叫做数据包,通常数据包里携带了要变化的电压值和电流值等信息。
1 引导码
BMC 解码后可以看到由 64 对 01 组成,主要为了进行接收缓冲。
Preamble通过呈现一系列交替的"0"和"1"来实现recevier中的锁定,因此平均频率是载波频率。与packet中的其余部分不同,前导码不应采用 4b/5b 编码。前导码应由交替的 0 和 1 的 64 位序列组成。前导码应以"0"开头,并且应以"1"结尾。
2 SOP*码:
BMC 解码后由 20 位的二进制数组成,通过 4B5B 解码后我们可以看到 SOP 由 Sync1 和 Sync2 的解码值构成。表明该指令是应用在 Source 与 SINK 之间。此处还有SOP’,SOP’ 的场景码,表明是 Source 与 E-marker 之间的场景指令。
3 Message Header 功能码
BMC 解码后由 20 位的二进制数组成,经过 4B5B 解码后为 16 位二进制数据
构成。
Message Header 通常包括:数据包还是控制包说明,是由SINK还是SOURCE发出的指令,PD 的协议版本,如果是数据包还包含了有多少个数据包的信息
Message Header 包含了指令信息:是否是扩展指令,这一个包是指令包还是数据包,是哪一方发过来的等信息,具体这些细节在 PD 协议文档给出了很详细的说明。
4 具体流程
以 Power Negotiation 讲解 PD 电压升降的流程结构。
Power Negotiation 流程发生在 Source 与 Sink 之间,在这里 Source 可以是适配器,可以是车充,也可以是移动电源。Sink 可以是任何支持 TypecPD 的受电端。
Power Negotiation 的协议流程包括以下PD指令:
·Source send CAPABILITY 供电能力指令(包含内容:具有哪几种电压值和电流值)
·Sink send REQUEST 需电请求指令 (包含内容:选取哪种电压和电流值)
·Source send ACCEPT 同意需电请求指令 (包含内容:经过对比需电在自己的供电范围内)
·Source send PS_RDY 完成需求指令 (包含内容:已经成功进行能电压改变)
·GOODCRC 指令接收通过指令
在实际应用中这些指令是怎么操作的呢,接下来我来详细述说:首选 Source 端工作在 TYPE-C 的 CC 模式5V3A 检测模式下,一旦检测到有 SINK 受电端接入,便开始输出 5V 给 SINK 端。
而这时在 CC 线上,Source 开始不间断发送 Source send CAPABILITY 指令,SINK 端接收到 Source send CAPABILITY 指令后,判断 PD 通信数据符合协议规定,便回复 GOODCRC 表示已经成功接收到数据,接着 SINK 会根据 Source 端能够提供的电压进行选择,SINK 选择好合适的电压电流便对 SOURCE 进行供电请求,于是 SINK 发出 Sink send REQUEST 进行需电请求指令。Source 接收到 Sink send REQUEST 后,会给 SINK 回复 GOODCRC,然后对 Sink send REQUEST 指令请求的电压进行校对,如果符合 Source 的供电能力,Source便对 SINK 发 Source send ACCEPT 指令,表明同意 SINK 的端电压请求。SINK 接收到 Source 发送的 ACCEPT 指令后,回复 GOODCRC。Source 接收到 SINK 发出的GOODCRC 后,便开始进行电压调节,电压调节成功后,便发出 Source send PS_RDY表示已经调整电压成功,SINK 收到后,便回复 GOODCRC 表示接收指令成功。
以上就是一个完整的升压指令流程。详情如下图所示。在发送PS_RDY的时间,将电压提上来。
可以参考一下流程图: