随着快充协议的发展,typec-C 中PD的协议也随之迎来PD3.1.苹果率先推出了PD3.1的是适配器,配上专门的线缆,功率更是达到140W。
今天就给大家介绍一下,sink端请求140W沟通流程。(注意:线缆需用5A 30V以上的规格的或原装线缆)。
我们从协议文档可以找sink ERP Mode Entry state Diagram状态机:
PE_SNK_Send_EPR_Mode_Entry State
当这策略请求进入ERP Mode时,
PE_SNK_Ready 跳转到 PE_SNK_Send_EPR_Mode_Entry state。
当进入PE_SNK_Send_EPR_Mode_Entry state 将发送一个ERP Mode(Enter)Message,同时开启 SenderResponseTimer和SinkEPREnterTimer。
当收到接收 EPR_Mode (Enter Acknowledge) Message,将跳转到PE_SNK_EPR_Mode_Wait_For_Response。
当接收到ERP_Mode Message 但是没有进入成功 ,或者 SenderResponseTimer 超时, SinkEPREnterTimer times超时,将跳转到PE_SNK_Send_Soft_Reset state.
PE_SNK_EPR_Mode_Wait_For_Response State
进入这个状态说明请求已经成功了。
当退出 PE_SNK_EPR_Mode_Wait_For_Response state时,关闭SinkEPREnterTimer然后进入ERP mode。
当接收到EPR_Mode (Enter Succeeded) Message,跳转到 PE_SNK_Wait_for_Capabilities state。
当接收到EPR_Mode (Enter Succeeded) Message 并且不是Enter_succeeded,或者SinkEPREnterTimer超时,将跳转 PE_SNK_Send_Soft_Reset state。
通过上面流程图可知:我们进去ERP Mode 是由sink发起.并且从PE_SNK_Ready状态开始,说明前面已经发生过PD流程已经签订了合同。
这个基本流程就不做太多介绍,小编这个抓了一个苹果mac boook请求140W通信时候的流程。先看看苹果的流程然后在看上小编自己诱骗出来的流程.
- 首先上来适配器先和emark进行通信得到获取emark能力为50V/5A
2.先进行一个基本的PD沟通流程,先请求5V固定挡位
3.PC这边发送数据消息EPR_Mode给适配器进行EPR_mode流程沟通,data:0x10000000
EPR_mode Enter
4.适配器收到EPR_Mode enterhou 评估回复的 EPR_Mode Enter Acknowledged 表示EPR_Mode默认进入被认可。
5.适配器先发送emark的soft_reset然后获取emark信息
srouce应该走的是红色线的分支。
6.适配器发送 EPR_Mode Enter Succeeded消息给sink。
7.然后srouce就发送了src_cap给sink这里应该包含,7个SPR src_cap和2个EPR_Source_Capabilities
8.SINK这边请求了一个EPR_Request的能力包,请求的电流是4.71A,请求的PD是第8个PD0功率为28V/5A。
紧接着就是一个正常功率协商流程,可以看到SRC发送ps_rdy的时候电压已经升到了28V.
以上就是抓取一个苹果140w充电器配mac book的一个进入ERP Mode请求28V 5A 的流程.
根据上面的信息,小编也在Sink PD3.0得基础上小编也诱骗出来28V 5A,但是要上文也提到过对线缆有要求.如下图是小编的请求流程,
1.先请求PD 固定档5V,成功
2.在请求进入ERP mode Message成功
3.重新请求28v 5A的PDO。
4.以上流程后,snk会在tSinkEPRKeepAlive间歇时间走PE_SNK_EPR_Keep_Alive流程,确保当前的epr_mode流程还活着(类似于pps)。
!!!在这个需要提醒特别注意一个细节,小编开始的时候也忽略了,导致当时请求进入erp mode的时候fail。就是Request Message的bit 22,应该在发送ERP Mode(Enter)Message的前面相邻的一个Request Message中的bit 22应该被置1,否则进不了苹果的ERP Mode。
进入ERP mode的条件
综述嗮一个小编诱骗出来的结果