PD受电 协议芯片 CH224A/Q使用笔记
文章目录
前言
一、基本原理图
1.单电阻配置和 I2C 配置参考原理图
2.I/O 电平配置参考原理图
(1) 无需和 CH224 进行交互或控制时
(2) 用3.3V/5V MCU对 CH224 进行控制时
二、CH224A替换CH224K
1.当CH224K为电阻配置
2.当CH224K为电平配置
三、CH224A/Q I2C
四、Fixed请求
五、AVS请求
六、PPS请求
七、模拟Emarker
八、A口适配器及PG
总结
前言
相比于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