using usart2
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
冠达快充板(SOURCE)通讯协议
|
||||
|
||||
2025.8.2
|
||||
|
||||
SOURCE的ID为2,波特率200K
|
||||
|
||||
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 VMAXH VMAXL VMINH VMINL 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) + 预留(6字节,当协议类型为02时有效,意义与前6字节一致)
|
||||
00 00 VMAXH VMAXL VMINH VMINL 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.设置支持的快充协议
|
||||
发送:
|
||||
XX 00 02 D0 //长度(根据实际计算)+NC+ID+指令
|
||||
00 00 00 VMAXH VMAXL VMINH VMINL CURH/PORH CURL/PORL NC NC NC NC NC NC
|
||||
//协议(1字节) + 源类型(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/W) + 预留(6字节,当协议类型为02时有效,意义与前6字节一致)
|
||||
00 00 00 VMAXH VMAXL VMINH VMINL 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;
|
||||
}
|
||||
Reference in New Issue
Block a user