文章目录
前言
相比于CH224K/D, CH224Q/A支持USB PD3.2快充协议 最高支持PD3.2 140W。 支持请求PPS、EPR FIXED 、EPR AVS ,内置LDO,通过 I2C 接口可以读取协议握手状态和读取当前PD 档位额定电流。芯片内置高压 LDO,静态功耗低,集成度高,外围精简。支持4-30V输入电压
详细可参考:CH224DS1.PDF - 南京沁恒微电子股份有限公司https://www.wch.cn/downloads/CH224DS1_PDF.html
CH224A和CH224Q的区别在于封装不同,CH224A可以替换CH224K。
一、基本原理图
1.单电阻配置和 I2C 配置参考原理图
2.I/O 电平配置参考原理图
(1) 无需和 CH224 进行交互或控制时
(2) 用3.3V/5V MCU对 CH224 进行控制时
注意:
1.如果使用5V MCU对CH224A/Q进行电平配置,CFG1需串联2K电阻。
2.电阻配置最低为9V,电平配置没有15V挡位,CFG2、3内置上拉。且只有在电阻配置下才可以用I2C配置。
二、CH224A替换CH224K
1.当CH224K为电阻配置
1脚串联至VBUS的1K电阻短接或换为0Ω ;
8脚串联至VBUS的10K短接或换为0Ω。
2.当CH224K为电平配置
1脚串联至VBUS的1K电阻短接或换为0Ω ;
8脚串联至VBUS的10K短接或换为0Ω ;
9脚需要串联100K电阻至VBUS。
注意:
1.CH224A的CFG2、3 内置上拉,根据电平配置选择CFG1 2 3下拉。
2.!!!!芯片CFG1引脚的耐压只有3.8V左右,不能像CH224K一样上拉至VDD,需要上拉100K至VHV!!!!
三、CH224A/Q I2C
环境:CH32V307VCT6评估板,POWER-Z,CH224Q测试板,联想PD3.1 140W适配器
芯片功能寄存器表:
编写好I2C初始化以及读写函数后开始读取CH224Q寄存器并处理
此时为电阻配置9V,抓包并打印读取到的寄存器信息和挡位信息:
请求EPR FIXED 28V5A挡位后,抓包并打印读取到的寄存器信息和挡位信息:
(后文有介绍请求EPR、AVS、PPS)
在0X60~0X8F寄存器中 SPR模式下可以读到Head+PDO+CRC 是一个完整的Source Cap数据。
在EPR模式下可以读到EPR Source Cap中第一包Head+ExtHead+PDO和第二包PDO+CRC。
(在EPR模式中读PD电源数据寄存器时其余位不为零,但不影响解析)
四、Fixed请求
固定电压挡位请求可直接再0x0A中写入电压档位对应值即可
void Fixed_req(u8 vol)//fixed请求
{
switch(vol)
{
case 5:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=0)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 0);
printf("Req_ 5V... \r\n"); break;
case 9:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=1)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 1);
printf("Req_ 9V... \r\n"); break;
case 12:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=2)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 2);
printf("Req_12V... \r\n"); break;
case 15:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=3)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 3);
printf("Req_15V... \r\n"); break;
case 20:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=4)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 4);
printf("Req_20V... \r\n"); break;
case 28:
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=5)
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 5);
printf("Req_28V... \r\n");break;//注意请求进入EPR时尽量等待1S左右 再进行其他操作
default :
printf("Req_error... \r\n");break;//Fixed仅可请求5V 9V 12V 15V 20V 28V
}
}
分别请求:5V、9V、12V、15V、20V、28V:
五、AVS请求
AVS的请求先 在0X52写低八位再向0X51写高七位,将0X51的最高位使能位置1,最后在电压控制寄存器0x0A中写7
void AVS_req(float vol)//AVS请求
{
u16 data=0;
u8 AVS_DataH=0;
u8 AVS_DataL=0;
data=(u16)(vol*1000.0)/100;
AVS_DataH=(u8)(((data&0xFF00)>>8)|(0x80));
AVS_DataL=(u8)(data&0x00FF);
I2C_Write_Byte(I2C1,(0x23<<1),0x52, AVS_DataL);
Delay_Ms(2);
I2C_Write_Byte(I2C1,(0x23<<1),0x51, AVS_DataH);
Delay_Ms(2);
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=7)
{
Delay_Ms(2);
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 7);
Delay_Ms(2);
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)==7)
printf("Req_AVS r\n");
}
}
AVS:25V 5A 125W 请求成功
六、PPS请求
首次申请 PPS 时先配置电压,然后将电压控制寄存器配置为 PPS 模式,后续调压直接修改 PPS 电压配置寄存器即可
void PPS_req(float vol) //PPS请求
{
u8 data=0;
data=(u8)(vol*10.0);
I2C_Write_Byte(I2C1,(0x23<<1),0x53, data);
Delay_Ms(2);
if(I2C_Read_Byte(I2C1 , (0x23<<1) , 0x0A)!=6)
Delay_Ms(2);
I2C_Write_Byte(I2C1,(0x23<<1),0x0a, 6);
printf("PPSdata_write: %02x Req: %.2f V \r\n",data,(float)(data/10.0));
}
PPS:12.5V请求成功
七、模拟Emarker
CH224A/Q模拟E-marker功能是公口方案,需要芯片的CC2对GND下拉1K,配置方式等其它功能与母口方案一致
八、A口适配器及PG
CH224A/Q兼容多个A口协议,在source端为A口适配器条件下,电流数据等寄存器无效,最新版本CH224Q/A支持BC、AFC、FCP等A口协议
芯片10脚PG是一个开漏脚,低电平有效,即请求电压成功PG拉低。
总结
以上是CH224Q的一些基本的应用,CH224A同样适用,测试源码放在了链接里,写的比较烂,有需要的也可以参考下,还请各位大佬们多多指点。CH32V307VCT6-CH224Q.zip · 妖媚的猪/CH32V307VCT6-CH224Q - Gitee.comhttps://gitee.com/ZhangWXgit/ch32-v307-vct6-ch224-q/blob/master/CH32V307VCT6-CH224Q.zip