ISO15118之SLAC 阶段实现说明篇
SLAC(Signal Level Attenuation Characterization,信号电平衰减特性)是 ISO 15118 充电通信中物理链路建立的关键阶段。在本工程中,SLAC 通过 MSE1021/MSE1022 HomePlug GreenPHY PLC 芯片的VS_MME 管理帧解析实现,位于 SDP 发现之前,是整个 EVCC-SECC 通信链路的第一步。
核心设计:SLAC 算法由 PLC 芯片固件自动执行,MCU 侧仅负责 状态监听与流程控制。
2. 架构层次
| | |
|---|
| | |
| | mse1021_spi.c |
| VS_MME 管理帧解析、链路状态跟踪、帧队列缓冲 | mse1021_eth.c |
| | comm_session_handler.c |
3. PLC 链路状态机
3.1 状态定义
| | | |
|---|
PLC_LINK_UNKNOWN | | | |
PLC_LINK_DOWN | | | CC_DISASSOCIATE 或 LINK_STATUS(0x00) |
PLC_LINK_SLAC | | | |
PLC_LINK_UP | | | CC_ASSOC.CNF(result=0) 或 CC_ASSOC.IND |
PLC_LINK_FAILED | | | |
3.2 VS_MME 管理帧格式
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Dst MAC (6 bytes) |+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | Src MAC (6 bytes) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| EtherType = 0x88E1 | MMV = 0x01 | MMTYPE (2B) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Payload (Vendor-Specific) |+ +| ... |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- 帧识别:EtherType ==
0x88E1(HomePlug AV),最小帧长 17 字节 - MMTYPE 提取:offset 15-16,little-endian
3.3 关键消息类型
| | | |
|---|
| 0x0008 | | →PLC_LINK_SLAC,记录 slac_start_ms |
| 0x0009 | | result=0x00 →PLC_LINK_UP;否则 → PLC_LINK_FAILED |
| 0x000A | | |
| 0x000B | | |
| 0x0060 | | 0x01→UP, 0x00→DOWN, 其他→SLAC |
4. EVCC 端 SLAC 实现
4.1 完整流程图
4.2 关键代码路径
| | | |
|---|
| ecsh_start() | comm_session_handler.c:404 | 检查链路状态,决定进入 WAIT_LINK 或 SDP |
| mse1021_eth_link_up() | | |
| ecsh_poll() | comm_session_handler.c:451 | |
| mse1021_eth_poll() | | |
| parse_vs_mme() | | |
| ecsh_end_session() | comm_session_handler.c:520 | |
4.3 状态转换图
5. SECC 端 SLAC 实现
5.1 流程图
5.2 与 EVCC 的差异
| | |
|---|
| | |
| 60s (EVCC_LINK_WAIT_TIMEOUT_MS) | 120s (SECC_LINK_WAIT_TIMEOUT_MS) |
| | |
| 最多 3 次 (EVCC_SLAC_MAX_RETRIES) | |
| 状态机 (ECSH_STATE_WAIT_LINK) | |
6. 完整通信时序
7. 配置参数
| | | |
|---|
EVCC_SLAC_MAX_RETRIES | | | |
EVCC_LINK_WAIT_TIMEOUT_MS | | | |
EVCC_POLL_PERIOD_MS | | | |
SECC_LINK_WAIT_TIMEOUT_MS | | | |
SECC_POLL_PERIOD_MS_OVERRIDE | | | |
EVCC_USE_MSE1021 | | | |
SECC_USE_MSE1021 | | | |
8. ETH 层 API 参考
| |
|---|
mse1021_eth_init(mac) | |
mse1021_eth_send(frame, len) | |
mse1021_eth_recv(frame, maxlen) | |
mse1021_eth_poll() | |
mse1021_eth_link_up() | |
mse1021_eth_get_plc_status() | |
mse1021_eth_get_slac_retries() | |
mse1021_eth_reset_plc_status() | |
mse1021_eth_get_mac(out_mac) | |
9. 设计特点
- 芯片卸载:SLAC 核心算法(信号衰减测量、匹配过程)完全由 MSE1021/MSE1022 固件执行,MCU 仅做状态监听
- 被动监听架构:通过 SPI 轮询接收 VS_MME 管理帧,解析 CC_ASSOCIATION 系列消息判断链路状态
- 双端对称:EVCC 和 SECC 使用相同的
PlcLinkStatus 枚举和 MMTYPE 常量,parse_vs_mme() 逻辑基本一致 - 条件编译保护:所有 SLAC 相关代码受
#if EVCC_USE_MSE1021 / #if SECC_USE_MSE1021 保护,非 PLC 后端完全向后兼容 - 重试与超时双保险:EVCC 最多重试 3 次,总超时 60 秒;SECC 被动等待 120 秒后仍启动服务
- 状态隔离:管理帧(VS_MME)与数据帧分离处理,管理帧不入接收队列,避免干扰上层协议
10. 故障排查
| | |
|---|
| | 检查 SPI Mode3 配置;确认电力线物理连接 |
| | 检查 CC_ASSOC.CNF 结果码;降低 SPI 频率 |
| SECC "PLC link not ready" | | |
| | 确认ecsh_end_session() 重置了 state 为 IDLE |
【淘宝】https://e.tb.cn/h.8WVka3EWHEwRSfZ?tk=JorCgvI9DqT MF168 「STM32 C语言版本全套ISO15118协议源代码,欧标协议转化器」
点击链接直接打开 或者 淘宝搜索直接打开