# FastCharge **Repository Path**: kami2019/fast-charge ## Basic Information - **Project Name**: FastCharge - **Description**: 充电桩快充协议(GBT 27930-2015执行标准) - **Primary Language**: C - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2025-05-26 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: GBT27930 ## README ## 快充协议简要 ### 硬件 1. 使用CAN接口扩展帧的29位标识符 2. 充电机与BMS之间的通信速率采用250kbit/s ; - 注:在通信环境恶劣的专用场合(如通信距离较长的商用车充电站),经供电设备制造商和电动汽车制造商协商一致,可采用50kbit/s通信速率。 ### 协议(遵循GBT 27930-2015执行标准) 1. 充电机和BMS定义为不可配置地址,即该地址固定在ECU的程序代码中,包括服务工具在内的任何手段都不能改变其源地址。 ||| |:-:|:-:| |装置|首选地址| |充电机|86(56H)| |BMS|244(F4H)| ### 充电流程 1. 整个充电过程包括4个阶段: - 1.充电握手阶段(物理连接&低压辅助上电) - 2.充电参数配置阶段 - 3.充电进行中阶段 - 4.充电结束阶段 2. 具体流程图可以参考文档,内有详细说明。 ### 协议报文 #### 1.充电握手阶段报文 |||||||| |:-:|:-:|:-:|:-:|:-:|:-:|:-:| |报文代号|报文描述|PGN|P|数据长度|报文周期(ms)|SA - DA | |CHM | 充电机握手 | 002600H | 6 | 3 | 250 |充电机-BMS| |BHM | 车辆握手 | 002700H | 6 | 2 | 250 |BMS-充电机| |CRM | 充电机辨识 | 000100H | 6 | 8 | 250 |充电机-BMS| |BRM |BMS和车辆辨识报文| 000200H |7 |41 |250 |BMS-充电机| #### 2.充电参数配置阶段报文 |||||||| |:-:|:-:|:-:|:-:|:-:|:-:|:-:| |报文代号|报文描述|PGN|P|数据长度|报文周期(ms)|SA - DA | |BCP |动力蓄电池充电参数 | 000600H |7 |13 |500| BMS-充电机| |CTS |充电机发送时间同步信息 | 000700H |6 |7 |500 |充电机-BMS| |CML |充电机最大输出能力 | 000800H |6 |8 |250 |充电机-BMS| |BRO |电池充电准备就绪状态 | 000900H |4 |1 |250| BMS-充电机| |CRO |充电机输出准备就绪状态 | 000A00H |4| 1 |250 |充电机-BMS| #### 3.充电阶段报文 |||||||| |:-:|:-:|:-:|:-:|:-:|:-:|:-:| |报文代号|报文描述|PGN|P|数据长度|报文周期(ms)|SA - DA | |BCL |电池充电需求 | 001000H |6 |5 |50 |BMS-充电机| |BCS |电池充电状态 | 001100H |7 |9 |250 |BMS-充电机| |CCS |充电机充电状态 | 001200H |6 |8 |50 |充电机-BMS| |BSM |动力蓄电池状态信息 | 001300H |6 |7 |250 |BMS-充电机| |BMV |单体动力蓄电池电压 | 001500H |7 |不定 |10000 |BMS-充电机| |BMT |动力蓄电池温度 | 001600H |7 |不定 |10000 |BMS-充电机| |BSP |动力蓄电池预留报文 | 001700H |7 |不定 |10000 |BMS-充电机| |BST |BMS中止充电 | 001900H| 4 |4 |10 |BMS-充电机| |CST |充电机中止充电 | 001A00H |4| 4 |10 |充电机-BMS| #### 4.充电结束阶段报文 |||||||| |:-:|:-:|:-:|:-:|:-:|:-:|:-:| |报文代号|报文描述|PGN|P|数据长度|报文周期|SA - DA | |BSD |BMS统计数据 | 001C00H |6 |7 |250 |BMS-充电机| |CSD |充电机统计数据 | 001D00H |6 |8 |250 |充电机-BMS| #### 5.错误报文 |||||||| |:-:|:-:|:-:|:-:|:-:|:-:|:-:| |报文代号|报文描述|PGN|P|数据长度|报文周期|SA - DA | |BEM |BMS错误报文 | 001E00H| 2 |4 |250 |BMS-充电机| |CEM |充电机错误报文 | 001F00H |4 |4 |250 |充电机-BMS| ### 工程文件说明 + src 文件夹 - application 应用层代码(部分函数接口需要用户自行实现) - hardware 底层硬件代码(需要用户根据实际硬件平台实现,主要是CAN口的实现) - protocol 协议层代码(不需要用户修改) - `SAE1939.h` --> 快充协议执行SAEJ1939部分定义 - `fcp.h` --> 快充协议数据结构定义 - `fcp.c` --> 快充协议层源码 + doc 文件夹 - 快充协议相关参考文档 #### 工程移植 - 1.将`src文件`中的文件源码添加到工程后,在port文件中,根据自身硬件型号,需要实现下个接口函数: ```c uint8_t fcp_can_send_message(uint32_t id, uint8_t data[],uint8_t len); uint8_t fcp_can_read_message(uint32_t *id, uint8_t data[]); ``` - 2.在application文件中,需要用户实现根据实际需求和具体硬件平台实现如下接口函数业务功能: ```c int32_t chm_output_ready_state_get(struct cro_parameter_t *);//充电准备状态获取 int32_t chm_system_time_get(struct cts_parameter_t *);//充电机系统时间获取 int32_t chm_max_outputable_get(struct cml_parameter_t *);//充电机最大输出能力获取 int32_t chm_charge_status_get(struct ccs_parameter_t *);//充电状态获取 int32_t chm_charge_statics_data_get(struct csd_parameter_t *);//充电统计数据获取 int32_t chm_charge_abort_info_get(struct cst_parameter_t *);//充电中止信息获取 int32_t chm_charge_error_get(struct cem_parameter_t *);//充电错误信息获取 int32_t bms_handshake_info_handler(struct bhm_parameter_t *);//BMS握手信息处理 int32_t bms_indentify_info_handler(struct brm_parameter_t *);//BMS辨识信息处理 int32_t bms_ready_state_handler(struct bro_parameter_t *me);//BMS准备状态处理 int32_t bms_charge_paramter_handler(struct bcp_parameter_t *);//BMS充电参数处理 int32_t bms_charge_demand_handler(struct bcl_parameter_t *me);//BMS充电需求处理 int32_t bms_battery_state_handler(struct bsm_parameter_t *); //BMS电池状态处理 int32_t bms_battery_voltage_handler(struct bmv_parameter_t *); //BMS电池电压信息处理 int32_t bms_battery_temperature_handler(struct bmt_parameter_t *);//BMS电池温度信息处理 int32_t bms_battery_reserv_handler(struct bsp_parameter_t *); //BMS电池预留信息处理 int32_t bms_charge_abort_handler(struct bst_parameter_t *); //BMS充电中止处理 int32_t bms_charge_status_handler(struct bcs_parameter_t *);//BMS充电状态处理 int32_t bms_charge_statics_data_handler(struct bsd_parameter_t *);//BMS充电统计数据处理 int32_t bms_charge_error_handler(struct bem_parameter_t *);//BMS错误信息获取 ``` - 3.协议收发API接口调用 ```c void fcp_listen_for_message(void);//协议接收报文侦听 放在主函数/线程中 void fcp_timer_request(void);//协议PGN报文定时请求函数(10ms) ``` - 4.在`protocol`文件中可以使用快充日志跟踪,打开宏使能开关(注,开启日志跟踪,TP多帧接收可能会受到影响) ```c #define FCP_LOG_TRACE (1) //1:使能 0:禁用 ``` - 5. 报文消息结构 `potocol`中协议层报文消息 ```c struct chm_report_t //CHM消息 { uint8_t hardware_connected_ready ;//硬件握手(标志置位后启动握手CHM) uint8_t insulate_check_normal ;//绝缘检测(标志置位后发送辨识CRM) struct chm_parameter_t chm_parameter; struct crm_parameter_t crm_parameter; struct cts_parameter_t cts_parameter; struct cml_parameter_t cml_parameter; struct cro_parameter_t cro_parameter; struct ccs_parameter_t ccs_parameter; struct cst_parameter_t cst_parameter; struct csd_parameter_t csd_parameter; struct cem_parameter_t cem_parameter; }; struct bms_report_t//BMS消息 { struct bhm_parameter_t bhm_parameter; struct crm_parameter_t crm_parameter; struct brm_parameter_t brm_parameter; struct bcp_parameter_t bcp_parameter; struct bro_parameter_t bro_parameter; struct bcl_parameter_t bcl_parameter; struct bcs_parameter_t bcs_parameter; struct bsm_parameter_t bsm_parameter; struct bmv_parameter_t bmv_parameter; struct bmt_parameter_t bmt_parameter; struct bsp_parameter_t bsp_parameter; struct bst_parameter_t bst_parameter; struct bsd_parameter_t bsd_parameter; struct bem_parameter_t bem_parameter; }; ``` ---------- - 参考资料: 《GBT 27930-2015 电动汽车非车载传导式充电机与电池管理系统之间的通信协议》(注:已经废止) - 参考资料: 《GBT 27930-2023 电动汽车非车载传导式充电机与电池管理系统之间的通信协议》 - 参考资料: 《GBT-18487.1-2015 电动汽车传导充电系统第1部分:通用要求》(注:已经废止) - 参考资料: 《GBT+18487.1-2023 电动汽车传导充电系统第1部分:通用要求》 - 延展阅读: [国标充电桩控制板转换为欧标充电桩控制板需要哪些硬件支持](https://x-cheng.com/en/shipinzhanshianli/895.html)