GB/T 27930 车载充电通信实战:SuperCHG 模块源码深度解析
在新能源汽车直流充电场景中GB/T 27930是充电机与车辆 BMS 之间的核心通信标准基于 CAN 总线与 J1939 传输规范实现充电握手、参数交互、过程控制与故障保护。本文结合车载 AUTOSAR 架构下的SuperCHG 通信模块源码从协议落地、架构设计、状态机、收发流程、超时重传等维度完整拆解充电通信的工程实现逻辑。一、协议背景与模块定位GB/T 27930-2023 定义了充电机SECC与车辆EVCC的全流程通信规则核心帧类型分为四类LM链路管理帧负责多帧传输的连接建立、分帧、应答与断开解决长数据传输问题RM请求消息帧需要应答的指令帧交互后必须回复 ACKURM非请求消息帧无需应答的广播 / 主动上报帧ACK应答帧对 LM/RM 帧的确认保障通信可靠性SuperCHG 模块基于 AUTOSAR 通信栈CanIf/PDUR/COM/Rte实现适配双 CAN 节点CANNODE_2/3、双充电机通道OFC1/OFC2完成充电通信的接收调度、帧解析、发送控制、状态管理与故障处理是 BMS 充电功能的核心通信组件。二、模块整体架构设计模块采用配置化 函数指针分发 周期状态机调度的架构核心设计如下配置表驱动通过Cdd_RxCtxCfg/SuperCHG_LmTxPduInfoData静态配置 Rx/Tx PDU 映射绑定帧类型、通道、ID无需修改代码即可适配 PDU 配置变更函数指针分发Cdd_ProcessFrame函数指针表按帧类型RM_ACK/LM/RM/URM路由处理函数解耦帧解析逻辑双通道隔离SuperCHG_LmPduInfoData数组为每个 CAN 节点独立维护状态、缓存、定时器实现双充电机并行通信周期调度CHG_MainFunction作为周期任务处理超时、状态流转、重传、应答发送三、核心数据结构解析1. 通信配置结构体// 接收PDU配置绑定RxID/TxID/帧类型/通道/处理函数ID typedef struct { PduIdType CddRxPduId; PduIdType CddTxPduId; PduIdType ComRxPduId; uint8 FrameType; uint8 ChannelConfigId; uint8 ProcessId; } Cdd_CanIfRxConfigType; // 发送PDU配置绑定ComID/CanIfID/帧类型/通道 typedef struct { PduIdType ComTxPduId; PduIdType CddTxDataPduId; PduIdType CddRxPduId; uint8 ComPduType; uint8 u8CurrentChannelId; } LM_TxPduInfoCfgType;2. 通道上下文结构体SuperCHG_LmPduInfoType是模块核心每个通道独立一份存储状态机、收发缓存、定时器、计数器、错误码实现状态隔离状态LM_Status_Tx/LM_Status_Rx/RM_Status_RX缓存LM/RM/URM 收发缓冲区、ACK 应答缓冲区定时器u32Cnt_LMS_T2帧间隔超时、u32Cnt_LMS_T3连接超时控制参数帧序号、数据偏移、总帧数、重传计数错误码通信异常诊断标识3. 帧处理函数指针表typedef void (*Cdd_ProcessFrameType)(const RxCHG_PduInfoType *RxPduInfo); const Cdd_ProcessFrameType Cdd_ProcessFrame[Cdd_NUMBER_OF_FRAME_TYPES] { Cdd_Prv_RxProcessRmAckFrame, // RM应答 Cdd_Prv_RxProcessLmFrame, // LM帧 Cdd_Prv_RxProcessRmFrame, // RM帧 Cdd_Prv_RxProcessURMFrame // URM帧 };通过ProcessId直接索引对应处理函数高效完成帧类型分发。四、核心流程与关键函数解析1. 接收流程CAN 接收入口→帧分发→解析处理void Cdd_CanIfRxIndication(PduIdType CddRxPduTargetId_t, const PduInfoType* CanIfPduinfo_pst) { // 遍历配置表匹配RxPDU for (u8index 0; u8index GEN_CFG_RX_PDU_NUM; u8index) { if (Cdd_RxCtxCfg[u8index].CddRxPduId CddRxPduTargetId_t) { // 封装接收信息调用对应帧处理函数 RxCHG_PduInfo.Cdd_CanIfRxConfig_pst Cdd_RxCtxCfg[u8index]; Cdd_Prv_RxProcessFrame(Cdd_RxCtxCfg[u8index].ProcessId, RxCHG_PduInfo); break; } } }入口CanIf 层接收回调Cdd_CanIfRxIndication匹配遍历 Rx 配置表找到对应 PDU 的帧类型与处理函数分发通过函数指针调用帧解析函数完成数据解析、状态更新、COM 层上报2. 发送流程上层触发→分帧发送→应答等待Std_ReturnType SuperCHG_27930_2_2024_Transmit(PduIdType CddTxSduId, const PduInfoType * CddTxInfoPtr) { // 空指针/长度校验 if (CddTxInfoPtr NULL_PTR || CddTxInfoPtr-SduDataPtr NULL_PTR) return E_NOT_OK; // 匹配TxPDU配置区分LM/RM/URM for (u8channelIdx 0; u8channelIdx GEN_COM_TX_PDU_NUM; u8channelIdx) { if (CddTxSduId SuperCHG_LmTxPduInfoData[u8channelIdx].ComTxPduId) { // URM/RM直接发送LM启动发送状态机分帧处理 if (ComPduType_URM) CanIf_Transmit(...); else if (ComPduType_RM) CanIf_Transmit(...); else LM发送状态机初始化... } } }LM 长数据自动计算总帧数首帧发起连接等待 ACK 后发送连续帧RM 帧发送后等待应答保障指令可靠交互URM 帧无应答直接发送适配主动上报场景3. 发送确认回调更新状态Cdd_TxCanIfConfirmationFunc是 CanIf 发送确认回调更新 ACK 发送状态触发状态机流转避免发送死锁。五、状态机设计通信可靠性核心模块基于有限状态机实现 LM/RM 的收发控制严格遵循 GB/T 27930 时序规范。1. LM 接收状态机IDLE → 接收首帧 → RECEIVE_S1_SEND_ACKFRAME发送ACK→ RECEIVE_S1_CHECK → RECEIVE_S1接收连续帧→ RECEIVE_S2_CLOSE发送结束ACK→ IDLE首帧校验数据长度、帧序号合法性检查连续帧按序号接收丢帧 / 错序触发重传结束帧接收完成后发送结束应答关闭连接2. LM 发送状态机IDLE → SEND_LM_S0发送首帧→ WAITACK → SEND_LM_S1发送连续帧→ WAITACK → SEND_LM_S1_CONF等待结束应答→ IDLE分帧传输按 8 字节单帧拆分长数据流控等待根据应答允许帧数控制发送速率超时处理无应答触发重传3 次失败置故障3. RM 接收状态机IDLE → RECEIVE_RM接收RM帧→ 发送RM_ACK → IDLE接收 RM 帧后立即回复标准 ACK完成请求 - 应答交互六、超时与重传机制车载通信鲁棒性保障充电通信对可靠性要求极高模块通过T2/T3 双定时器 重传策略实现故障自愈T2 定时器帧间隔超时周期递减超时触发 ACK 重传最多重传 3 次T3 定时器连接超时长数据传输总时长保护超时关闭连接重传函数Super_27930_RepeatTransmit复用发送缓存快速重传失败帧错误码定义E_LM_OK/E_LM_ACK_TIMEOUT_T2/E_TX_DATA_LENGTH_TOO_LONG等诊断码便于故障定位七、工程实践关键要点1. AUTOSAR 规范适配严格遵循 CanIf/PDUR/COM/Rte 接口规范Com_RxIndication/Rte_Write完成数据交互内存映射通过SuperCHG_MemMap.h管理代码段符合 AUTOSAR MCU 开发规范2. 双通道安全隔离双 CAN 节点OFC1/OFC2独立状态机、独立缓存通过Gu8clearflag1/2实现通道独立复位通道越界、空指针、数据长度合法性校验杜绝内存越界3. 调试与测试预留LM_DEBUG/RM_DEBUG调试宏支持测试数据注入状态机兜底默认分支异常状态强制重置为 IDLE避免程序卡死4. 车载功能安全超时 / 故障后主动发送 NACK通知对端断开连接错误码实时上报 Rte 端口供应用层做故障保护逻辑八、总结SuperCHG 模块是GB/T 27930 协议在 AUTOSAR 架构下的工程化落地以配置化、模块化、状态机为核心设计完美适配双充电机并行充电场景实现了 LM/RM/URM/ACK 全帧类型处理、长数据分帧传输、超时重传、故障诊断等核心能力。该源码设计兼顾协议合规性、车载鲁棒性、代码可维护性是新能源汽车 BMS 充电通信开发的典型实践可直接复用至主流车载 MCU 平台为直流充电的安全可靠通信提供底层支撑。