多协议智能快充电路的设计 刘有耀 崔盼 张烨晨摘要:为了提高充电速度,解决电子产品充电协议不兼容的问题,提出一款基于USB Type-C接口的多协议智能快充电路,可同时兼容PD和QC 2.0协议,最大耐压值为40 V使用软硬件结合的方式,通过Verilog HDL硬件描述语言完成物理层的设计;用软件语言完成协议层的设计,从而用搭载USB Type-C接口的适配器可为使用多种不同协议的终端设备快充通过仿真测试,结果表明多协议智能快充电路可实现不同快充协议间的切换,且能达到对应协议支持的最大充电功率,从源头上降低了各种充电线缆的产生关键词:智能快充;多协议;USB Type-C接口;电路设计;仿真测试;FPGA验证:TN402-34:A:1004-373X( 2019) 24-0025 -050 引言USB-IF( USB Implementers Forum)组织提出的USBType-C接口[1]已成为主流接口,其具有正反可插、供电性强和兼容性佳等优点目前,华为的P9、MATE9,小米4,乐视等很多接口都使用Type-C接口,但搭载Type-C接口的只有使用官方标配的适配器才可实现快充,比如使用华为的P9适配器给同样具有Type-C接口的小米4充电时,只能实现普通充电,并不能达到小米4所要求的快充。
这是因为华为适配器和小米4分别采用不同的快充协议,再加上市面上的快充协议更多,为了实现快充,适配器目前还不能达到通用的地步直至USB-IF组织发布了USB PD 3.0协议[2],该协议支持PPS( Programmable Power Supply)充电,且与USB Type-C接口的结合可支持高达20 V/5 A的标准电力传输[3],这样便把市面上不同的快充标准统一在USB PD 3.0的范畴,即只要符合USB PD 3.0的充电器和终端都可以兼容[4]因此研究基于USB Type-C接口的多协议智能快充电路不仅可以统一快充标准而且还有巨大的市场前景[5]本文设计的多协议智能快充电路基于Type-C接口实现,其中PD 3.0部分使用Verilog HDL硬件描述语言完成PD控制器的设计,使用软件语言完成PD协议层的设计,QC 2.0协议使用软件实现,最终通过SOURCE端(供电器如适配器)和采用PD 3.0或QC 2.0的SINK端(消耗端,如)进行数据交流,从而可为SINK端提供适合快充的电压和电流该电路克服了市场上适配器无法通用快充的弊端,且电路成本低,扩展性强1 PD 3.0快充电路总体结构本文设计的多协议智能快充电路中的PD 3.0部分的结构主要包含三部分,分别为SOURCE端、电缆部分和SINK端,其结构框图如图1所示。
设计重点主要集中在SOURCE端,其端主要包括DC-DC电源模块、电压检测模块和PD控制器三部分PD控制器即物理层的设计先使用Verilog HDL硬件描述语言完成设计,之后将硬件描述语言对应的jic文件下载到Alter Cyclone IV EP4CE6E22C8N FPGA仿真器,再使用软件开发协议层,其中整个数据通信流程如图2所示设备管理器用来获取能量供给能力、端口额定电流和判断插入设备是否为PD设备,相当于该系统的控制中心[6]线缆检测主要功能是检测USB Type-C线缆所能传递的电压电流信息策略引擎提示协议层生成原始数据包,然后发送给物理层,之后在物理层中添加PRE,SOP*,CRC,EOP,并且进行485B编码和BMC编码,再将编码后的数据传输到CC线上[7],以此来进行数据的交互实现快充,且策略引擎可直接与设备管理器进行交流为了确保执行当前的协议,当设备管理器发生更改时,策略引擎也将随之发生改变[8]总体来说,整个SOURCE端系统可分为硬件设计和软件设计两部分2 硬件电路设计系统硬件设计主要包括PD控制器设计、插入检测电路设计、DC-DC电源模块设计和电压检测模块设计四部分。
2.1 PD控制器的设计PD控制器主要包括发送机设计和接收机设计,其主要作用是负责数據接收、发送和协议处理由于本设计是基于USB Type-C接口的,为了增强抗干扰能力并均衡直流分量,发送数据时,物理层先使用485B编码对数据进行转换,再使用BMC编码对数据流进行二次转换,最终将信号传输到CC线上[9],接收过程和发送过程相反,具体流程如图3所示2.1.1 发送机设计模块发送机的设计总框图如图4所示在该设计中,物理层接收来自协议层的初始数据包,为其添加PRE,SOP,EOP等部分,然后将这三个部分通过BMCTH和BMCTL寄存器传输到tx—state状态机,将head和data部分传送给CRC32模块进行校验,将校验后的值通过BMCT4T5[7:0]寄存器传输到485B编码模块通过编码后,将数据包存放在BMCBUF寄存器中,之后再传输给状态机,在图4中的两个状态机分别为控制发送数据的tx—state和控制BMC编码状态的mc_statetx_state的状态有6种,分别为TX- IDLE,TX_WAIT,TX_SYNC,TX_DLY,TX_OK,TX_BUF,经过条件判断,最后输出数据存放在TX_BUF中,然后将TX_BUF寄存器中的值按位传输到mc_state状态机中进行BMC编码。
mc_state的状态有5种,分别为MC_IDLE,MC_00,MC- 10,MC_11,MC_01,由于BMC编码的规则为如果数据为“0”则保持,如果为“1”则反转,那么MC_00和MC_ 11为数据不反转的情况,MC_10和MC_01为数据反转的情况,通过两个状态机的相互工作,最终输出编码后的数据为pdtx_data,此时若满足CCIEN=1或CC2EN=1的条件,那么最终输出的数据为dig2alg_pdtxl_data或者dig2alg_pdtx2_data,这些数据将会被将传输到CC信道在本设计中采用MCTRO和MCPRO作为接收和发送波特率控制,发送和接收时间分别设定不同波特率进行数据发送和接收,标准时间设置为300 kHz波特率由MCPRO决定,比如FCPU是20 MHz,MCPR0=20 MHz300 kHz-1≈66,所以MCPRO填入66,采样波特率由MCTCON中MSAMPLE[5:0]決定,数值为20 MHz300 kHz4≈161) CRC模块CRC即循环冗余校验码,其作用是为了防止协议层生成的数据在传输过程中受到损坏或者丢失,因此对数据包的Message Header和数据部分进行了CRC数据保护,计算完CRC之后,通过EOP来进行包结尾标识,如果CRC校验不对,则整个包将会被丢弃,如果CRC校验正确,则整个数据包将会被传到协议层。
2) 485B编码模块为了提高编码效率,采用485B编码,485B编码是用5 bit的二进制码来代表4 bit二进制码此编码的效率是80%,比Manchester( 50%)码高以SOP—CAP包为例,首先使能接收信号和CCI信号,由上可知只对head-er,data和crc32这三部分进行485B编码其中,header部分配置为11al,data部分数据为00019121( SV3A),经过crc32计算后的值为312c3eda,经过编码后的值传输到bmcbuf[7:0]寄存器中3) BMC编码模块由于本设计是使用USB Type-C接口中的CC线来传递信息,而在CC信道上传递数据时,为了确保数据DC的平衡,必须要经过BMC编码此码是一种单向通信编码,数据1的传输需要有一次高低电平的转换,数据0的传输则是固定的高电平或者低电平2.1.2 接收机设计模块接收机的设计框图如图5所示第一步先进行BMC解码,其次由于数据发送时是按位发送的,最低位最先发送,那么接收时是先接收到最低位,所以需要对解码后的数据进行顺序的颠倒,即最低位放到最高位上,经过倒序后的数据为bmcr5b[4:0]之后将进入pd_state状态机进行数据包的拆包,与此同时还会进行SB4B解码。
1) BMC解码模块由于在CC线上传输都要经过BMC编码,因此接收部分需要首先对数据进行BMC解码来自CC1信道的数据为alg2dig_pdrxl_data,来自CC2信道的数据为alg2 dig_pdrx2_data,只有在使能信号CCIEN=1或者CC2EN=I的情况下,数据才可以正确接收,接收到的可处理的数据为bmcr_ccdat,经过BMC编码模块输出的数据为bmcr_sdat[1:0],其中解码的波特率与发送模块中BMC编码的波特率一致2) pd_state状态机模块pd_state状态机主要是对BMC解码后的数据包进行拆包,将依次解出PRE,SOP,DATA和EOP,按照解包顺序,当解完前导码时会产生一个sync64_flag标志位,解完SOP时会产生三个syncl_flag标志位和一个sync2_flag标志位,依此类推,当产生eop_flag标志位时代表该数据包解包完毕该状态机总共有7个状态,分别为IDLE,WAIT.SFIRST.SYN64, SYNI, DATA和EOP3) 584B解码和CRC校验模块由于在发送模块中只对head和data部分进行了485B编码和CRC校验,那么在接收数据时就只需对这分两个部进行584B解码和CRC校验,因此将数据包分为两部分。
PRE,SOP和EOP通过运算模块输出,head和data部分进行584B解码,将解码后的数据发送给CRC校验模块,如果新旧CRC计算值相同,则说明数据接收成功,如果CRC计算值不同,说明校验错误,那么整个数据包将被丢弃2.2 插入检测电路的设计由于USB Type-C接口可正反插,所以需要设计CCl&CC2插入检测模块,使用OPI和OP2,利用DACO设定检测电压,具体做法是CC1和CC2两端默认上拉电压都是3.3 V,一旦有外设接人,那么CC1或CC2的电压就会被拉低通过与预设的电压比较器进行比较,如果CCl PLUG被拉低,则可判断出CC1被接人;同理,如果CC2 PLUG被拉低,则可判断出CC2被接人2.3 DC-DC电源模块的设计USB Type-C接口支持的电压范围为0-20 V,其中以50 mV的幅度逐渐递增,支持的电流范围为0-5 A,以10 mA的幅度逐渐递增本设计的电源模块电路图如图6所示,具体的调压做法是:FPGA通过SPI控制DAC,DAC的输出通过运放控制恒流源最终控制FB上的电流,抽掉FB上不同的电流则相应的电压Vout就会按照比例增加,从而达到升压的过程2.4 电压检测模块的设计在经过上述调节之后,电压达到了终端需求的数值,但是为了确保终端设备的充电安全,本设计通过SPI采集ADC128S022的方式采集最终的电压数值,最终通过Vbus将电压输出到SINK端。
3 软件设计3.1 通信协议的设计系统软件部分设计主要包括PD协议层和QC 2.0协议的设计两个协议都对应不同的数据格式以及编码原理,其中USB PD数据包主要由preamble(数据长度为64 bit),SOP(数据长度为20 bit),Message Header(数据长度为16 bit),data,CRC(数据长度为40 bit)和EOP(数据长度为5 bit)组成数据类型有两种分别为控制信息和数据信息,当信息为控制信息时,该数据包由Message Header和CRC组成;当信息为数据信息时,该信息由Message Header和一个或者多个Data Objects组成其中Data Objects的格式是由Message Header里面的Message Type定义的,其总共有四种消息格式分别为:PDO 。