feat: 完成项目多模块功能迭代与配置更新

1. 新增sqlite文件、协议文档、调试截图、配置ini等各类辅助文件
2. 更新Keil开发包版本与工程配置,调整编译优化等级
3. 重构继电器控制逻辑、串口收发逻辑与线程优先级
4. 新增Modbus寄存器映射、校准结构体与Ymodem升级相关代码
5. 完善南北向协议解析、快充挡位配置与调试日志
6. 修复注释格式、数组越界与线程邮箱溢出问题
7. 新增屏幕控制、功率板调试与协议格式说明文档
This commit is contained in:
yhf
2026-07-18 15:32:54 +08:00
parent 250864c517
commit c820aad809
54 changed files with 6498 additions and 830 deletions
@@ -0,0 +1,107 @@
冠达快充板(SINK)通讯协议
2025.8.13
SINK的ID为1,波特率230400TTL
1.读取变电压板电压
(要实时比较设置的快充指令和读回来的快充指令,若有不一样,则重设)
(注意vooc模式下数据返回会很慢)
发送:
0B 00 01 20 loadvh loadvl loadch loadcl nc nc CRC8 //长度+nc+id+指令+负载电压(2字节,0.01V)+负载电流(2字节,mA)+2个预留字节+CRC8校验
回复:
15 00 01 20 VH VL qc_data1 qc_data2 qc_data3 qc_data4 qc_data5 qc_data6 ver_h ver_l nc nc nc nc nc nc CRC8
//长度+nc+ID+指令+2字节电压(0.01V)+6字节快充指令+2字节版本号+6字节预留+CRC8校验
2.读取源端的PD协议数据(当前为PDO,PPS,PD3.1,AVS协议时有效)
发送:05 00 01 13 2A
回复:
XX 00 01 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字节,mV) + 最大电流/功率(2字节,mA/W) + 预留(6字节,当PPS类型为02时有效,意义与前6字节一致)
00 00 VMINH VMINL VMAXH VMAXL CURH/PORH CURL/PORL NC NC NC NC NC NC
......
CRC8
3.设置CC线
发送:
06 00 01 17 00 2A //长度+nc+id+指令+CC(0为都选通,1为选择CC1,2为CC2,3为全断开)+CRC8校验
回复:
05 00 01 17 2A //长度+nc+id+指令+CRC8校验
4.设置CC线电平
发送:
06 00 01 16 00 2A //长度+nc+id+指令+电平等级(0-10,默认7)+CRC8校验
回复:
05 00 01 16 2A //长度+nc+id+指令+CRC8校验
5.设置快充协议(VOOC,UFCS模式下切换其他模式时,需要先把V+,V-,D+,D-,CC等和变电压有关的继电器切至悬空,至少等待1s后,等能读到数据且快充指令正确,再把继电器切回)
格式:
长度+NC+ID+6字节快充数据+CRC8
发送:
0、 标准 命令:0A 00 01 C1 5A 00 00 00 00 2A
1、QC2.0,电压5V/9V/12V/20V 命令:0A 00 01 F8 5A 00 00 00 00 2A //第5个字节为电压(0.1V),该命令是申请9V电压
OK 20No
2、QC3.0,电压3.3-20V 命令:0A 00 01 F6 5A 00 00 00 00 2A //第5个字节为电压(0.1V) OK 20No
3、FCP,电压5V/9V/12V 命令:0A 00 01 F2 78 00 00 00 00 2A //第5个字节为电压(0.1V) OK
4、AFC,命令:0A 00 01 F9 46 00 00 00 00 2A //第5个字节为变电压数据,详细参考AFC文档
OK
5、SCP,命令:0A 00 01 F3 27 10 0F A0 00 2A //56字节为电压(mv)7、8字节为电流(mA)
OK
6、VIVO 命令:0A 00 01 FD 27 10 00 00 00 2A //56字节为电压(mv)7、8字节为电流(mA)
No
7、传音/TFC,命令:0A 00 01 F7 2E E0 00 00 00/01 2A //56字节为电压(mv)7、8字节为电流(mA),9字节为RFC/TFC选择
No
8、PDO手动,需要设定组号,电压和产品相关,命令:0A 00 01 FB 05 00 00 00 00 2A //5字节为组号
OK
9、PDO自动,组号设为0,自动变到指定电压,命令:0A 00 01 FB 00 2E E0 00 00 2A //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
OK
10、PPS手动,需要设定组号、电压、电流,电流0最大, 命令: 0A 00 01 FC 06 4E 20 00 00 2A //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
No
11、PPS自动,组号设为0,设定电压、电流,电流0最大, 命令:0A 00 01 FC 00 4E 20 00 00 2A //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
No
12、PD3.1, 命令:0A 00 01 E1 00 2328 07d0 2A (组号设置和电压设置都支持) //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
No
13、UFCS,命令:0A 00 01 E0 00 2328 07d0 2A (组号设置和电压设置都支持) //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
No
14、VOOC,电压10/11V, 命令:0A 00 01 E2 00 00 00 00 00 2A //
No
15、AVS,命令:0A 00 01 E3 00 4e20 07d0 2A (组号设置和电压设置都支持) //5字节为组号,6,7字节为电压(mv),8、9字节为电流(mA)
No
回复:
回复最基本的5个字节:
长度+NC+ID+指令+CRC8
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;
}