BC1.2
- VBUS Detect bus 检测:当手机的 Micro USB 端口连接上电源适配器之后,处理器 在捕获到 VBUS 中断时,参考值不固定一般在 0.8 V 至 4V 之间,即意味着有电源连接 到手机上时,电源适配器会首先以默认的输出电压和电流提供给手机内部的电源管理 芯片。
- Primary Detection 检测:用来判断端口是来充电还是用来传输数据,将 D+ 拉高至 0.6V 后检测 D- 的电压,如果该电压值小于参考电压值,则端口是数据口 SDP;如果大于参考电压则是充电口 CDP 或者 DCP 。
- Secondary Detection 检测:用来检测充电口能否支持传输数据,即区分 CDP 和 DCP:将 D- 拉高至 0.5V 后检测 D+ 的电压,如果该电压小于参考电压,则端口是 CDP;如果大于参考电压说明端口是 DCP 。
图 1 BC 1.2协议标准检测 CDP 端口
QC快充协议
- QC2.0
- 电源适配器通过数据连接线连到充电设备上,首先电源适配器默认将D+、D-数据脚进行短接;依据前面的介绍,充电设备探测到电源适配器类型是 DCP,此时电源适配器默认输出5V电压,手机正常充电;
- 接着进行QC2.0快充协议握手交互,电源管理集成电路(PMIC)开始拉高 D+上的电压至 0.6V,并维持 1.25S 以上;
- 当电源适配器检测到 D+ 上电压为 0.6V 并维持超过 1.25S 后,电源适配器会断开 D+ 和 D- 的短接,由于 D+ 和 D- 不再短接,D- 上的电压不在跟随 D+ 变化,此时 D- 上的电压开始下降;
- 充电设备端检测到 D- 上的电压从 0.6V 开始下降并维持 1ms 以上时,电源管理集成电路根据充电设备的电压输出请求,给 D+、D- 设置不同的电压信号。
- 电源适配器监测到 D+、D- 上的电压后,调整电源适配器的输出至相应的不同电压,不同 D+、D- 输出逻辑电压如表 1 所示。
表 1 QC2.0协议电压逻辑表
QC2.0协议标准 |
D+ |
D- |
VBUS |
0.6V |
0V |
5V |
|
3.3V |
0.6V |
9V |
|
0.6V |
0.6V |
12V |
|
3.3V |
3.3V |
20V |
- Quick Charge 3.0
Quick Charge 3.0 是向下兼容 Quick Charge 2.0 的,因此在实现判断提供电源的设备、Quick Charge 2.0 协议握手成功的基础上进行 Quick Charge 3.0 的协议握手。
Quick Charge 3.0 相比 Quick Charge 2.0 主要是增加了一个“最佳电压智能调节”[2]算法,可以以 200mV 为一个台阶进行智能调节,提供从 5V 至 20V 电压的灵活选择。为了输出指定电压,协议同样是设置 D+ 、D- 上的电压,不同的是,为了实现 200mV 为一个台阶进行智能调节,D+ 拉高至 0.6V ,D- 拉高至 3V ,拉高 D+ 至 3.3 V后 1ms 释放,输出电压就能够在之前输出的基础上增加 200mV ;拉高 D- 至 0.6V 后 1ms 释放,电源适配器输出电压就能够在之前输出的基础上减少 200mV 。
这样的好处就是能够更加精确的输出电压,使得充电效率更高。也就是说,QC3.0可以在任意时刻实现最佳传输功率,实现充电效率最大化,并改善发热情况。在功耗方面,高通的数据也显示,QC3.0 的功耗要小于之前的 QC2.0 。而功耗上的降低,自然也将会使得充电发热情况会有所降低。
图 2 DCP 检测波形图
图 3 QC 协议握手逻辑电压的电平转换
PD快充协议
硬件接口
Type-C 是 USB 接口的一种形式,其最大优点之一是正反两面均可插入,支持 USB 标准的充电、数据传输、视频传输、音频传输、显示输出等功能。此外尤为重要的是,支持 USB -PD 后则可实现高达 100W 的电源供电(2.0 100W,3.0 240W)。
表 2 Type-C接口引脚定义
GND |
TX1+ |
TX1- |
VBUS |
CC1 |
D+ |
D- |
SBU1 |
VBUS |
RX2- |
RX2+ |
GND |
GND |
RX1+ |
RX1- |
VBUS |
SBU2 |
D- |
D+ |
CC2 |
VBUS |
TX2- |
TX2+ |
GND |
用于数据通讯的主机端口被称为下行端口 ( DFP ),外设端口被称为上行端口 ( UFP )。而电源方面,供电端被称为源端 ( Source ),耗电端被称为吸端 ( Sink )。有的设备既可以有数据上的双角色 ( DRD ) 能力,又具有电源上的双角色 ( DRP ) 能力。其中,实现定义电源角色进行相互沟通的是通过CC线。
表 3 Type-C接口插头引脚定义
GND |
RX2+ |
RX2- |
VBUS |
SBU1 |
D- |
D+ |
CC |
VBUS |
TX1+ |
TX1- |
GND |
GND |
TX2+ |
TX2- |
VBUS |
VCONN |
SBU2 |
VBUS |
RX1- |
RX1+ |
GND |
以下对电缆与插座均未翻转连接和电缆翻转后的连接这两种情况进行详细说明。
- 电缆与插座均未翻转连接的状态:从左边的插座到右边的插座,RX1连接到 TX1,RX2 连接到 TX2; D+ 与 D+ 连接, D- 与 D- 连接, SBU1 与 SBU2 连接, CC1 经由 CC 线与 CC1 连接。高速数据经由 RX1+、RX1- 和 TX1+、TX1- 从一端传递到另一端。电缆两端的 VCONN 是不需要连通的。其中为电缆中电子标签 IC(E-mark)供电的 VCONN 来自电缆的一端,VCONN 当电子标签被确定存在于电缆中即被提供,多存在与 5A 大电流 Type-C 数据传输线中。
- 电缆翻转后的连接状态:从左边的插座到右边的插座, RX1 线连接到TX2 线, RX2 线连接到 TX1 线, D+ 仍然连接到 D+,D- 仍然连接到D-,可见不论是否翻转线缆,D+、D- 信号线始终连接到D+、D-,这就意味着 Type-C 在支持 PD协议的基础上兼容 QC 协议且支持正反插。SBU1 连接到SBU1,SBU2 连接到 SBU2,CC1 经由 CC 线连接到 CC2 。现在,高速数据经由左侧的 RX1+、RX1- 和 TX1+、TX1- 到右侧的 RX2+、RX2- 和 TX2+、TX2- 进行传输。
源端(Source)与吸端(Sink)的确定
CC线是用来将两个连接在一起的设备进行电源供应的配置。默认情况下,USB Type-C 接口的 VBUS 上是没有电压供应的,系统需要在数据线连接期间进行设备角色的定义,插座上的 CC 线被上拉电阻上拉至高电平的设备将被定义为电源供应者即源端,而被下拉电阻下拉至低电平的设备将被定义为电源消费者即吸端。
图 4 CC检测电路
USB PD通信结构
物理层
USB PD 物理层由一对发射机和接收器组成,它们通过单个信号线 ( VBUS 或 CC )进行通信。发射机执行以下功能:从协议层接收数据包数据;计算并附加一个 CRC ;编码包括CRC 在内的数据包数据,数据编码包括 4b5b、BMC ;传输数据包( Preamble, SOP*, payload, CRC and EOP)),此处的 SOP* 是: SOP ,SOP’,SOP” 的三类。
表 4 PD 协议的数据格式
基本结构 |
Preamble |
SOP |
Message |
CRC |
EOP |
接收机执行以下功能:恢复时钟且从 Preamble 锁定包;检测 SOP* ,解码接收的数据包括 CRC ;检测 EOP并验证 CRC 。
图 5 PD 物理层功能
下面两图分别说明了接收器、发射器通过 BMC、4b5b 将数据包进行编码解码的过程。
图 6发射机编码
图 7接收机解码
协议层
在前面一节中提及到了数据格式中的 Message 是协议层中的内容,在本节中做详细分析。
在图 7 中,协议数据包中将 Message 分为了 header 与 n 个字节,后面分为称为头消息和数据消息,前者主要功能是用来表明消息类型、电源和数据角色、PD 充电协
议的版本信息等,后者是对于不同的头消息有不同的数据信息,如对应的控制头消息为 Get_Source_Cap,那么消息数据就是 Source 端的能够提供的电压、电流消息。
图 8 PD 协议数据包格式扩展
- 控制消息
控制消息的主题就是一个头消息( header ),如图 6 控制消息数据包所示,它也是数据消息和扩展消息共有的部分,在 PD 协议中头消息规定 2 字节、16 位分别定义不同的功能,如下表 5 所示:
表 5控制消息16位数据对应功能定义
Bit(s) |
Start of Packet |
功能定义 |
15 |
SOP* |
是否扩展消息 |
14…12 |
SOP* |
项目数量,控制消息此处为0 |
11…9 |
SOP* |
消息ID,表示成功通信多少次(最大为7) |
8 |
SOP only |
电源角色:Sink 或 Source |
SOP’/SOP" |
线缆 |
|
7…6 |
SOP* |
PD的版本 |
5 |
SOP only |
数据角色:DFP 或 UFP |
SOP’/SOP" |
如果是线缆这意味保留 |
|
4…0 |
SOP* |
控制消息类型 |
控制消息类型( Control Message Type )定义如下表 6 所示,其中发送列表示可以发送给定消息的实体(源、接收器或电缆插头);未列出的实体不得发出相应的消息。包的有效开始列表示仅在 SOP 包中发出的消息和在 SOP* 包中可能发出的消息。
表 6 控制消息类型(Type)定义表
Bits4…0 |
Message Type |
Sent by |
Valid Start of Packet |
0 0000 |
Reserved |
N/A |
|
0 0001 |
GoodCRC |
Source, Sink or Cable Plug |
SOP* |
0 0010 |
GotoMin |
Source only |
SOP only |
0 0011 |
Accept |
Source, Sink or Cable Plug |
SOP* |
0 0100 |
Reject |
Source or Sink |
SOP only |
0 0101 |
Ping |
Source only |
SOP only |
00110 |
PS RDY |
Source or Sink |
SOP only |
00111 |
Get Source Cap |
Sink or DRP |
SOP only |
0 1000 |
Get Sink Cap |
Source or DRP |
SOP only |
0 1001 |
DR Swap |
Source or Sink |
SOP only |
0 1010 |
PR Swap |
Source or Sink |
SOP only |
01011 |
VCONN_Swap |
Source or Sink |
SOP only |
01100 |
Wait |
Source or Sink |
SOP only |
01101 |
Soft Reset |
Source or Sink |
SOP* |
01110 - 0 1111 |
Reserved |
N/A |
|
1 0000 |
Not Supported |
Source, Sink or Cable Plug |
SOP* |
1 0001 |
Get Source Cap Extended |
Sink or DRP |
SOP only |
1 0010 |
Get Status |
Source or Sink |
SOP only |
- 数据消息
数据消息由消息头后面跟着一个或多个数据对象组成,如下图 9 所示。区别数据消息比较容易,因为消息头中的数据对象中的数字段比特位是一个非零值。
图 9数据消息数据包
在数据消息中使用的数据对象的类型由消息头的消息类型字段定义,数据消息头的高14 为定义和控制消息头的高 14 位定义相同,低 4 位并在下表 7 中进行了总结。
表 7数据消息类型定义表
Bits 3…0 |
Message Type |
Sent by |
Valid Start of Packet |
0000 |
Reserved |
||
0001 |
Source Capabilities |
Source or Dual-Role |
SOP only |
0010 |
Request |
Sink only |
SOP only |
0011 |
BIST |
Tester, Source or Sink |
SOP* |
0100 |
Sink Capabilities |
Sink or Dual-Role |
SOP only |
0101-1110 |
Reserved |
||
1111 |
Vendor Defined |
Source, Sink or Cable Plug |
SOP* |
例如,源端通过发送一条 Source Capabilities 消息来公开它们的电源功能,能够提供多少个挡位电压、电流( PD0 )。吸端通过发送一条 Sink Capabilities 消息来公开它们的电源需求。两者都由多个32位的功率数据对象组成,如下表 13 所示,
表 8 Source、Sink Capabilities消息类型对应数据消息定义表
Bit(s) |
Description |
B31…30 |
Fixed supply |
B29 |
Dual-Role Power |
B28 |
USB Suspend Supported |
B27 |
Unconstrained Power |
B26 |
USB Communications Capable |
B25 |
Dual-Role Data |
B24…22 |
Reserved - Shall be set to zero |
B21…20 |
Peak Current |
B19 …10 |
Voltage in 50m V units |
B9…0 |
Maxi mum Current in 10mA units |
- 扩展消息
扩展消息有的只支持 SOP ,有的只支持 SOP* ,从下图 10 可以看出,扩展消息与控制消息和数据消息有一样的两个字节头消息,后面紧接着是两个字节的扩展头消息,该消息包括的内容如下表 15 所示
图 10扩展消息数据包图
扩展消息头定义如下表:
表 9扩展消息头定义表
Bit(s) |
Start of Packet |
Field Name |
B15 |
SOP* |
Chunked |
B14…11 |
SOP* |
Chunk Number |
B10 |
SOP* |
Request Chunk |
B9 |
SOP* |
Reserved |
B8…0 |
SOP* |
Data Size |
扩展消息里面含有一些原厂定义的消息,原厂一些独立的 Message,用来表明不同的功能,如识别线缆( cable )中的 E-mark 信息,但是对于本文研究识别 PD 快充协议没有涉及,因此不作详细介绍。
策略层
前两节介绍物理层是用来做具体传输数据的,是最底层的东西,协议层是定义 PD消息的具体含义;策略层就是将协议层的内容组合起来,形成一个完成的策略。可以理解为协议层是协议子函数,策略层是要如何去调用这些函数实现你的功能和目的。
图 11策略层图
从图 11 可以清楚地知道,PD策略层前面还有一个策略层的管理器,用来统一管理策略,例如在某一时间节点进行电源输出电压的切换进行电源协商,在进行视频、照片数据传输会有数据角色交换等。其中最重要的就是电源协商的策略,也是本文需要进行着重研究的电源输出电压协商策略,具体的策略流程如下图 12 所示,
图 12电源协商策略流程图
- Source 端发起一个广播 Source Sap ( 约150ms广播一次,直到收到 Good CRC);
- Sink 端收到源端能够提供的电压、电流信息,并请求其一档位的电源以及电流要求(收到Source Cap的 24ms 内);
- Source 端对吸端请求的电压、电流进行评估,按受就回复接受 Accept ,这个也是需要在 24ms 内去回复的;
- 如果 Source 端接受,那么此时 Source 端应该开始准备这个档位的电源;
- 当电源准备完成的时候,发出 Ps Ready 协议,表示电源准备完成,可以开始充电了,这个需要在 450ms 内。
PD协议识别芯片选型
FUSB302B 是 onsemi 公司开发的一款用来简化PD协议实现 MCU 与 TYPE-C 通讯的芯片,FUSB302B 期望通过 USB Type-C连接器实现DRP、SRC、SNK,但需要少量编程的系统设计基础,其支持 USB Type-C 检测,包括连接和方向,集成了USB BMC电力输送协议的物理层,允许高达100W功率和角色互换。原理图如下:
图 13 FUSB302B芯片原理图
本设计选择 FUSB302B 作为 PD 协议识别模块芯片因为其具体的产品特性具有自动 DRP切换的双角色功能、基于连接对象可以作为主机或设备进行连接的能力、可配置为专用主机、专用设备或双角色、专用设备可以在固定 CC 或 VCONN 通道的 Type-C 插座或插头上运行、完全支持 Type-C 1.2 、集成 CC 引脚作为主机进行连接、作为主机进行电流能力指示、作为设备进行电流能力指示的功能;USB PD2.0,支持 1.2 版本:自动 GoodCRC 报文响应、未收到 GoodCRC 时自动重发报文、需要时自动软重置重发报文、自动硬重置发送命令集。FUSB302B 功能模块如图 20 所示,
图 14 FUSB302B 功能模块示意图
寄存器介绍
FUSB302B 控制 24 个寄存器地址,寄存器的配置是必要的。FUSB302B 的状态控制,输入输出控制均需通过这 24 个地址实现,其中 PD收发的数据包是在FIFO( 0x43h )寄存器中,该寄存器便是 FUSB302B 与 Type-C 通讯的内容存储单元,将要发送的内容存储在TX FIFO 中,收到的内容将会存储于RX FIFO 。FUSB302B 寄存器的每一位地址都有其功能,地址定义如图 21 所示
图 15 FUSB302B 寄存器功能定义
这些寄存器地址有些只读,有些可以读写,下面截选几个本文方案设计需要读写的地址功能定义,详细可以查阅 FUSB302B 的数据手册。
表 10 SWITCHES0 寄存器定义
SWITCHES0 Address: 02h; Reset Value: 0x0000_0011; Type: Read/Write | |||
Bit |
Name |
R/W/C |
Description |
7 |
PU_EN2 |
R/W |
1:作为主机上拉 CC2 引脚 |
6 |
PU_EN1 |
R/W |
1:作为主机上拉 CC1 引脚 |
5 |
VCONN_CC2 |
R/W |
1:将 VCONN 切换到 CC2 引脚 |
4 |
VCONN_CC1 |
R/W |
1:将 VCONN 切换到 CC1 引脚 |
3 |
MEAS_CC2 |
R/W |
1:开启测量模块监测 CC2 引脚两端的电压 |
2 |
MEAS_CC1 |
R/W |
1:开启测量模块监测 CC1 引脚两端的电压 |
1 |
PDWN2 |
R/W |
1:作为设备下拉 CC2 引脚 |
0 |
PDWN1 |
R/W |
1:作为设备下拉 CC1 引脚 |
SWITCHES0 和 SWITCHES1 寄存器地址主要用来配置 CC 引脚,在 Type-C 接口正反插入后根据端需要口配置为源端、吸端,从而需要重新定义 CC脚:是否上下拉电阻进行接口介入检测、是否开启BMC 编码进行数据包传输、是否切换 VCONN 电源输入为E-mark芯片等提供电压的功能等等。
表 11 CONTROL0 寄存器定义
CONTROL0 Address: 06h; Reset Value: 0x0010_0100; Type: (see column below) | |||
Bit |
Name |
R/W/C |
Description |
7 |
Reserved |
N/A |
不使用 |
6 |
TX_FLUSH |
W/C |
1:自清除位,以清除发射FIFO的内容 |
5 |
INT_MASK |
R/W |
1: 屏蔽所有中断 0:已启用主机中断 |
4 |
Reserved |
N/A |
不使用 |
3…2 |
HOST_CUR[1:0] |
R/W |
1:在PU_EN位使能后,使能该位控制CC线上的电流 00: No current 01: 80uA – Default USB power 10: 180uA – Medium Current Mode: 1.5 A 11: 330uA – High Current Mode: 3 A |
1 |
AUTO_PRE |
R/W |
1:当接收到具有准确CRC的消息时,自动启动发射器。 |
0 |
TX_START |
W/C |
1:使用发射器FIFO中的数据启动发射器。 |
Control0 和 Control1 寄存器地址主要用来控制传输信号,例如控制电流大小,控制 FUSB302B 所能识别的传输信号,清空 RX、TX FIFO 的内容等等。
mcu与芯片通信方式:IIC通讯协议
FUSB302B 与 MCU 通信方式 IIC 通讯协议,其集成了完整的 IIC 从机控制器,完全支持 IIC 规格版本 6 的要求,图 22、图 23 分别为 IIC Write、Read 示例图:
图 16 FUSB302B IIC Write 示例图
图 17 FUSB302B IIC Read 示例图
表 12 IIC Write、Read 释义表
项目 |
解释 |
S |
SOP: Start of Packet |
Slave Address/WR |
固定地址:0x44 |
Slave Address/RD |
固定地址:0x45 |
Register Address |
0x01~0x43,请参考寄存器表 |
Read Data |
传输的数据 |
A |
有应答 |
NA |
无应答 |
P |
EOP: End of Packet |
在某一时刻 Power-Z 上位机抓取 Power-Z KM001C 与电源适配器进行电源协商的界面。
文章来源:https://www.toymoban.com/news/detail-614678.html
图 18 Power-Z 上位机调试界面文章来源地址https://www.toymoban.com/news/detail-614678.html
到了这里,关于快充协议浅谈:BC QC PD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!