Files
chrg/docs/变电压协议设置格式(source)_V1.1-20250925.txt
T
2025-10-25 23:44:23 +08:00

86 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
冠达快充板(SOURCE)通讯协议
2025.9.25
SOURCE的ID为2,波特率200KTTL
1.读取数据
发送:
0B 00 02 20 volh voll curh curl nc nc CRC8
//长度+nc+id+指令+2字节当前电源电压(mV)+2字节当前电源电流(mA)+2个预留字节+CRC8校验
回复:
15 00 02 20 VH VL setvh setvl setch setcl NC NC verh verl NC NC NC NC NC NC CRC8
//长度+nc+ID+指令+2字节读取的电压(0.01V)+2字节source设置电压(mV)+2字节source设置电流(mA)+2字节预留+2字节版本号+6字节预留+CRC8校验
2.读取source的PD协议数据(当前为PDO,PPS,PD3.1,AVS协议时有效,不需要一直读,暂未实现)
发送:05 00 02 13 2A
回复:
XX 00 02 13 //长度(根据实际计算)+NC+ID+指令
00 00 VMINH VMINL VMAXH VMAXL CURH/PORH CURL/PORL NC NC NC NC NC NC
//源类型(1字节,00为PDO,03为APDO) + PPS类型(1字节,源类型为3时有效,00为SPR PPS,01为EPR AVS,02为SPR AVS) + 最小电压(2字节,mV) + 最大电压(2字节,mA) + 最大电流/功率(2字节,mA/W,EPR_AVS时为功率) + 预留(6字节,当协议类型为02时有效,意义与前6字节一致)
00 00 VMINH VMINL VMAXH VMAXL CURH/PORH CURL/PORL NC NC NC NC NC NC
......
CRC8
3.设置CC线电平
发送:
06 00 02 16 00 2A //长度+nc+id+指令+电平等级(0xff为根据当前电流自动设置,否则为手动设定,设置方法待定)+CRC8校验
回复:
05 00 02 16 2A //长度+nc+id+指令+CRC8校验
4.设置支持的快充协议
(PDO和PD3.1固定档位最大电压和最小电压设为一样)
发送:
XX 00 02 D0 //长度(根据实际计算)+NC+ID+指令
00 //协议(1字节)
00 00 VMINH VMINL VMAXH VMAXL CURH CURL NC NC NC NC NC NC
//源类型(1字节,PD协议有效,00为PDO,03为APDO) + PPS类型(1字节,PD协议有效,源类型为3时有效,00为SPR PPS,01为EPR AVS,02为SPR AVS) + 最小电压(2字节,mV) + 最大电压(2字节,mA) + 最大电流(2字节,mA) + 预留(6字节,当协议类型为02时有效,意义与前6字节一致)
00 00 VMINH VMINL VMAXH VMAXL CURH/PORH CURL/PORL NC NC NC NC NC NC
......
CRC8
回复:
05 00 02 D0 CRC8
协议字节含义如下:
00 无快充
01 VIFC(暂不支持)
02 FCP
03 SCP
04 预留
05 预留
06 RFC(暂不支持)
07 QC3.0
08 QC2.0
09 AFC
0A PDO/PPS
0B 预留
0C UFCS
0D PD3.1/AVS
0E VOOC(暂不支持)
CRC8校验算法如下:
u8 get_crc(u8 *dat,u8 k)
{
u8 i,res;
res=0x55;
for(i=0;i<k;i++){ res=crc8(res,dat[i]);}
return res;
}
u8 crc8(u8 res,u8 dat)
{
u8 i,t;
for(i=0;i<8;i++)
{
t=dat^res;
if((t&0x01)==0x01){res=res^0x18;res>>=1;res|=0x80;}//
else{res>>=1;}
dat>>=1;
}
return res;
}