文档

ECAN-Lite 文档

在线查阅产品文档、快速入门与协议资料。

产品介绍

ETHERCAT TO CAN / CAN FD GATEWAY
ECAN-Lite 产品介绍 V3.0
让 CAN 设备自然接入 EtherCAT 系统
ECAN-Lite 是面向工业现场的 EtherCAT 转 CAN / CAN FD 网关。 它对上是标准 EtherCAT 从站,对下连接多路 CAN 总线, 让伺服、传感器、执行器和测试设备更容易进入统一的实时控制网络。
标准 EtherCAT 从站 4 路 CAN / CAN FD 动态 PDO CoE 配置 FoE 升级 IgH demo 示例包 文档版本 V3.0

本文用于产品了解和选型。接线、PDO/SDO 字段、FoE 兼容性与故障处理请以 配置与使用以 ECAN-Lite 应用手册 V3.0 为准, 协议和对象定义以 ECAN-Lite 技术参考手册 V3.0 为准;需要编译源码时从 源码快速开始 进入。

解决什么问题

很多现场设备仍然使用 CAN 或 CAN FD,但主控系统正在向 EtherCAT 集中。ECAN-Lite 的价值,就是把两边连接起来:

EtherCAT 主站
PLC / Linux 主站
周期 PDO 控制
ECAN-Lite
PDO 打包转换
SDO 配置维护
CAN 设备
伺服 / I/O / 传感器
CANopen 或私有协议
主站只需要按 EtherCAT 的方式交换 PDO 数据,ECAN-Lite 负责把这些数据转换成 CAN 帧,并把 CAN 总线收到的数据再送回 EtherCAT。

数据如何流动

发送
方向
主站写 PDO
周期任务写入 RxPDO
网关解析
识别通道、帧 ID 和数据
CAN 发送
按通道输出到 CAN 总线
设备响应
伺服、I/O、传感器执行动作
接收
方向
CAN 收帧
多通道采集现场数据
统一打包
整理成 TxPDO 数据区
主站读取
周期任务获得最新数据
诊断分析
结合状态、版本和错误计数排查

核心能力

多通道 CAN 扩展

一台设备连接多路 CAN / CAN FD,总线分组更清楚,控制柜布线更简洁。

动态 PDO 承载

PDO 容量可按项目规模调整,小系统轻量运行,多设备场景也能批量承载。

周期化数据收发

CAN 帧可以跟随 EtherCAT 周期组织,适合控制、采集和自动化测试。

现场维护友好

支持 SDO 参数配置、版本读取和 FoE 固件升级,减少拆机和单独烧录。

主站示例完整

提供 IgH demo,覆盖扫描、PDO 收发、周期测试、FoE OTA 和 CiA402 控制参考。

问题定位更快

保留状态字、错误统计、版本读取和诊断路径,现场调试不需要从零摸索。

规格速览

EtherCAT 接入

2 端口 100Mbps EtherCAT,从站侧支持 CoE 参数配置和 FoE 固件升级。

4 路 MCAN 总线

每路支持 CAN 2.0A/B 与 CAN FD ISO,CAN FD 单帧数据域最大 64 字节。

大容量 PDO

PDO 以128B基础块配置;固件2.x还支持16B微调。稳定SM profile使用RxPDO 128B/TxPDO 256B,DC使用双向384B,单方向上限1392B。

实时发送增强

支持直接发送与时间戳/预约发送,RxPDO full64 格式可用于 SYNC0 相位预约。

高速 CAN FD 支持

TDC 默认开启,5Mbit/s 及以上数据段强制开启,适合高速 CAN FD 现场。

配置可持久化

关键参数保存到 Flash 配置镜像,并通过 CRC32 校验,减少掉电后重复配置。

类别 摘要
主控平台 HPMicro HPM5E00 系列 RISC-V MCU,CPU 400MHz,mchtmr 24MHz
EtherCAT 2 端口 100Mbps,支持 CoE/FoE
CAN / CAN FD 4 路 MCAN,支持 CAN 2.0A/B 和 CAN FD ISO,最大 64B 数据域
PDO 能力 稳定SM profile使用RxPDO 128B/TxPDO 256B,DC profile使用双向384B;128B基础块上限10,固件2.x支持16B微调,最大1392B/方向
PDO 封装 默认V1头部为5E 24B/6E 32B并关闭payload CRC;固件2.x可显式启用V2紧凑头16B/20B,CRC可主动开启;CAN帧封装包含控制字、CAN ID、可选时间戳和数据
实时特性 支持直接发送、delta16/delta32/full64 时间戳封装和 SYNC0 相位预约
维护能力 SDO 参数配置、Flash 参数持久化、FoE 固件升级

已验证的实时工作模式

当前 Linux / IgH 交付配置收敛为两个模式:

模式 同步方式 默认 PDO 用途
sm_250us_1ms(默认) 250μs SM 子周期,四相轮转 RxPDO 128B、TxPDO 256B MCAN0~3 各获得一个固定相位,每通道控制周期 1ms
dc_1ms_cross_cycle DC Sync0,1ms 周期,900μs shift 双向 384B N 周期发命令、N+1 周期收回复的 1kHz 闭环

默认参数由示例统一配置,无需用户自行组合周期、PDO、相位或发送模式。实际时延仍取决于主站、内核、网卡、CAN 位率、总线负载和电机应答时间;部署时应按技术手册完成验收。

机器人内部通信与调试

机器人系统内部往往同时存在关节驱动、末端工具、力矩传感器、夹爪、IO 模块和安全部件。它们可能分布在不同 CAN 总线上,也可能使用 CANopen 或厂商私有协议。ECAN-Lite 可以作为机器人控制器和体内 CAN 网络之间的实时转换层,把分散的 CAN 数据统一汇入 EtherCAT 主站。

机器人控制器
EtherCAT 周期任务
运动控制与状态采集
ECAN-Lite
多路 CAN 汇聚
周期打包与转发
体内 CAN 网络
关节 / 夹爪 / 传感器
末端工具与扩展模块
体内总线集中接入

多路 CAN / CAN FD 可以按机械臂关节、末端执行器、传感器或测试接口分组,主站侧仍按统一 EtherCAT 从站访问。

控制与诊断同链路

同一条 EtherCAT 链路既能下发控制帧,也能回收状态帧、错误帧和调试数据,减少额外调试线缆。

适合样机调试

研发阶段可以快速观察 CAN 帧、节点状态、版本信息和错误计数,方便定位关节、线束和协议问题。

方便量产维护

产线和现场可通过主站脚本完成扫描、配置、收发验证和 FoE OTA,提升批量测试与固件升级效率。

典型示例:机器狗主控运行 Linux 和 IgH EtherCAT 主站,主控通过 EtherCAT 周期任务连接 ECAN-Lite,再由 ECAN-Lite 转换到多路 CAN / CAN FD,总线下挂关节电机、足端传感器或电源管理模块。这样主控软件仍然按 EtherCAT 的周期控制模型开发,同时保留 CAN 电机和 CAN 传感器的成熟生态。
机器狗
示例
Linux 主控
运行 IgH 主站
控制任务统一调度
EtherCAT
周期 PDO
低延迟主干网络
ECAN-Lite
EtherCAT 转 CAN
多通道分组转发
CAN 电机
关节驱动
传感器与扩展模块

适合哪些应用

应用场景 ECAN-Lite 带来的变化
CANopen 伺服接入 EtherCAT 用 EtherCAT 周期任务集中控制多个 CANopen 节点
机器人本体内部通信 将关节、末端工具、传感器和扩展模块的 CAN 数据汇入机器人控制器
机器狗 / 移动机器人控制 Linux 主控运行 IgH 主站,经 EtherCAT 转 CAN 控制关节 CAN 电机
机器人样机调试 通过统一主站链路观察 CAN 帧、节点状态、错误计数和版本信息
多路 CAN 数据采集 将分散的 CAN 总线数据汇入统一主站
设备产线测试 用脚本批量完成配置、收发、校验和升级
旧 CAN 设备升级改造 保留原有设备协议,降低系统迁移成本
控制柜接口扩展 减少主机 CAN 接口数量,让系统结构更清晰

为什么更容易集成

主站侧简单

按 EtherCAT 从站配置 PDO、SDO 和 FoE,不需要重新设计一套专用通讯框架。

设备侧灵活

CAN 总线可以连接 CANopen 设备,也可以承载客户已有的私有 CAN 协议。

数据路径清晰

主站写 RxPDO 发送 CAN,主站读 TxPDO 接收 CAN,方向明确,排查方便。

可从测试走向量产

同一套机制可用于实验验证、产线测试和现场部署,减少重复开发。

交付特色

IgH 主站 demo

提供可直接编译运行的 Linux / IgH 示例,帮助客户快速验证单轴、多轴和周期收发。

配套升级包

每个发布版本提供与设备型号和出厂配置匹配的 FoE 升级包。升级前核对产品型号、固件版本和发布说明;不同设备配置的升级包不得混用。

FoE OTA 示例

主站侧可通过 FoE 更新固件,适合现场维护、版本回归和批量升级。

配置文档清晰

技术手册提供 PDO 打包格式、SDO 配置流程、对象字典和常见问题排查。

交付文件边界

文件 包含内容 不包含或不适用
ECAN-Lite-<version>-igh-demo.zip Linux / IgH 主站侧源码、构建文件和示例程序 不包含从站固件,不能直接烧录到设备
ECAN-DEMO-firmware-<release-id>.zip 带版本标识的直接烧录 BIN 及对应 JSON;包含 EtherCAT/CoE、动态 PDO 和 CAN/CAN FD 网关功能 BIN 不包含二级引导程序、FoE 升级头和现场升级能力,不作为正式 FoE 升级包
ECAN-Lite-firmware-<release-id>.zip raw、FoE、签名加密 FoE-sec 三个 BIN 及统一 JSON 必须按设备类型选择变体;FoE-sec 仅用于匹配出厂安全配置的 ECAN-Lite-S
ECAN-Lite.xml EtherCAT ESI 设备描述和 PDO/对象配置 不包含可执行代码或固件

典型工作流程

1
扫描从站
确认 ECAN-Lite 在线并读取版本。
2
配置能力
设置 PDO 大小、CAN 位率和通道模式。
3
写入 RxPDO
主站把待发送 CAN 帧放入周期数据。
4
读取 TxPDO
主站获取 CAN 总线回传的数据。
5
维护升级
通过 FoE OTA 更新固件并确认版本。

集成前检查

型号与版本一致

设备型号、ESI、固件包和主站示例来自同一兼容发布版本。

网络拓扑清楚

EtherCAT 专用接口、从站顺序和各 MCAN 通道接线已经记录。

PDO 映射匹配

SM2/SM3 长度、assignment 和应用选择的 PDO profile 完全一致。

CAN 参数核对

仲裁/数据波特率、CAN FD、BRS、终端电阻和节点协议均已确认。

先用稳定 profile

首次联调从默认 SM profile 开始,需要 1 kHz 闭环时再验证 DC profile。

保存验收证据

记录 WKC、从站状态、错误计数、CAN 帧完整性和长时间运行结果。


Application Manual

ECAN-Lite 应用手册 V3.0

本手册面向 ECAN-Lite 系统集成人员,说明设备接线检查、EtherCAT 主站配置、 CAN/CAN FD 收发、实时周期应用、IgH 集成、固件升级和现场诊断方法。 PDO 字段定义、对象字典、能力位和错误码的完整说明见 《ECAN-Lite 技术参考手册 V3.0》

目录

[TOC]


1. 文档范围与系统集成流程

本手册按照“基本收发验证、工程配置、周期应用、功能扩展、诊断维护”的顺序组织内容。 首次接入应先完成单从站、单通道和单帧验证,再根据项目要求增加 PDO 容量、CAN 通道、 实时周期和诊断功能。每次只调整一类参数,并在进入下一阶段前保存配置和验证结果。

1.1 数据方向

EtherCAT 的 PDO 方向以主站为参照:

名称 EtherCAT 方向 数据流 ECAN-Lite 侧作用
RxPDO / Output / SM2 主站写入 主站到从站,M2S 解析 CAN_FRAME,并向 CAN 总线发送
TxPDO / Input / SM3 主站读取 从站到主站,S2M 封装从 CAN 总线接收的帧和通道状态
EtherCAT 主站 应用程序 / IgH domain ECAN-Lite PDO 编解码与队列 MCAN 通道 CAN/CAN FD 设备 控制器 / 分析仪 / 电机 RxPDO:主站写入 TxPDO:主站读取 CAN 发送 CAN 接收

图 1 EtherCAT 过程数据与 CAN/CAN FD 数据方向。

1.2 出厂配置与推荐配置

固件版本和运行配置属于不同层级。固件 2.x 表示设备具备 V2 头部和 16B PDO 细分等 扩展能力,不表示设备在上电后自动启用这些功能。为兼容已部署主站,出厂和复位配置采用 V1 头部并关闭 PDO payload CRC16,对应 OptionFlags=0x04

新项目可在读取能力对象后显式选择 V2 头部并保持 CRC 关闭,对应 OptionFlags=0x24。V2 减少固定头部长度,但主站必须使用支持 V2 的编解码器。

配置项 出厂或复位配置 新项目推荐配置 说明
PDO 头部 V1 V2,显式启用 仅影响头部字段和帧区起点
PDO payload CRC16 关闭 关闭 EtherCAT 和 CAN 自身校验不受影响
PDO 总长度 每方向 256B 每方向 256B 起步 0x8010/0x8011:03=0x02
通道掩码 设备支持范围 首次仅启用 CAN0 验证完成后再扩展通道
封装 Profile Profile 0 Profile 0 variable DLC、无时间戳
Budget Balanced Balanced 负载验证后再调整

1.3 基本集成流程

检查设备型号、固件、ESI 建立 PDO映射、长度、方向 配置 MCAN模式、速率、采样点 验证收发WKC、帧内容、状态 扩展应用周期、通道、负载

图 2 ECAN-Lite 系统集成的基本流程。

阶段 配置或检查内容 完成条件
1 产品型号、固件版本、ESI、从站位置 主站可枚举设备并进入 PREOP
2 0x1C12/0x1C13、SM2/SM3、PDO 总长度 主站映射长度与设备 Active PDO bytes 一致
3 PDO 头部、CRC、通道掩码和 Profile 0x8010/0x8011:02=0,Active 回读正确
4 CAN/CAN FD 模式、速率、采样点和 TDC 对应 0x8001..0x8008:02=0
5 周期过程数据和 CAN 闭环 OP 与 WKC 稳定,帧内容和时序符合要求

1.4 使用前检查

  • 使用与产品型号和固件兼容的正式 ESI 文件,不修改设备 SII/EEPROM;
  • EtherCAT 专用网口未被其他网络服务占用,主站进程具有实时运行权限;
  • CAN_H、CAN_L、信号地、屏蔽和终端电阻符合现场总线设计;
  • CAN 对端支持目标的 Classic CAN 或 CAN FD ISO 模式、BRS、波特率和采样点;
  • 配置类 SDO 在 INIT、PREOP 或 SAFEOP 完成,布局变更不在 OP 周期中执行;
  • 所有 Apply 操作均读取 Status 和 Active 参数,不以 SDO 写入成功替代生效检查;
  • 电机或执行器首次联调时保持安全状态,关闭主动运动并准备独立急停。

2. 单通道 CAN FD 收发验证

本章使用以下固定条件建立最小收发闭环:从站位置 0、CAN0、标准 ID 0x123、 CAN FD ISO、BRS、仲裁域 1Mbit/s、数据域 5Mbit/s、DLC 8,数据为 11 22 33 44 55 66 77 88。示例使用 4 通道产品的 V2 头部并关闭 payload CRC16。

2.1 确认主站和从站状态

在 Linux IgH 环境执行:

sh
sudo ethercat master
sudo ethercat slaves

预期结果:

  • EtherCAT master 已绑定到专用网口;
  • 从站位置、Vendor ID、Product Code 与实际设备一致;
  • 无其他周期应用占用同一 master;
  • 设备至少能够进入 PREOP。

2.2 读取设备能力

在 PREOP 读取固件版本、头部版本和 PDO 功能能力:

sh
sudo ethercat upload -p 0 -t uint16 0xF000 0x05
sudo ethercat upload -p 0 -t uint16 0xF000 0x06
sudo ethercat upload -p 0 -t uint16 0xF000 0x09
sudo ethercat upload -p 0 -t uint32 0xF000 0x16

选择 V2 前应同时满足以下条件:

对象 要求
0xF000:05/:06 设备运行支持 V2 的 2.x 固件
0xF000:09 头部版本掩码包含 V2
0xF000:16 bit13 HEADER_V2=1

任一条件不满足时,应使用 V1 和 OptionFlags=0x04。主站不得仅依据版本字符串推断当前 PDO image 的头部格式,运行期必须读取 ver_ihl

2.3 建立 256B PDO 映射

默认 256B 由两个连续的 128B chunk 构成。通用 EtherCAT 主站在 PREOP 配置以下 assignment:

text
RxPDO / SM2 / 主站输出:
0x1C12:00 = 0
0x1C12:01 = 0x1600
0x1C12:02 = 0x1601
0x1C12:00 = 2

TxPDO / SM3 / 主站输入:
0x1C13:00 = 0
0x1C13:01 = 0x1A00
0x1C13:02 = 0x1A01
0x1C13:00 = 2

IgH 应用通常由 ecrt_slave_config_pdos() 或本项目 Adapter 自动建立 assignment,不应在 master 激活后再次使用命令行改写映射。第三方主站应在工程的 PDO/SyncManager 页面选择 连续的两个 RxPDO chunk 和两个 TxPDO chunk。

2.4 配置 PDO Profile

0x8010 控制 TxPDO,即模块上传方向;0x8011 控制 RxPDO,即主站下发方向。 先写 requested 字段,最后写 :01=1 执行 Apply。

sh
# TxPDO: 256B、CAN0、Profile 0、Balanced、V2、CRC 关闭
sudo ethercat download -p 0 -t uint8 0x8010 0x03 0x02
sudo ethercat download -p 0 -t uint8 0x8010 0x04 0x01
sudo ethercat download -p 0 -t uint8 0x8010 0x05 0
sudo ethercat download -p 0 -t uint8 0x8010 0x06 0
sudo ethercat download -p 0 -t uint8 0x8010 0x07 0x24
sudo ethercat download -p 0 -t uint8 0x8010 0x01 1

# RxPDO: 256B、CAN0、Profile 0、Balanced、V2、CRC 关闭
sudo ethercat download -p 0 -t uint8 0x8011 0x03 0x02
sudo ethercat download -p 0 -t uint8 0x8011 0x04 0x01
sudo ethercat download -p 0 -t uint8 0x8011 0x05 0
sudo ethercat download -p 0 -t uint8 0x8011 0x06 0
sudo ethercat download -p 0 -t uint8 0x8011 0x07 0x24
sudo ethercat download -p 0 -t uint8 0x8011 0x01 1

Apply 后读取状态和 Active 参数:

sh
sudo ethercat upload -p 0 -t uint8  0x8010 0x02
sudo ethercat upload -p 0 -t uint16 0x8010 0x09
sudo ethercat upload -p 0 -t uint16 0x8010 0x0A
sudo ethercat upload -p 0 -t uint32 0x8010 0x0B
sudo ethercat upload -p 0 -t uint32 0x8010 0x0C

sudo ethercat upload -p 0 -t uint8  0x8011 0x02
sudo ethercat upload -p 0 -t uint16 0x8011 0x09
sudo ethercat upload -p 0 -t uint16 0x8011 0x0A
sudo ethercat upload -p 0 -t uint32 0x8011 0x0B
sudo ethercat upload -p 0 -t uint32 0x8011 0x0C
回读项 本例预期值或判断
:02 Status 0
:09 Active PDO bytes 256
:0A Active frame area bytes 4 通道 V2 为 240
:0B Active layout CRC 两端记录并保持一致
:0C Active profile word 与 256B、CAN0、Profile 0、Balanced、0x24 一致

2.5 配置 CAN0

以下配置显式选择 Normal、CAN FD ISO、TDC、1Mbit/s 和 5Mbit/s。采样点保持固件自动 求解范围;当对端要求固定采样点时使用 3.5 节的精确配置。

sh
sudo ethercat download -p 0 -t uint8  0x8001 0x07 0
sudo ethercat download -p 0 -t uint8  0x8001 0x08 0
sudo ethercat download -p 0 -t uint8  0x8001 0x09 0
sudo ethercat download -p 0 -t uint8  0x8001 0x0F 1
sudo ethercat download -p 0 -t uint8  0x8001 0x10 1
sudo ethercat download -p 0 -t uint32 0x8001 0x13 1000000
sudo ethercat download -p 0 -t uint32 0x8001 0x14 5000000
sudo ethercat download -p 0 -t uint8  0x8001 0x01 1
sudo ethercat upload   -p 0 -t uint8  0x8001 0x02

0x8001:02 必须返回 0。返回 4 表示运行配置未能应用,常见原因包括位时序组合 不可实现、Message RAM 配置超出容量、节点模式冲突或驱动重启失败。此状态下不应进入 正式周期运行。

2.6 构建 RxPDO 首帧

4 通道产品的 V2 头部为 16B。标准 ID、CAN FD、BRS、DLC 8 的 CAN_FRAME 为 12B, 因此本例的有效过程数据为 28B,256B PDO 的其余字节全部为 00

text
Offset 0x00..0x0F,V2 固定头:
24 00 01 00 01 00 0C 00 00 00 A1 04 00 00 00 00

Offset 0x10..0x1B,CAN_FRAME:
40 03 23 01 11 22 33 44 55 66 77 88

Offset 0x1C..0xFF:
全部为 00
Offset 字节 字段与取值
0 24 version=2,IHL=4,头部长度 16B
1 00 header flags,无错误和截断
2..3 01 00 seq_begin=1
4..5 01 00 seq_end=1
6..7 0C 00 payload_len=12
8..9 00 00 CRC 关闭,payload_crc16=0
10..11 A1 04 本例配置的 layout_id=0x04A1
12..15 00 00 00 00 CAN0..CAN3 的 V2 压缩状态区
16..17 40 03 Ctrl=0x0340,CAN0、DLC8、FDF、BRS
18..19 23 01 标准 ID 0x123
20..27 11..88 8B CAN 数据

layout_id 由 Active PDO 配置生成,不应在不同 PDO 大小、通道掩码或 OptionFlags 之间 复用固定常量。使用官方 IgH codec 时由库自动填写;自研主站应按技术参考手册的 Active Profile 规则生成并校验。

2.7 发布顺序与幂等处理

发送端应按以下顺序更新 RxPDO:

  1. 清零未使用帧区;
  2. 写入所有 CAN_FRAME;
  3. 写入 payload_len、CRC、layout_id 和其他头字段;
  4. 写入新的 seq_begin
  5. 最后写入相同值的 seq_end
  6. 将完整 PDO image 交给 EtherCAT master 发送。

接收端只有在 seq_begin==seq_end 时才解析 image。相同序号和相同内容的重复 RxPDO 被视为幂等数据,不会重复发送 CAN 帧。每次发布新的业务请求时,16bit 序号均应递增; 序号从 0xFFFF 回绕到 0x0000 时设置相应头部状态。

2.8 收发结果判定

完成条件如下:

  1. 从站进入 OP,domain WKC 连续完整;
  2. CAN 分析仪收到标准 ID 0x123、FD、BRS、DLC8 和指定数据;
  3. CAN 对端发送应答后,TxPDO 序号和有效负载发生变化;
  4. TxPDO 的 CAN_FRAME ID、DLC、flags 和数据与 CAN 总线记录一致;
  5. 0x8001:020x8010:020x8011:02 均为 0
  6. PDOErrorCounterPDOOverflowCounter 和 CAN 错误计数不持续增长。

ECAN-Lite 不提供逐帧 TX_RESULT 数据包。CAN 发送请求是否得到业务响应,应由 CAN 对端 应答确认;本地拥塞、BusOff 和封装错误通过 PDO 头部状态及 SDO 诊断对象确认。

3. PDO 与 CAN 配置

3.1 PDO assignment、总长度和帧区

PDO assignment 决定 EtherCAT 主站实际映射的过程数据长度;0x8010/0x8011 决定固件 内部使用的 Active Profile。两者必须在进入 OP 前保持一致。

text
主站 assignment 与 SM 长度
        = ActivePDOBytes
        = 128 x base + 16 x fine

ActiveFrameAreaBytes
        = ActivePDOBytes - HeaderBytes
方向 Assignment PDO map SyncManager Profile 控制对象
RxPDO,主站下发 0x1C12 0x1600..0x1617 SM2 0x8011
TxPDO,模块上传 0x1C13 0x1A00..0x1A17 SM3 0x8010

PDO map 必须从第一个 chunk 开始连续选择。跳选、重排或主从长度不一致会导致 WKC 异常、 无法进入 OP 或 Status=5

3.2 5+3 PDO 大小编码

固件在原有 U8 大小字段中保留旧主站使用的 128B 步进,并使用高 3bit 增加 16B 微调:

text
base = selector & 0x1F
fine = selector >> 5
ActivePDOBytes = base x 128 + fine x 16
含义 ECAN-Lite 范围
bit0..4 128B 基础块数量 1..10
bit5..7 16B 尾单元数量 0..7
目标大小 base fine selector Assignment
128B 1 0 0x01 1 个完整 chunk
144B 1 1 0x21 1 个完整 chunk + 1 个 16B 尾 entry
256B 2 0 0x02 2 个完整 chunk
272B 2 1 0x22 2 个完整 chunk + 1 个 16B 尾 entry
384B 3 0 0x03 3 个完整 chunk
400B 3 1 0x23 3 个完整 chunk + 1 个 16B 尾 entry
1392B 10 7 0xEA 产品声明的单方向上限

仅在 0xF000:16 bit7 FINE_SIZE_16=1 时使用高 3bit。旧主站继续写 1..10 时高位为 0, 行为与原有 128B 步进一致。修改 PDO 长度时应同时更新 ESI/FMMU assignment、SM 长度、 主站 domain 和固件 profile。

!!! caution "PDO 容量与实时性能" 增大 PDO 会增加 EtherCAT 帧长度、ESC/PDI 搬运量和主站处理时间。配置上限不代表在任意周期、从站数量和 CAN 负载下均能稳定运行。目标组合必须进行 WKC、周期抖动和数据完整性测试。

3.3 V1、V2 与 CRC

V1 和 V2 使用相同的前 12B 公共字段。V2 删除可由 Active Profile 或帧流推导的字段, 并将每通道状态从 16bit 压缩为 8bit。切换头部版本不改变 PDO 总长度或 EtherCAT assignment,但会改变 CAN_FRAME 的起始 offset。

4 通道产品 V1,24B 12B 公共字段 + 4B V1 诊断 每通道 2B 状态 x 4 V2,16B 12B 公共字段 每通道 1B x 4 两种版本均保留双序号、有效长度、CRC 字段、布局标识和通道状态。

图 3 4 通道产品的 V1 和 V2 固定头部。

产品 V1 头部 V2 头部
HPM5E,4 通道 24B,ver_ihl=0x16 16B,ver_ihl=0x24
HPM6E,8 通道 32B,ver_ihl=0x18 20B,ver_ihl=0x25
组合 OptionFlags 使用条件
V1 + CRC 关闭 0x04 出厂默认、旧主站兼容
V1 + CRC 开启 0x00 V1 主站主动启用 payload CRC16
V2 + CRC 关闭 0x24 读取能力后显式启用 V2
V2 + CRC 开启 0x20 V2 主站主动启用 payload CRC16

CRC 关闭时,发送端填写 payload_crc16=0,接收端跳过 payload CRC 计算。CRC 开启时使用 CRC-16/CCITT-FALSE,覆盖范围为 [HeaderBytes, HeaderBytes+payload_len)。EtherCAT 帧校验、 CAN 帧 CRC 和 PDO payload CRC 属于不同层级。

主站解析器应根据每个 image 的 ver_ihl 计算 HeaderBytes=4 x IHL,并通过统一编解码 接口处理 V1 和 V2。不得将某一个固定 offset 作为所有设备和所有配置的帧区起点。

3.4 CAN_FRAME 编码

CAN_FRAME 以 2B 控制字开始,多字节字段采用 little-endian:

text
Byte0: CH[2:0] | DLC[6:3] | IDE[7]
Byte1: FDF[0] | BRS[1] | X[2] | TSF[4:3] | KIND[6:5] | D64[7]
字段 说明
CH CAN 通道,当前 4 通道产品使用 0..3
DLC 原始 CAN DLC,0..15
IDE 0 为 11bit 标准 ID,1 为 29bit 扩展 ID
FDF 0 为 Classic CAN,1 为 CAN FD
BRS CAN FD 数据段速率切换
X Classic CAN 表示 RTR,CAN FD 表示 ESI
TSF 0/1/2/3 对应无时间戳、delta16、delta32、full64
KIND 当前只支持 0 CAN_FRAME,其他值保留
D64 使用固定 64B data window

标准帧包长和扩展帧包长分别为:

text
standard = 2B Ctrl + 2B ID + timestamp + data + padding
extended = 2B Ctrl + 4B ID + timestamp + data + padding
DLC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
数据字节 0 1 2 3 4 5 6 7 8 12 16 20 24 32 48 64

剩余帧区不足以容纳一个完整 CAN_FRAME 时,不得写入半包。启用 ALIGN4 后,每个包的 padding 字节必须填 0,并计入 payload_len

3.5 精确采样点配置

当 CAN 对端要求仲裁域 1Mbit/s、76.5%,数据域 5Mbit/s、88.2% 时,将自动求解器的 采样点上下限设置为同一目标值:

sh
sudo ethercat download -p 0 -t uint8  0x8001 0x07 0
sudo ethercat download -p 0 -t uint32 0x8001 0x13 1000000
sudo ethercat download -p 0 -t uint32 0x8001 0x14 5000000
sudo ethercat download -p 0 -t uint16 0x8001 0x15 765
sudo ethercat download -p 0 -t uint16 0x8001 0x16 765
sudo ethercat download -p 0 -t uint16 0x8001 0x17 882
sudo ethercat download -p 0 -t uint16 0x8001 0x18 882
sudo ethercat download -p 0 -t uint8  0x8001 0x0F 1
sudo ethercat download -p 0 -t uint8  0x8001 0x10 1
sudo ethercat download -p 0 -t uint8  0x8001 0x01 1
sudo ethercat upload   -p 0 -t uint8  0x8001 0x02

返回 0 表示应用成功。返回 4 表示当前时钟、采样点、SJW/TSEG 约束或其他通道资源 无法形成有效运行配置。应读取通道诊断并恢复到已验证的位时序,不应在 Apply 失败后继续 发送 CAN 数据。5Mbit/s 及以上数据段由固件强制启用 TDC;TDC offset/filter=0 表示由 驱动根据实际位时序自动计算。

3.6 多通道配置

0x8010/0x8011:04 的 bit0..bit7 对应 MCAN0..MCAN7。通道掩码限制该 PDO 方向允许使用 的通道;每个 CAN_FRAME 的 CH 字段仍决定具体通道,通道掩码不表示广播。

目标通道 Channel mask
CAN0 0x01
CAN0..1 0x03
CAN0..3 0x0F
CAN0..7 0xFF,仅 8 通道产品

扩展通道时应分别配置对应的 0x8001..0x8008,逐通道检查 Apply Status,再修改 TxPDO 和 RxPDO 的 Channel mask。生产配置应明确每个通道的物理接线、波特率、过滤器和负载。

3.7 Profile、Budget 与数据路径选项

需求 配置项 应用要求
variable DLC、最低固定开销 Profile 0 通用 CAN/CAN FD 推荐
delta16 时间戳 Profile 1 主从两端使用相同时间戳解析
固定 64B data window Profile 4 容量按 64B data 计算
D64 + delta16 Profile 5 同时满足固定窗口和时间戳能力
帧包 4B 对齐 OptionFlags bit1 padding 清零并计入长度
限制每周期收发帧数 RX/TX budget 按 CAN 线速、PDO 容量和实测结果设置
过载保留较新反馈 drop-oldest 策略 适用于状态反馈,不适用于必须按序执行的命令

配置流程统一为:写 requested 字段,执行 Apply,读取 Status,读取 Active 参数,再进入 OP。 实时循环中不执行 SDO Apply、动态内存分配、阻塞等待或大量日志输出。

4. 周期应用与 IgH 集成

4.1 IgH 环境和示例包构建

实时 EtherCAT 应用应运行在物理 Linux 主机。准备 IgH 的 ecrt.hlibethercat.so 后,在 tools/igh 目录执行:

sh
cmake -S . -B build \
  -DECRT_INCLUDE_DIR=<ethercat-root>/include \
  -DECRT_LIBRARY=<ethercat-root>/lib/libethercat.so \
  -DECAN_IGH_WARNINGS_AS_ERRORS=ON
cmake --build build
ctest --test-dir build --output-on-failure

仅验证 PDO codec 时可关闭 IgH demo:

sh
cmake -S . -B build -DECAN_IGH_BUILD_DEMO=OFF
cmake --build build
ctest --test-dir build --output-on-failure

构建和测试命令必须返回 0。实时运行前执行 sudo ethercat mastersudo ethercat slaves,确认拓扑、网口和 master 占用状态。

4.2 软件分层

主要接口或文件 职责
IgH Adapter igh_adapter.h master、domain、PDO、DC、OP 和 WKC
250us Pipeline igh_250us_pipeline.h 四相 SM 调度
MCAN Port igh_mcan_port.h 通道配置和 CAN/CAN FD 收发
PDO Codec igh_mcan_pdo_codec.h V1/V2 头部、序号、CRC 和帧边界
应用协议 examples/mitexamples/cia402 电机和 CANopen/CiA402 示例

业务程序应优先调用满足需求的最高层接口。仅在实现自定义过程数据协议时直接访问 Adapter raw buffer;业务层不依赖 src 目录中的私有结构。

4.3 初始化与生命周期

推荐初始化顺序:

text
申请 master
-> 创建每个从站的配置和 domain
-> 读取并验证 capability
-> 建立 PDO assignment 和启动 SDO
-> 配置 SM 或 DC
-> 激活 master
-> 等待全部从站 OP 且 WKC 连续完整
-> 启动实时循环

Adapter 最小初始化示例:

c
ecan_igh_config_t config;
ecan_igh_context_t igh;

ecan_igh_default_config(&config);
ecan_igh_config_set_slave_count(&config, 1);

if (ecan_igh_init(&igh, &config) != IGH_ECAN_OK) {
    return 1;
}
if (ecan_igh_wait_op_timeout(&igh, 10000) != IGH_ECAN_OK) {
    ecan_igh_close(&igh);
    return 1;
}

ecan_igh_wait_op_timeout() 同时检查从站 OP 和完整 WKC,并要求连续就绪。进入业务循环前 应完成预热并清零运行诊断。

4.4 周期调用顺序

标准 Adapter 调用顺序:

c
if (ecan_igh_cycle_begin_checked(&igh) != IGH_ECAN_OK) {
    /* 保持安全输出,并记录本周期错误。 */
}

uint8_t *rxpdo = NULL;
const uint8_t *txpdo = NULL;
size_t rx_size = 0;
size_t tx_size = 0;

ecan_igh_get_rxpdo_buffer(&igh, 0, &rxpdo, &rx_size);
ecan_igh_get_txpdo_buffer(&igh, 0, &txpdo, &tx_size);

/* 解析上一周期输入,计算并构建本周期输出。 */

if (ecan_igh_cycle_end_checked(&igh) != IGH_ECAN_OK) {
    /* 不推进运动目标或业务状态机。 */
}

MCAN Port 周期示例:

c
if (igh_mcan_port_cycle_begin_checked(&mcan) != IGH_ECAN_OK) {
    /* 保持安全输出。 */
}

igh_mcan_port_receive(&mcan, frames, capacity, &count);
igh_mcan_port_send_canfd(&mcan, slave, channel, can_id,
                         extended, brs, payload, payload_size);

if (igh_mcan_port_cycle_end_checked(&mcan) != IGH_ECAN_OK) {
    /* 记录错误并保持状态。 */
}

周期线程应使用绝对时间、SCHED_FIFOmlockall()、固定 CPU 和明确的网卡 IRQ 规划。 WKC 不完整或从站退出 OP 时,应用应保持安全输出或停止发送,不继续推进电机目标。

当前 IgH 主站库提供两个完整实时 Profile。Profile 会同时设置 EtherCAT 周期、同步方式和 默认 PDO 大小,应用不应只复制其中某一个周期或相位参数。

Profile EtherCAT 周期 默认 RxPDO / TxPDO 业务时序
SM_250US_1MS 250us 128B / 256B 四通道轮转,每通道 1ms
DC_1MS_CROSS_CYCLE 1ms 384B / 384B Sync0 900us,请求 N、回复 N+1

4.5 SM 250us 四相模式

SM Profile 将 1ms 分为四个 250us 子周期,依次服务 MCAN0、MCAN1、MCAN2 和 MCAN3。 每个 EtherCAT 子周期同时交换 SM2 和 SM3;每个 CAN 通道获得固定的 1ms 业务周期。

SM 周期:4 x 250us = 1ms 相位 0,MCAN0SM2 写入 + SM3 读取 相位 1,MCAN1SM2 写入 + SM3 读取 相位 2,MCAN2SM2 写入 + SM3 读取 相位 3,MCAN3SM2 写入 + SM3 读取 每个子周期均执行完整 EtherCAT 收发;单通道业务周期为 1ms。

图 4 SM 250us 四相 Profile。

直接运行:

sh
sudo ./build/igh_250us_four_phase_demo \
  --sm --slaves 1 --cycles 40000 --closed-loop --frames-per-slot 1

应用应记录周期唤醒迟到、漏周期、WKC、各通道收发计数和数据错误。250us 子周期不表示 每个通道每 250us 都发送业务帧;默认四相模式下每个通道每 1ms 获得一次业务时隙。

4.6 DC 1ms、Sync0 900us 和 N+1

DC Profile 面向 1kHz 闭环。主站在周期 N 的 RxPDO 中发布请求,从站在 Sync0 900us 相位附近完成数据面服务,主站在周期 N+1 读取对应 TxPDO。N 到 N+1 是正常闭环延迟, N+2 及以后才属于额外周期延迟。

DC 周期:1ms,Sync0 shift:900us 周期 N 写入 RxPDO发布 CAN 请求 EtherCAT、CAN 请求和应答处理窗口从站准备后续 TxPDO Sync0 周期 N+1读取回复 900us

图 5 DC 1ms 错周期闭环。

配置和运行:

c
ecan_igh_default_config(&config);
if (ecan_igh_config_apply_realtime_profile(
        &config, ECAN_IGH_PROFILE_DC_1MS_CROSS_CYCLE) != IGH_ECAN_OK) {
    return 1;
}
sh
sudo ./build/igh_simple_loop

验收统计应将 N+1 和 N+2 分别计数,避免把主站内部同周期桶直接解释为业务闭环延迟。

4.7 启动与停止要求

启动过程应满足:

  1. 没有其他进程占用 master;
  2. 从站身份、PDO 映射和启动 SDO 配置正确;
  3. 主站激活后等待全部从站 OP 和完整 WKC;
  4. 完成预热和诊断计数清零后再发送业务命令;
  5. 电机控制先完成状态读取,再按照安全流程使能。

停止过程应满足:

  1. 停止产生新的 CAN 命令;
  2. 根据设备要求发送安全停止或失能命令;
  3. 继续运行必要的若干周期,使最终输出完成传输;
  4. 停止周期线程并释放 master;
  5. 保存 WKC、错误计数、周期统计和从站状态;
  6. 再次启动前确认上一进程已经完全退出。

正常停止和重复启动不应产生持续的 SAFEOP+ERROR、同步错误或 master 占用冲突。若设备 在释放 master 后短暂重新扫描,应以最终 PREOP/SAFEOP 状态和下一次启动结果判断恢复情况。

5. 功能扩展与系统验证

5.1 多从站和不同 PDO 长度

多从站系统可为每个从站设置不同 PDO 长度,但每个从站的 RxPDO、TxPDO、SM、domain 和 Active Profile 必须分别一致。例如三个从站使用 256B + 256B + 128B 时,最后一个从站 只启用两路 CAN 通道,可使用较小的过程数据区;主站仍需为三个从站分别建立 domain 或 明确记录各自 offset 和 WKC。

IgH Adapter 支持按字节或按原始编码配置:

c
ecan_igh_config_set_pdo_bytes(&config, 256);
ecan_igh_config_set_slave_pdo_multiplier(&config, 2, 0x01);

实际 API 参数应以随版本发布的 tools/igh/API.md 为准。改变总 PDO 后,应检查主站生成的 EtherCAT datagram 数量和长度;单方向过程数据超过一个 datagram 时,确认主站具备相应的 大 domain 分割能力。

5.2 负载估算和测试顺序

CAN FD 帧时间包含仲裁、控制、位填充、CRC、ACK 和帧间隔,不能使用 payload bytes / data bitrate 作为完整帧时间。系统吞吐还受以下因素影响:

  • 各 MCAN 外设服务时间和 CAN 总线仲裁;
  • 对端设备的应答处理时间;
  • PDO 解析、队列、打包和 ESC/PDI 搬运;
  • EtherCAT 帧长度、从站数量和主站周期抖动;
  • 线程调度、CPU 亲和性、网卡驱动和 IRQ 负载。

推荐测试顺序:

阶段 组合 最低检查项
1 单从站、CAN0、每周期 1 帧 WKC、ID、DLC、数据、序号
2 单从站、目标单通道帧数 丢失、重复、乱序、周期延迟
3 单从站、多通道 各通道公平性和队列压力
4 多从站、目标 PDO EtherCAT 帧长度和各 domain WKC
5 额定负载长时间运行 错误计数、温度、恢复能力
6 过载后恢复额定负载 丢包策略和自动恢复时间

5.3 过载条件下的丢帧与恢复

过载测试可以主动超过 PDO 容量或 CAN 线速。判定标准如下:

  1. 丢帧策略与配置一致,并有可读取的计数器;
  2. 不出现永久队列阻塞、序号停滞、不可逆 BusOff 或进程死锁;
  3. EtherCAT WKC 和 AL 状态不因 CAN 侧过载长期异常;
  4. 负载恢复到额定值后,在规定时间内恢复正常收发;
  5. 重复执行过载和恢复过程,结果一致;
  6. 必须按序执行的命令不使用会改变顺序语义的 drop-oldest 策略。

5.4 CiA402 和电机应用

项目提供的 CiA402 示例位于 tools/igh/examples/cia402。电机控制应在 MCAN Port 之上 实现轴表、Node ID、NMT、SDO、PDO、SYNC 和状态机,不直接复制大型 demo 主函数到业务程序。

首次运行前应确认:

  • 电机 Node ID、波特率、PDO 映射和工作模式;
  • 机械限位、运动方向、减速比、零位和急停;
  • 示例处于不自动使能、不主动写零位的安全配置;
  • WKC 不完整或 CAN 心跳超时时停止推进目标;
  • 单轴和低速验证通过后再增加轴数和缩短周期。

查看示例参数:

sh
sudo ./build/igh_cia402_single_axis_demo --help
sudo ./build/igh_mit_canfd_motor_demo --help

5.5 第三方 EtherCAT 主站

TwinCAT、CODESYS、Acontis 或自研主站应完成以下配置:

  1. 导入正式 ESI,并确认设备身份;
  2. 在 PREOP 选择连续 PDO chunk,配置 0x1C12/0x1C13
  3. 将 SM2/SM3 过程数据长度设为目标 Active PDO bytes;
  4. 通过 Startup SDO 配置 0x8010/0x8011,最后执行 Apply;
  5. 配置 0x8001..0x8008 的 CAN 通道参数;
  6. 回读 Apply Status、Active PDO bytes、Active frame area、layout CRC 和 profile word;
  7. 在周期任务中写 RxPDO、读 TxPDO,并按 ver_ihl 调用统一 codec;
  8. 持续检查 WKC、从站 OP、PDO 错误和 CAN 通道状态。

第三方主站可能将一个 PDO 拆分为多个 ARRAY[0..15] OF BYTE 或 16B entry。应用必须按 mapping 顺序将这些 entry 视为一个连续 buffer,再进行头部和 CAN_FRAME 编解码。

6. 诊断、升级与现场验收

6.1 故障分层定位

未收到预期 CAN 数据 EtherCAT 异常AL、WKC、SM、PDO 长度 配置未生效Apply、能力、Active 回读 EtherCAT 正常PDO 内容和 CAN 物理层 恢复 WKC 后复测核对 mapping 和周期 Status 清零后进入 OP保存失败字段和错误码 检查方向、序号和总线再检查终端和 BusOff

图 6 EtherCAT、配置和 CAN 三层故障定位。

现象 优先检查 常见原因
无法进入 OP AL 状态、WKC、SM2/SM3 长度 ESI、domain、assignment 和 Active PDO bytes 不一致
0x8001:02=4 位时序、TDC、Message RAM 位时序不可实现、资源超限或运行配置应用失败
0x8010/0x8011:02=5 主站 mapping 修改了 PDO 总长度但未重建 assignment
WKC 正常但 CAN 不发送 RxPDO 方向、序号、layout、通道掩码 写错方向、重复序号、V1/V2 不一致或通道未启用
CAN 已发送但无业务响应 对端抓包、应答 ID、节点状态 对端未应答、ID 或业务协议错误
高频丢帧 CAN 占用率、budget、队列、周期 线速不足、应用漏周期、PDO 容量或 PDI 时间不足
过载后不能恢复 BusOff、队列计数、状态机 自动恢复未启用、队列阻塞或设备异常
CRC 错误 OptionFlags、覆盖范围、padding 两端 CRC 开关、算法或长度不同

6.2 WKC 和同步错误

WKC 异常的检查顺序:

  1. 停止 CAN 压力,只保留固定 PDO image;
  2. 核对每个从站的 domain、SM2/SM3、assignment 和 Active PDO bytes;
  3. 使用单从站、默认 256B 和较慢周期复现;
  4. 检查实时循环是否每周期完整执行 receive、process、queue 和 send;
  5. 检查主站唤醒迟到、漏周期、CPU/IRQ 和网卡错误;
  6. WKC 稳定后逐项恢复从站、通道、PDO 和 CAN 负载。

SM 数据可以由前一周期准备,但 ESC/PDI 所有权切换、主站访问窗口和固件处理仍必须在 周期时限内完成。预先准备数据不能消除 SM 长度错误、应用漏周期或 PDI 最坏执行时间对 WKC 的影响。

应用退出后日志中的 SAFEOP+ERRORAL status 0x001A Synchronization error 通常表示 主站停止周期交换时从站仍保持原同步监控状态。正常停止流程应减少该窗口;若下一次启动 不能自动恢复 OP,则应检查退出顺序、DC 同步配置和从站复位状态。

6.3 PDO 和 CAN 诊断对象

PDO 方向诊断:

对象 作用
0x8010/0x8011:02 Apply 或运行状态
:09/:0A Active PDO bytes 和帧区大小
:0B/:0C layout CRC 和 Active profile word
:0D 最近方向序号
:0E Last PDO error
:0F PDO error counter
:10 PDO overflow counter

CAN 通道详细状态位于 0x9000..0x9003,对应 CAN0..CAN3。重点检查 ECR、PSR、IR、 RX FIFO、TX FIFO、BusOff counter、RX dropped counter 和 TX backpressure counter。 诊断计数应在预热后清零,并以持续增量判断故障,不能只读取单个瞬时值。

6.4 FoE 固件升级

FoE 必须使用正式发布包中明确标注为当前产品、芯片系列和安全策略适用的封装应用镜像。 Raw 镜像和 FoE 镜像用途不同,不得互换。

升级流程:

  1. 保存设备型号、当前固件版本、构建号、ESI 和运行配置;
  2. 停止周期应用,确认 mailbox 可用;
  3. 按发布说明对每个从站执行 FoE,并保存完整日志;
  4. 多从站级联更新按不会提前中断链路的顺序执行;
  5. 全部镜像写入和校验成功后执行维护复位;
  6. 重新扫描从站并读取新版本、构建号和 capability;
  7. 先使用默认 V1、CRC 关闭完成兼容验证;
  8. 再显式启用 V2,并回归 PDO 大小、CRC、通道、SM/DC 和过载恢复。

典型 IgH 命令形式如下,文件名、从站位置和升级包路径应以正式发布说明为准:

sh
sudo ethercat foe_write -p 0 -o ecan_lite_app <foe-package.bin>

升级失败后不得反复写入来源不明的镜像。设备仍可进入 mailbox 状态时,应先保存错误信息并 核对镜像类型;设备无法枚举或无法 FoE 时,按照官方恢复流程处理。

6.5 现场验收

类别 必须记录
设备身份 产品型号、硬件版本、序列号、固件版本和构建号
软件版本 ESI、主站、内核、网卡驱动、应用提交号
PDO Rx/Tx 大小、selector、头部版本、CRC、Profile、通道掩码
EtherCAT 从站数、周期、DC shift、WKC、AL 状态、datagram 长度
CAN 通道、速率、采样点、帧类型、负载、错误帧、BusOff
实时性 唤醒迟到、漏周期、执行时间、N+1/N+2 分布
数据质量 发送、接收、丢失、重复、乱序、内容错误
恢复能力 过载、断线、BusOff、进程重启和从站重启恢复时间
可复现性 配置文件、命令、完整日志、抓包和测试时长

最低验收要求:稳定期全部从站保持 OP,WKC mismatch 为 0;请求和应答的 ID、DLC、flags、 payload 和序号一致;目标负载下不出现未声明的丢失、重复、乱序或长尾;过载或短时故障解除 后系统能够自动恢复。

附录 A:最小配置命令索引

任务 对象或命令
扫描从站 sudo ethercat slaves
读取固件能力 0xF000:05/:06/:09/:16
TxPDO Profile 0x8010
RxPDO Profile 0x8011
MCAN0..7 配置 0x8001..0x8008
MCAN0..3 信息 0x9000..0x9003
RxPDO assignment 0x1C120x1600..0x1617
TxPDO assignment 0x1C130x1A00..0x1A17
SM 四相示例 sudo ./build/igh_250us_four_phase_demo
DC 1ms 示例 sudo ./build/igh_simple_loop
CAN FD 发送验证 sudo ./build/igh_mcan_gateway_tx_probe --canfd --brs --len 8 --cycle-us 1000 --count 10000

附录 B:首帧十六进制对照

B.1 4 通道 V2、CRC 关闭

text
OptionFlags = 0x24
HeaderBytes = 16

24 00 01 00 01 00 0C 00 00 00 A1 04 00 00 00 00
40 03 23 01 11 22 33 44 55 66 77 88
00 ... 00  (补齐到 256B)

B.2 4 通道 V1、CRC 关闭

text
OptionFlags = 0x04
HeaderBytes = 24

16 00 01 00 01 00 0C 00 00 00 A1 00 01 01 00 00
00 00 00 00 00 00 00 00
40 03 23 01 11 22 33 44 55 66 77 88
00 ... 00  (补齐到 256B)

两组示例使用相同 CAN_FRAME。V1 的 channel_mask=0x01frame_count=1overflow_sat=0crc_alg=0 位于 offset 12..15;V2 不包含这些字段。

附录 C:兼容性矩阵

设备和主站 V1 V2 16B 细分 推荐配置
旧固件 + 旧主站 支持 不支持 不支持 保持 0x04 和原 PDO 大小
2.x 固件 + 旧主站 支持 主站不使用 低 5bit 兼容 不自动切换 V2
2.x 固件 + 新 IgH 支持 支持 capability 允许时支持 默认 0x04,项目可显式选择 0x24
第三方主站 取决于 codec 需实现 V2 需同步 ESI/SM 先完成单帧互通和 Active 回读

附录 D:文档边界

文档 内容范围
产品介绍 产品定位、选型、接口和能力概览
应用手册 接线、配置、收发、周期应用、升级和排障
技术参考手册 PDO 字段、对象字典、位定义、错误码和能力边界
IgH API 文档 主站库函数、参数、返回码和示例程序

当应用手册的摘要与目标产品对象字典、正式 ESI 或同版本技术参考手册不一致时,以正式发布包 中的目标产品定义为准,并停止使用不匹配的配置文件。

附录 E:修订说明

文档版本 主要内容
V3.0 按系统集成流程重构;补充完整首帧、PDO assignment、Active 回读、IgH 生命周期、SM/DC 时序、过载恢复、FoE 和现场验收;统一正式技术文档语体

Technical Reference

ECAN-Lite 技术参考手册 V3.0

本手册完整定义产品架构、EtherCAT/CAN FD协议、PDO字节布局、封装格式、对象字典、默认值和诊断接口。 接线、主站配置、IgH示例、FoE升级、运行调试和验收步骤见 《ECAN-Lite 应用手册 V3.0》

章节目录

[TOC]


1. 产品定位

ECAN-Lite 是 EtherCAT 到 CAN/CAN FD 的实时网关从站。主站通过 RxPDO 下发发送请求,通过 TxPDO 读取接收帧、发送结果和通道状态。

接口 本手册定义范围
EtherCAT SM2/SM3、PDO mapping、CoE SDO、FoE能力
CAN/CAN FD 通道配置、位时序、帧封装、状态与诊断
主站软件 连续过程映像、字段编码、边界条件和兼容规则

周期数据采用固定头部与连续帧流两层结构:

text
VersionedFixedPdoFrameHeader + FramePacketStream[ActivePDOBytes - HeaderBytes]

固定头通过 ver_ihl 自描述格式和长度;后续帧区连续存放 CAN/CAN FD 封装包。PDO大小、头部版本和能力差异分别在第4章和第5章定义。

!!! important "规范性说明" 本手册中的“必须”表示协议约束,“建议”表示推荐实现,“可以”表示可选能力。对象字典、位定义、默认值和边界条件以本手册为准;操作步骤以应用手册为准。


2. 核心特性

项目 说明
EtherCAT 2 端口从站,100Mbps,CoE,FoE
CAN 通道 4 路独立 MCAN,控制字 CH 字段预留 3bit,可表达 0..7
CAN 协议 CAN 2.0A / CAN 2.0B / CAN FD ISO
CAN 数据长度 Classic CAN 0..8B,CAN FD 0..64B,按 DLC 动态编码
PDO 大小 TxPDO/RxPDO 独立配置,128B*base + 16B*fine;默认编码 0x02 为 256B;旧整数 1..10 兼容
PDO 上限 1392B/方向;实际帧区容量由总长度减固定头部长度得到,见第4、5章
PDO 结构 自描述固定头+连续帧区;字节布局见第5章
多通道复用 多路 CAN 共用同一方向帧区,按预算策略共享剩余空间
时间戳 每帧可选,支持 off / delta16,delta32/full64 作为能力扩展
预约发送 RxPDO TSF_FULL64 format=1 可将 CAN 帧预约到下一次 SYNC0 周期内的指定相位
TDC CAN FD 默认开启;5M 及以上数据段强制开启;Offset/Filter 默认 0 自动计算,非 0 支持手动覆盖
诊断 PDO 快速状态 + SDO 详细状态;PDO 解析错误和溢出有计数记录
配置 SDO 在线配置,支持参数持久化、设备维护、FoE

3. 方向定义与系统架构

名称 EtherCAT 方向 主站视角 设备语义
TxPDO / Input PDO 从站 -> 主站 主站读取输入过程数据 上传 CAN/CAN FD 接收帧和压缩通道状态
RxPDO / Output PDO 主站 -> 从站 主站写入输出过程数据 下发 CAN/CAN FD 发送请求

TxPDO 与 RxPDO 是独立方向,可分别选择 PDO 大小、通道掩码、封装 profile、预算策略和方向选项。

通道使能与 PDO 大小互不替代。关闭 CAN 通道只改变 active channel mask 和调度预算,不改变 SM2/SM3 长度。

理解本文时可以把协议分成三层:

层级 主站需要做什么 本文入口
EtherCAT 映射层 选择前 N 个 128B PDO chunk,得到连续 RxPDO/TxPDO buffer 技术参考手册第4章
PDO 帧流层 在 offset 0 写/读版本化头部,在 HeaderBytes=4*(ver_ihl&0x0F) 开始写/读 CAN_FRAME 技术参考手册第5至11章
配置与诊断层 通过 SDO 配置 PDO profile、MCAN 通道并读取状态 第12章

首次收发按应用手册第1章执行。自行实现 PDO codec 时,必须阅读本手册第4至11章。

!!! warning "方向混淆会造成静默错误" RxPDO/SM2 是主站写、从站读;TxPDO/SM3 是从站写、主站读。注册过程映像、命名 buffer 和调用收发 API 时必须始终保持这一方向定义。

3.1 文档标记说明

本文后续表格使用以下标记:

标记 含义
RO Read Only,只读。主站只能通过 SDO 读取,写入无效或会被拒绝。
RW Read Write,读写。主站可通过 SDO 写入配置,也可读取回显或当前值。
WO Write Only,只写命令。主站写入触发动作,读取值不作为状态依据。
M2S Master to Slave,主站给从站。常见于 RxPDO/SM2 Output 或配置 SDO 写入。
S2M Slave to Master,从站给主站。常见于 TxPDO/SM3 Input 或状态/能力 SDO 读取。
CFG 配置或命令路径,通常通过 CoE SDO 完成,不属于周期 PDO 数据流。

PDO 表格中的 访问 指主站对过程数据的访问方式:RxPDO/SM2 为主站写,从站读;TxPDO/SM3 为从站写,主站读。SDO 表格中的 访问 指主站通过 CoE 对对象字典子项的访问属性。


3.2 系统架构

text
EtherCAT Master
  |
  |  SM2 RxPDO: Fixed Header + FramePacketStream
  |  SM3 TxPDO: Fixed Header + FramePacketStream
  v
+------------------------------+
| ECAN-Lite EtherCAT Slave |
|  SSC + CoE + FoE             |
|  Dynamic PDO Parser/Packer   |
|  Byte Budget Scheduler       |
+-----+-----+-----+-----+------+
      |     |     |     |
     CAN0  CAN1  CAN2  CAN3

4. EtherCAT PDO映射与大小

4.1 128B Chunk 映射

PDO 映射按 128B chunk 拼接。每个 chunk 在对象字典中拆成 8 个 STRING(16) 映射单元,以避免 PDO mapping entry 的 bit length 限制。

text
RxPDO chunk maps: 0x1600..0x1617
TxPDO chunk maps: 0x1A00..0x1A17
SM2 assignment:   0x1C12 选择前 N 个 RxPDO chunk
SM3 assignment:   0x1C13 选择前 N 个 TxPDO chunk

chunk 是 EtherCAT 映射和长度选择单位,不是协议解析层。基础区域由完整 128B chunk 组成;有 16B 微调时,再追加一个尾 mapping,并只启用该 mapping 的前 fine 个 16B entry。FramePacketStream 可以跨边界,接收端只按固定头部中的 payload_len 解析有效帧区。

!!! danger "PDO assignment 与长度必须一致" 0x1C12/0x1C13 的有效 mapping 字节数必须等于对应方向的 ActivePDOBytes。两者不一致时设备会拒绝 profile,主站也可能无法进入 OP。禁止在 OP 状态在线改变 PDO 长度。

4.1.1 多个 chunk 在主站侧如何拼接

主站侧不要把 0x1600..0x1617 / 0x1A00..0x1A17 当成多段独立协议解析。它们只是为了适配 EtherCAT PDO mapping 限制而拆出的 128B 映射块。应用层应把同一方向的前 N 个 chunk 按 assignment 顺序拼成一个连续 byte buffer:

text
RxPDO/SM2 output buffer:
  chunk0[128B] + chunk1[128B] + ... + chunkN-1[128B]
  其中 ... 表示省略中间连续 chunk,顺序和大小均按 128B 递推

TxPDO/SM3 input buffer:
  chunk0[128B] + chunk1[128B] + ... + chunkN-1[128B]
  其中 ... 表示省略中间连续 chunk,顺序和大小均按 128B 递推

每个 128B chunk 又由 8 个 STRING(16) 映射单元组成。主站如果把它们暴露成多个变量,应用需要按以下顺序复制:

text
for chunk = 0 .. N-1:
  for unit = 0 .. 7:
    dst_offset = chunk * 128 + unit * 16
    copy 16 bytes to/from process image entry

下面表格完整展开 chunk=0 的 8 个映射单元,并用省略行表示后续 chunk 按相同规律递推。完整关系以随后公式为准。

方向 数据流 主站访问 chunk unit PDO map 数据对象 连续 buffer offset
RxPDO / SM2 Output M2S Write 0 0 0x1600 0x7000 0
RxPDO / SM2 Output M2S Write 0 1 0x1600 0x7010 16
RxPDO / SM2 Output M2S Write 0 2 0x1600 0x7020 32
RxPDO / SM2 Output M2S Write 0 3 0x1600 0x7030 48
RxPDO / SM2 Output M2S Write 0 4 0x1600 0x7040 64
RxPDO / SM2 Output M2S Write 0 5 0x1600 0x7050 80
RxPDO / SM2 Output M2S Write 0 6 0x1600 0x7060 96
RxPDO / SM2 Output M2S Write 0 7 0x1600 0x7070 112
RxPDO / SM2 Output M2S Write 省略 省略 省略 省略 省略:后续 chunk 按相同规律递推
RxPDO / SM2 Output M2S Write 1 0 0x1601 0x7080 128
TxPDO / SM3 Input S2M Read 0 0 0x1A00 0x6000 0
TxPDO / SM3 Input S2M Read 0 1 0x1A00 0x6010 16
TxPDO / SM3 Input S2M Read 0 2 0x1A00 0x6020 32
TxPDO / SM3 Input S2M Read 0 3 0x1A00 0x6030 48
TxPDO / SM3 Input S2M Read 0 4 0x1A00 0x6040 64
TxPDO / SM3 Input S2M Read 0 5 0x1A00 0x6050 80
TxPDO / SM3 Input S2M Read 0 6 0x1A00 0x6060 96
TxPDO / SM3 Input S2M Read 0 7 0x1A00 0x6070 112
TxPDO / SM3 Input S2M Read 省略 省略 省略 省略 省略:后续 chunk 按相同规律递推
TxPDO / SM3 Input S2M Read 1 0 0x1A01 0x6080 128

完整映射规律:

方向 数据流 主站访问 chunk c unit u PDO map PDO map subindex 数据对象 连续 buffer offset
RxPDO / SM2 Output M2S Write 0..N-1 0..7 0x1600 + c u + 1 0x7000 + c * 0x80 + u * 0x10 c * 128 + u * 16
TxPDO / SM3 Input S2M Read 0..N-1 0..7 0x1A00 + c u + 1 0x6000 + c * 0x80 + u * 0x10 c * 128 + u * 16

通用公式:

text
unit_index = chunk * 8 + unit
offset     = unit_index * 16

RxPDO 数据对象 index = 0x7000 + unit_index * 0x10
TxPDO 数据对象 index = 0x6000 + unit_index * 0x10

因此 chunk=1 时并不只有 unit=0。例如 RxPDO 0x1601 实际包含 0x7080, 0x7090, ..., 0x70F0 八个 16B 单元,其中 ... 表示省略中间按 0x10 递增的对象;TxPDO 0x1A01 实际包含 0x6080, 0x6090, ..., 0x60F0 八个 16B 单元,其中 ... 同样表示省略中间按 0x10 递增的对象。

例如 N=3 时,每个方向的连续 buffer 为 384B:

text
chunk0: offset   0..127
chunk1: offset 128..255
chunk2: offset 256..383

固定头位于连续buffer的offset0;帧区从HeaderBytes=4*(ver_ihl&0x0F)开始。默认V1在5E/6E分别为24B/32B;显式启用V2后分别为16B/20B。

在 TwinCAT、CODESYS 或自研主站中,如果工具支持将 PDO 映射直接映射为连续 Byte Array,推荐直接建立 ARRAY[0..ActivePDOBytes-1] OF BYTE。如果工具只能把每个 STRING(16) 暴露为单独变量,则按上面的 offset 公式在应用层拼接和拆分。

4.2 PDO总长度与头部开销的关系

PDO总长度和固定头版本是两个独立配置维度,但二者共同决定可用于CAN帧的空间:

text
SIZE(0x8010/0x8011:03) ──> ActivePDOBytes(PDO总长度)
VERSION(0x8010/0x8011:07 bit5) ──> HeaderBytes(头部长度)

ActivePDOBytes - HeaderBytes ──> ActiveFrameAreaBytes(可用帧区)

ASSIGN(0x1C12/0x1C13) == ActivePDOBytes
IHL(ver_ihl.IHL) ──> 运行期实际 HeaderBytes

!!! important "长度与头部版本是两个配置维度" 切换头部版本不改变 SM2/SM3 长度,也不要求重建 PDO assignment;它只改变帧区起点和可用字节数。改变 PDO 总长度不切换头部版本,但主站必须同步修改 EtherCAT mapping。

4.2.1 大小字段:兼容5+3编码

text
base = PdoSizeEncoding & 0x1F
fine = PdoSizeEncoding >> 5
ActivePDOBytes = 128 * base + 16 * fine
ECAN-Lite: base=1..10, fine=0..7

设备对象0x8010/0x8011:03的请求值出厂默认均为0x02,即256B。低5bit选择完整128B基础块;高3bit在能力允许时追加0..7个16B尾单元。旧主站写1..10时高位始终为0,仍保持原来的128B步进。

仅当0xF000:16 bit7 FINE_SIZE_16=1时才使用fine。fine>0时,0x1C12/0x1C13除前base个完整chunk外还要追加尾mapping,并只启用其前fine个16B entry。该能力位只是只读声明,不是配置开关。

4.2.2 同一PDO总长度下的实际帧区

下表把“总长度”和“协议开销”分开列出。帧区数值均按ActivePDOBytes-HeaderBytes计算:

大小编码 Active PDO 5E V1默认:头/帧区 5E V2显式:头/帧区 6E V1默认:头/帧区 6E V2显式:头/帧区
0x01 128B 24B / 104B 16B / 112B 32B / 96B 20B / 108B
0x21 144B 24B / 120B 16B / 128B 32B / 112B 20B / 124B
0x02 256B 24B / 232B 16B / 240B 32B / 224B 20B / 236B
0x22 272B 24B / 248B 16B / 256B 32B / 240B 20B / 252B
0x03 384B 24B / 360B 16B / 368B 32B / 352B 20B / 364B
0x08 1024B 24B / 1000B 16B / 1008B 32B / 992B 20B / 1004B
0xEA 1392B 24B / 1368B 16B / 1376B 32B / 1360B 20B / 1372B

V2节省的空间来自固定头压缩:5E每个PDO image增加8B帧区,6E增加12B帧区。这个增量不改变EtherCAT线上的PDO总字节数。V2减少的字段和状态精度见第5章;不能只为了增加几字节容量而切换版本,必须同时确认主站codec支持。

4.2.3 配置变化对主站的影响

目标变化 :03大小字段 :07OptionFlags 0x1C12/0x1C13与SM长度 主站PDO解析器
保持默认256B V1、CRC关闭 0x02 0x04 前2个128B chunk 5E从24B、6E从32B开始解析帧区
只改变PDO总长度 改为目标5+3编码 保持0x04 必须重建为目标ActivePDOBytes 头部布局不变,容量和尾mapping改变
同长度由V1切换V2 保持不变 0x04 -> 0x24 保持不变 必须按ver_ihl改用V2字段和新帧区offset
同长度由V2退回V1 保持不变 0x24 -> 0x04 保持不变 恢复V1字段和头长;旧IgH兼容路径使用此配置
同时改变大小和版本 写目标编码 显式写0x24 必须重建mapping 同时更新buffer长度、IHL、字段布局和容量检查
只开启payload CRC 保持不变 V1写0x00;V2写0x20 保持不变 头长不变;开始计算和校验CRC16

4.2.4 能力确认与active回读

配置前后应检查以下对象,不能只相信requested SDO写入成功:

查找键 用途 判断
0xF000:05/06 固件主/次版本 V2和16B细分只在匹配的2.x固件上启用
0xF000:09 PDO header version mask 必须声明支持目标头版本
0xF000:16 bit7 FINE_SIZE_16 允许大小字段高3bit作为16B微调
0xF000:16 bit13 HEADER_V2 允许显式设置OptionFlags.bit5
0x8010/0x8011:09 Active PDO bytes 必须等于主站实际映射的总字节数
0x8010/0x8011:10 Active frame area bytes 必须等于ActivePDOBytes减实际HeaderBytes
0x8010/0x8011:11 Active layout CRC 主从两侧layout合约应一致
0x8010/0x8011:12 Active profile word 回读base、fine、OptionFlags等最终生效组合

推荐配置顺序:

  1. 读取能力对象;
  2. 选择总长度并建立 mapping;
  3. 选择头部版本并 apply;
  4. 回读 :02:09..12
  5. 进入 OP 后仍按每个 image 的 ver_ihl 计算 HeaderBytes。

!!! caution "容量不等于实时性能" 大 PDO 只增加过程映像空间,也增加 EtherCAT 帧长度和 PDI 搬运量。必须在目标周期、从站数量和 CAN 负载下验证 WKC、周期抖动与丢帧计数。

4.3 ESI 与 PDO 映射要求

请使用随产品发布的 ESI 文件创建从站配置,不要自行修改设备 SII/EEPROM。 主站实际使用的 PDO 长度由 0x1C12/0x1C13 assignment 选择连续的基础 chunk 和可选尾 mapping 决定,并必须与 0x8010/0x8011 的 active profile 保持一致。若 ESI、设备 固件或主站配置版本不匹配,请恢复为对应发布包并联系技术支持。


5. PDO 固定头部

TxPDO和RxPDO使用相同版本规则。ver_ihl高4bit为版本、低4bit为4B word数。OptionFlags.bit5=HEADER_V2选择V2;清零选择V1。出厂、复位和新版IgH默认OptionFlags=0x04,即V1并关闭payload CRC16;V2必须由主站显式置bit5。

产品 CAN通道 V1(默认) V2(显式启用)
HPM5E 4 24B,0x16 16B,0x24
HPM6E 8 32B,0x18 20B,0x25

5.1 版本选择、字节布局与兼容边界

ver_ihl是运行期数据面的最终依据:高4bit是头部版本,低4bit是头部4B word数。OptionFlags用于请求版本,ver_ihl用于确认当前PDO image实际采用的版本和长度。固件版本为2.x只表示具备V2能力,不表示默认发送V2。

text
共同的前12B
offset  0       1       2..3      4..5      6..7        8..9       10..11
       +-------+-------+----------+----------+------------+-----------+----------+
       |ver_ihl| flags |seq_begin | seq_end  |payload_len |payload_crc| layout_id|
       +-------+-------+----------+----------+------------+-----------+----------+

HPM5E / 4通道
V1  +12: channel_mask/frame_count/overflow_sat/crc_alg +16: status[4]×2B -> payload@24
V2  +12: status[4]×1B                                           -> payload@16

HPM6E / 8通道
V1  +12: channel_mask/frame_count/overflow_sat/crc_alg +16: status[8]×2B -> payload@32
V2  +12: status[8]×1B                                           -> payload@20
比较项 V1(默认兼容) V2(显式启用) 主站迁移要求
选择方式 OptionFlags.bit5=0 OptionFlags.bit5=1 先确认0xF000:090xF000:16 bit13
无payload CRC常用值 0x04 0x24 其他option位必须read-modify-write保留
开启payload CRC常用值 0x00 0x20 CRC开关不改变该版本的HeaderBytes
公共字段 offset0..11 offset0..11 双序号、长度、CRC字段和layout ID相同
通道状态 每路16bit 每路8bit V2不再提供V1状态字的全部位
头内诊断字段 channel_mask/frame_count/overflow_sat/crc_alg 不携带 V2从Active Profile、帧流遍历、header flag和SDO诊断推导
5E HeaderBytes 24B 16B 同PDO总长度下V2帧区增加8B
6E HeaderBytes 32B 20B 同PDO总长度下V2帧区增加12B
EtherCAT PDO mapping 由ActivePDOBytes决定 由ActivePDOBytes决定 仅切换版本时mapping和SM长度不变
帧区起点 4*(ver_ihl&0x0F) 4*(ver_ihl&0x0F) 禁止把24/32或16/20写死为唯一值

!!! danger "禁止按固件版本或 PDO 大小猜测头部" 固件 2.x 只表示具备 V2 能力,不表示当前 image 使用 V2。:03确定总长度,:07 bit5请求版本,active readback确认配置;每个 image 的实际版本和头长必须由 ver_ihl 判断。

固定头部不是 SDO 对象,没有 RO/RW 属性;它的主站访问方向跟随 PDO 方向:RxPDO 头部由主站写入并由从站解析,TxPDO 头部由从站写入并由主站解析。

Offset Size 字段 说明
0 1 ver_ihl 版本与头部4B word数
1 1 header_flags 溢出、错误、状态变化、序号回绕;bit2保留
2 2 seq_begin 发布起始序号
4 2 seq_end 发布完成序号,必须等于 seq_begin 才有效
6 2 payload_len 本周期帧封装区有效字节数
8 2 payload_crc16 帧封装区 CRC-16/CCITT-FALSE
10 2 layout_id 当前 PDO 布局标识,布局或 profile 改变时变化
12.. 变化 版本相关 V1:4个公共诊断字节+每通道2B状态;V2:直接每通道1B状态

V1在offset12携带channel_mask/frame_count/overflow_sat/crc_alg,通道状态从offset16开始。V2删除这4个字段:通道掩码和CRC模式从Active Profile推导,帧数遍历帧流得到,溢出使用header_flags.bit5表示;通道状态从offset12开始,每路1B。HPM5E/HPM6E分别占16B/20B。

发布规则:发送端先构建完整帧区和头字段,最后写seq_end=seq_begin。默认V1+NO_CRC16要求payload_crc16=0;清除NO_CRC16后仍使用CRC-16/CCITT-FALSE。CRC关闭不会取消双序号、长度和layout检查。

5.2 关键字段解释与接收判断

seq_beginseq_endlayout_id是两版共有字段。V1的crc_alg/overflow_sat在V2中分别由Active Profile和header_flags.bit5替代。

字段 发送端如何填写 接收端如何判断
seq_begin 每发布一次 PDO image 递增一次,16bit 回绕 seq_end 不相等时,说明正在更新或读到半包,本周期数据应丢弃
seq_end 所有 payload、CRC 和头部字段写完后,最后写成与 seq_begin 相同的值 只有 seq_begin == seq_end 才允许继续校验 CRC 和解析 payload
layout_id 根据 active PDO profile 生成的 16bit 布局短标识 连续运行中如果突然变化,说明 PDO 大小、通道掩码、profile 或 option flags 已变化,需要重新按 active profile 解析
CRC模式 默认NO_CRC16,因此payload_crc16=0;清除bit2后计算CCITT-FALSE V1检查crc_alg;V2从Active Profile推导
overflow_sat 本周期帧区不足、背压或截断时增加,最大饱和到 255 overflow_sat != 0STREAM_TRUNCATED=1 表示本周期数据不完整,应结合 SDO 计数器排查

说明:

  • layout_id 是 PDO 头部中的短标识,便于主站快速判断“当前 PDO 布局是否变过”。完整配置回显应读取 0x8010/0x8011:12 Active profile word:11 Active layout CRC
  • 文档或调试口径中如果出现 overflow_set,对应的是本头部字段 overflow_sat:它不是一个开关,而是“本周期发生溢出/截断后的饱和计数”。
  • payload_crc16的计算范围从header_bytes=ihl*4开始,即[header_bytes, header_bytes+payload_len)
  • payload_len 是本周期实际有效帧封装字节数,不是 PDO 总长度。

!!! caution "未使用区和对齐填充必须清零" 未使用帧区必须填 0。启用 ALIGN_4_ENABLE 时,padding 字节也必须写 0,并计入 payload_len;接收端必须按对齐后的包长前进。

接收端推荐判断顺序:

text
1. 读取固定头部 A。
2. 检查 seq_begin == seq_end;不相等则忽略本周期 PDO。
3. 根据Active Profile判断CRC;默认NO_CRC16检查`payload_crc16==0`。
4. 检查 payload_len <= ActiveFrameAreaBytes。
5. CRC开启时对offset `ihl*4`开始的payload_len字节计算CRC-16/CCITT-FALSE。
6. 再读取固定头部 B;若 A 与 B 关键字段不一致,说明读期间 PDO 被更新,忽略本周期。
7. 解析 CAN_FRAME;其他 KIND 必须拒绝。
8. V1检查`overflow_sat`,V2检查`OVERFLOW_OCCURRED`;任一版本出现`STREAM_TRUNCATED`均标记不完整。

配置示例:主站希望TxPDO/RxPDO都使用默认N=2、CAN0..CAN3、profile 0、Balanced、V2头且关闭payload CRC时:

text
0x1C12 / 0x1C13: 选择前 2 个 128B chunk
0x8010:03 = 2     TxPDO PDO size multiplier
0x8010:04 = 0x0F  TxPDO channel mask
0x8010:05 = 0     TxPDO profile 0
0x8010:06 = 0     TxPDO Balanced budget
0x8010:07 = 0x24  TxPDO option flags:HEADER_V2 + NO_CRC16
0x8010:01 = 1     apply TxPDO profile

0x8011:03 = 2     RxPDO PDO size multiplier
0x8011:04 = 0x0F  RxPDO channel mask
0x8011:05 = 0     RxPDO profile 0
0x8011:06 = 0     RxPDO Balanced budget
0x8011:07 = 0x24  RxPDO option flags:HEADER_V2 + NO_CRC16
0x8011:01 = 1     apply RxPDO profile

apply 后读取 0x8010/0x8011:09..12。如果 Active PDO bytesActive frame area bytesActive layout CRCActive profile word 与预期一致,后续 PDO 头部中的 layout_id 应保持稳定。

header_flags

Bit 名称 说明
0 STREAM_TRUNCATED 本周期帧区不足,有帧未打包
1 ANY_CHANNEL_ERROR 任一通道处于错误、BusOff 或拥塞
2 reserved 保留,必须为0
3 STATUS_CHANGED 通道状态相比上一周期变化
4 SEQ_WRAP seq_begin 本周期回绕
5 OVERFLOW_SAT_VALID overflow_sat 有效
6 reserved 发送端写 0,接收端忽略
7 reserved 发送端写 0,接收端忽略

6. 通道状态字

每路通道状态压缩为 16bit,固定放在 PDO 头部。PDO 只承载快速状态,详细原因通过 SDO 读取。

Bits 字段 说明
0..2 state 0=disabled,1=init,2=run,3=busoff,4=error,5=listen
3 fd_enabled 当前通道启用 CAN FD
4 warn error warning / error passive / bus degraded 汇总
5 bus_off BusOff
6 rx_pressure RX FIFO 接近满或溢出
7 tx_pressure TX FIFO/Queue 拥塞
8 detail_pending SDO 中有新的详细快照
9 counter_sat pending 计数已饱和
10..12 rx_pending_sat RX pending 0..7 饱和
13..15 tx_pending_sat TX pending 0..7 饱和

warn/bus_off/rx_pressure/tx_pressure/detail_pending 置位时,主站应读取 0x9000..0x9003 获取详细寄存器和计数快照。若错误来自 PDO 封装层,应读取 0x8010/0x8011LastPDOError / PDOErrorCounter / PDOOverflowCounter


7. 帧封装包

每个帧封装包从 2B 控制字开始,控制字决定后续 CAN ID、时间戳和 data 的长度。

帧封装包跟随 PDO 方向:RxPDO 中的 CAN_FRAME 是主站请求从站发送到 CAN 总线;TxPDO 中的 CAN_FRAME 是从站从 CAN 总线收到后上传给主站。

除特别说明外,PDO 固定头部、CAN_FRAME 和 SDO 中的多字节数值均使用 little-endian。主站侧不要按主机字节序直接强转未对齐结构体,建议按字节流显式读取。

text
Byte0:
  bit0..2  CH       CAN channel id,当前使用 0..3
  bit3..6  DLC      原始 CAN DLC,0..15
  bit7     IDE      0=11bit standard id,1=29bit extended id

Byte1:
  bit0     FDF      0=classic CAN,1=CAN FD
  bit1     BRS      CAN FD bit rate switch
  bit2     X        FDF=0 时为 RTR,FDF=1 时为 ESI
  bit3..4  TSF      0=no timestamp,1=delta16,2=delta32,3=full64
  bit5..6  KIND     0=CAN_FRAME,1..3=reserved
  bit7     D64      0=data length by DLC,1=fixed 64B data window

当前固件只支持 KIND=0 CAN_FRAMEKIND=1..3 均为保留值,主站不得生成,收到时必须视为非法。

7.1 CAN_FRAME 格式

text
Standard ID:
  Ctrl[2] + StdIdField[2] + Timestamp[0/2/4/8] + Data[0..64] + Padding

Extended ID:
  Ctrl[2] + ExtIdField[4] + Timestamp[0/2/4/8] + Data[0..64] + Padding

StdIdField

Bits 说明
0..10 11bit STD_ID
11..13 ID_AUX
14 reserved,必须为 0
15 reserved,必须为 0

ExtIdField

Bits 说明
0..28 29bit EXT_ID
29..31 ID_AUX

ID_AUX 建议语义:

方向 建议
TxPDO / CAN RX 0=FIFO0,1=FIFO1,2=RXBUF,3=HPMS/high priority
RxPDO / CAN TX 0=normal,1=high priority,2=dedicated buffer,3=queue hint

未使用时发送端必须写 0,接收端忽略。

7.2 DLC 与数据长度

DLC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Bytes 0 1 2 3 4 5 6 7 8 12 16 20 24 32 48 64

classic CAN 中 DLC<=8BRS=0D64=0。若 FDF=0 && X=1,该帧为 RTR,data length 必须为 0。CAN FD 中 X 表示 ESI,不存在 RTR。

7.3 包长度计算

text
id_bytes = IDE ? 4 : 2
ts_bytes = TSF == 0 ? 0 : (TSF == 1 ? 2 : (TSF == 2 ? 4 : 8))
data_bytes = (FDF == 0 && X == 1) ? 0 :
             (D64 ? 64 : can_dlc_to_len(DLC))
raw_packet_bytes = 2 + id_bytes + ts_bytes + data_bytes
packet_bytes = ALIGN_4_ENABLE ? align4(raw_packet_bytes) : raw_packet_bytes

!!! caution "完整包边界是容量判断单位" 未使用帧区必须填 0。若开启 4 字节对齐,padding 字节必须为 0 并计入 payload_len。剩余空间不足以容纳完整包时,不得写入半包。

7.3.1 开启 4 字节对齐

4 字节对齐由方向选项 ALIGN_4_ENABLE 控制,不是 0xF000 只读能力对象直接开启。0xF000:15 (0x0F) 用于确认设备是否声明支持该能力;真正的开关在 0x8010/0x8011:07 (0x07) Option flags bit1。

方向 控制对象 bit1 含义
TxPDO / SM3 Input / 从站上传 0x8010:07 (0x07) 从站上传的每个帧包按 4 字节补齐,主站解析时按对齐后长度跳到下一包
RxPDO / SM2 Output / 主站下发 0x8011:07 (0x07) 主站下发的每个帧包必须按 4 字节补齐,从站按对齐后长度解析下一包

开启步骤:

text
1. 读取 0xF000:15,确认 bit1 ALIGN4 option mask 为 1。
   也可读取 0xF000:16,确认 bit5 ALIGN4 feature 为 1。
2. 在 PREOP/SAFEOP 中写入 0x8010/0x8011 requested profile。
3. 将目标方向的 0x8010:07 或 0x8011:07 bit1 置 1。
4. 写 0x8010:01 = 1 或 0x8011:01 = 1 apply。
5. 读取 0x8010/0x8011:02,确认 Status = 0。
6. 读取 0x8010/0x8011:12,确认 Active profile word 中 OptionFlags 的 bit1 已生效。

示例:保持其他方向选项不变,只打开 RxPDO 4 字节对齐:

text
old = read_u8(0x8011:07)
write_u8(0x8011:07, old | 0x02)
write_u8(0x8011:01, 1)
check read_u8(0x8011:02) == 0

示例:关闭 TxPDO 4 字节对齐:

text
old = read_u8(0x8010:07)
write_u8(0x8010:07, old & ~0x02)
write_u8(0x8010:01, 1)
check read_u8(0x8010:02) == 0

开启后,发送端必须把每个帧包补齐到 4 字节边界,padding 字节必须写 0,并且 padding 字节计入固定头部 payload_len。接收端解析下一包时也必须使用对齐后的 packet_bytes,不能只按原始 CAN 数据长度前进。

长度示例:

CAN_FRAME raw_packet_bytes ALIGN4 后 packet_bytes payload_len 计入
标准帧、DLC=8、无时间戳 2 + 2 + 8 = 12 12 12
扩展帧、DLC=8、无时间戳 2 + 4 + 8 = 14 16 16,末尾 2B padding 必须为 0
标准 CAN FD、DLC=15、无时间戳 2 + 2 + 64 = 68 68 68
扩展 CAN FD、DLC=15、delta16 2 + 4 + 2 + 64 = 72 72 72

7.4 时间戳字段

TSF 决定 CAN_FRAME 中是否携带时间戳字段。普通 TxPDO 上传方向中,时间戳用于描述从站接收 CAN 帧的时间;RxPDO 下发方向中,TSF_NONE 表示立即发送,TSF_FULL64 可被预约发送格式复用。

TSF 字节数 普通语义 说明
0 0 无时间戳 默认模式,开销最低
1 2 delta16 相对同一 PDO 周期内参考时间的低 16 bit 差值,适合短周期压缩时间戳
2 4 delta32 相对参考时间的低 32 bit 差值;能力位存在但当前默认 profile 不主动启用
3 8 full64 64 bit 完整时间戳,或 RxPDO 预约发送扩展格式

TxPDO 中同一 Packet sequence 内的 delta16/delta32 以该周期首个可用时间基准为参考。主站用于排序和诊断时应按无符号差值处理 wrap。若主站不需要时间戳,建议使用 profile 0/4,减少每帧开销。

RxPDO 预约发送只使用 TSF_FULL64 的 8B 字段,并要求格式如下:

text
format:u8 = 1
flags:u8 = 0
tag:u16
offset_ns:u32

offset_ns 表示相对下一次 SYNC0 周期起点的目标相位。该格式不是绝对时间戳;如果目标相位已经错过,固件不会把帧延迟到下一个周期补发,主站应预留足够相位余量。


8. 封装 Profile 与方向选项

0x8010 控制 TxPDO profile,0x8011 控制 RxPDO profile。当前出厂支持以下 profile:

Profile 默认状态 说明
0 默认开启 compact inline,variable DLC,无时间戳
1 默认关闭,需配置 compact inline,variable DLC,允许 delta16 时间戳
4 默认关闭,需配置 compact inline,允许 D64,无时间戳
5 默认关闭,需配置 compact inline,允许 D64,允许 delta16 时间戳

方向选项由 0x8010/0x8011:07 Option flags 控制。0x8010 作用于 TxPDO/SM3/Input 上传方向,0x8011 作用于 RxPDO/SM2/Output 下发方向。

8.1 Option flags bit 表

Option flags 是 8 bit 位图。写 requested value 不代表配置已经生效。

!!! caution "必须 apply 并回读" 写入选项后必须执行 0x8010:01=10x8011:01=1。只有 :02=0:12 Active profile word 与预期一致,才能使用新布局。保留位必须保持 0,修改单一选项时应 read-modify-write。

Bit 掩码值 名称 适用方向 默认状态 说明
0 0x01 reserved 保留 关闭 必须写0;写1会被拒绝
1 0x02 ALIGN_4_ENABLE TxPDO / RxPDO 关闭 每个 CAN_FRAME 包按 4 字节边界补齐;padding 必须为 0 并计入 payload_len
2 0x04 NO_CRC16_ENABLE TxPDO / RxPDO 开启 默认关闭payload CRC16;清零恢复CCITT-FALSE
3 0x08 APP_BYPASS_ENABLE TxPDO / RxPDO 关闭 旁路真实 MCAN 应用链路,只用于数据路径诊断;电机控制和网关业务不得启用
4 0x10 PAYLOAD_ONLY_ENABLE TxPDO / RxPDO 关闭 稳定 layout 下只更新有效 payload;主站 codec 必须支持忽略 payload_len 之外的数据
5 0x20 HEADER_V2_ENABLE TxPDO / RxPDO 关闭 使用V2紧凑固定头;清零回退V1
6..7 0xC0 reserved 保留 关闭 主站必须写0

常用写入值:

写入值 作用 典型场景
0x00 V1兼容头+CRC16 旧IgH兼容配置
0x02 开启 4 字节对齐 0x8010:07 (0x07) 或 0x8011:07 (0x07),客户主站希望帧包天然 32bit 对齐
0x04 V1头并关闭 CRC16 出厂、复位和新版IgH兼容默认
0x08 旁路真实 MCAN 应用链路 仅用于数据路径诊断,不用于正常网关通信
0x10 仅更新有效 payload 主站与固件都使用当前 codec,且 layout 稳定时使用
0x20 V2头+CRC16 需要CRC保护的V2配置
0x24 V2头+NO_CRC16 仅在确认能力后显式启用

能力判断:

能力对象 判断方式 说明
0xF000:15 PDO option flags mask 检查对应 bit 是否为 1 表示该 option flag 可以被写入 0x8010/0x8011:07
0xF000:16 PDO feature flags 检查对应 feature bit 表示设备协议能力,例如 ALIGN4、预约发送等

当前能力掩码以 0xF000 为准。主站应先读取能力对象,再选择 profile 和 option flags。

!!! important "CRC 默认策略" V1 与 V2 默认都关闭 payload CRC16。关闭时 TxPDO 的 payload_crc16 必须为 0,固件对主站 RxPDO 中的该字段直接跳过;需要 CRC 保护时,主站必须主动清除 NO_CRC16_ENABLE

8.2 不配置时的默认开关状态

如果主站不写 0x8010/0x8011 的 profile 相关 SDO,设备对象字典中的 requested 默认值如下。注意:0xF000 表示“支持能力”,不表示默认启用;真正启用状态由 0x8010/0x8011 的 requested profile 和 apply 后的 active readback 决定。

功能 控制对象 默认值 不配置时状态 备注
PDO size multiplier 0x8010/0x8011:03 2 默认请求 256B/方向 主站 mapping 也必须选择前 2 个 chunk,否则 apply 会返回 mapping reload required
Channel mask 0x8010/0x8011:04 0x0F CAN0..CAN3 默认请求启用 关闭通道需显式改 mask 并 apply
Encapsulation profile 0x8010/0x8011:05 0 profile 0 开启 variable DLC,无时间戳
Budget policy 0x8010/0x8011:06 0 Balanced 开启 每启用通道保留最小预算,剩余空间共享
保留位 0x8010/0x8011:07 bit0 0 禁用 必须保持0,写1会被拒绝
4 字节对齐 0x8010/0x8011:07 bit1 0 关闭 支持但默认不补齐,打开后 padding 计入 payload_len
关闭 CRC16 0x8010/0x8011:07 bit2 1 开启 默认payload_crc16=0;清零后启用CCITT-FALSE
PDO header V2 0x8010/0x8011:07 bit5 0 关闭 5E 16B、6E 20B;清零使用V1
应用链路旁路 0x8010/0x8011:07 bit3 0 关闭 仅用于数据路径诊断,正常网关业务保持关闭
仅更新有效 payload 0x8010/0x8011:07 bit4 0 关闭 需要主站 codec 同步支持 payload_len 边界
delta16 时间戳 0x8010/0x8011:05=1/5 0 关闭 选择 profile 1 或 5 后才启用
D64 data window 0x8010/0x8011:05=4/5 0 关闭 选择 profile 4 或 5 后才启用
RxPDO 预约发送 RxPDO CAN_FRAME TSF_FULL64 format=1 无普通默认帧 关闭 主站必须主动按预约格式下发帧,且建议先确认 0xF000:16 bit8
CAN FD 0x8001..0x8004:15 1 开启 每路 MCAN 默认按 CAN FD 配置;classic CAN 需写 0 并 apply
TDC 0x8001..0x8004:16 1 开启 数据段 5M 及以上即使写 0 也会强制开启

推荐主站不要依赖“隐式默认已经生效”的假设。启动时应显式配置 0x1C12/0x1C13、写入 0x8010/0x8011:03..07,再写 0x8010/0x8011:01=1 apply,并读取 :09..12 确认 active 状态。


9. 保留协议值

OptionFlags.bit0header_flags.bit2KIND=1..3 当前均为保留值,必须写0。固件不会生成逐帧发送结果包;主站应通过CAN对端响应确认业务闭环,并通过PDO通道状态和SDO诊断对象观察FIFO、Bus Off和拥塞。


10. CRC 与完整性策略

默认不为每个 CAN_FRAME 添加 CRC32。

原因:

  • CAN/CAN FD 总线本身已有 CAN CRC。
  • EtherCAT 帧已有链路 FCS 和 working counter。
  • per-frame CRC32 会增加 4B/帧,classic 8B 标准帧开销从 12B 增加到 16B,约 33%。
  • 逐帧 CRC32 会增加 1ms 周期中的小包计算抖动。

默认使用ActiveLayoutCrc校验PDO layout合约,并使用双序号与长度检查运行期映像;默认V1关闭payload_crc16以缩短热路径。需要额外检测payload内存破坏时,清除OptionFlags.bit2即可恢复CRC-16/CCITT-FALSE;CRC开关不会改变已经选定的头部版本或长度。


11. 多通道共享预算

PDO 不再给每路 CAN 固定槽位。调度器按帧区字节预算工作:

text
frame_area = ActivePDOBytes - HeaderBytes
reserved_bytes = enabled_channel_count * policy_reserved_bytes
shared_bytes = frame_area - reserved_bytes

预算策略:

名称 说明
0 Balanced 每启用通道保留最小包预算,剩余空间共享竞争;默认
1 SharedOnly 不做通道保留,所有帧共享竞争
2 Deterministic 按启用通道平均分配预算,通道间不借用
3 Reserved 保留

一条 CAN_FRAME 必须整体放入本周期帧区,不允许跨周期拆分。如果空间不足,设备设置 STREAM_TRUNCATED,增加 overflow_sat 和 SDO PDOOverflowCounter


12. SDO 对象字典

前面的章节描述周期 PDO 数据,也就是 OP 运行后每个 EtherCAT 周期会交换的字节。SDO 对象字典是配置和诊断入口:进入 OP 前用它设置 PDO profile 和 MCAN 参数,运行中用它读取能力、错误计数和详细状态。读者如果只需要查对象,可以直接从本章按对象号定位;如果正在做 bring-up,建议先看 13.1、13.2、13.4、13.8。

本章只列出面向客户集成的公开对象。未列出的对象属于制造商保留接口,不构成兼容性承诺,也不应由客户程序读写。表中 U8/U16/U32 分别表示无符号 8/16/32 bit。

12.1 按索引快速查找

PDF阅读器建议优先使用左侧“书签/章节目录”。已知对象地址时,使用完整十六进制字符串搜索,例如0x8010:070xF000:16;只知道功能时,可搜索下表中的中文或英文关键词。表内范围同时列出各成员地址,确保搜索0x80020x9023也能直接命中。

精确索引或范围成员 对象/关键词 方向与用途 详细章节
0x1C12 RxPDO assignment,SM2,Output mapping 主站选择RxPDO连续chunk和可选16B尾mapping 4.1、4.3
0x1C13 TxPDO assignment,SM3,Input mapping 主站选择TxPDO连续chunk和可选16B尾mapping 4.1、4.3
0x1600..0x1617 RxPDO map,M2S 每个对象映射一个128B chunk 4.1
0x1A00..0x1A17 TxPDO map,S2M 每个对象映射一个128B chunk 4.1
0x6000.. TxPDO data,Input process image 从站上传给主站的16B数据单元 4.1
0x7000.. RxPDO data,Output process image 主站下发给从站的16B数据单元 4.1
0x8000 System Config,reboot,pin rotation 系统配置、重启和CAN引脚轮换 12.3
0x8001, 0x8002, 0x8003, 0x8004 MCAN Channel Config,bit timing,FIFO CAN0..CAN3位时序、模式、过滤器和Message RAM 12.4
0x8010 TxPDO Profile Control,S2M TxPDO大小、通道、profile、option和active回读 12.2
0x8011 RxPDO Profile Control,M2S RxPDO大小、通道、profile、option和active回读 12.2
0x8021, 0x8022, 0x8023, 0x8024 MCAN Data Path Control,budget 每通道收发服务预算和数据路径apply 12.2.1
0x9000, 0x9001, 0x9002, 0x9003 MCAN Channel Information,ECR,PSR 每通道详细状态、错误计数和寄存器快照 12.5
0x9011 Cycle Performance Diagnostics,PDI timing PDI、Sync0、mapping和热路径最坏耗时 12.2.4
0x9020, 0x9021, 0x9022, 0x9023 MCAN Data Path Diagnostics,drop,cache 每通道缓存、丢帧、背压、BusOff和服务耗时 12.2.5
0xF000 Device Objects,capability,version 固件版本、PDO上限、头版本和feature能力 12.7

常用子索引入口:

搜索键 名称 典型用途
0x8010:03, 0x8011:03 PDO size encoding 配置128B*base+16B*fine总长度
0x8010:07, 0x8011:07 Option flags 选择V1/V2、CRC、ALIGN4等;bit0保留
0x8010:02, 0x8011:02 Apply status 判断profile是否生效以及错误原因
0x8010:09..12, 0x8011:09..12 Active readback 回读PDO bytes、frame area、layout CRC和profile word
0x8001:07..24 MCAN mode and bit timing 自动/手动位时序、CAN FD、TDC和采样点
0x8001:61..73 MCAN Message RAM FIFO/Buffer数量和element size;其他通道索引同构
0xF000:05/06 Firmware version 判断固件主/次版本
0xF000:09 PDO header version mask 判断V1/V2头部能力
0xF000:16 PDO feature flags 判断16B细分、V2、预约发送等能力

12.1.1 对象总览

对象 名称 访问概览 方向/用途 说明
0x8000 System Config RW/RO CFG 系统时钟、重启、CAN pin rotation
0x8001..0x8004 MCAN Channel Config RW/RO CFG 每路 CAN/CAN FD 配置
0x8010 TxPDO Profile Control RW/RO S2M profile 从站上传方向 PDO profile
0x8011 RxPDO Profile Control RW/RO M2S profile 主站下发方向 PDO profile
0x8021..0x8024 MCAN Data Path Control RW/RO CFG 每通道收发服务预算;IgH 高级配置接口会按需写入
0x9000..0x9003 MCAN Channel Information RO S2M diagnostic 通道状态、错误计数和当前配置回读
0x9011 Cycle Performance Diagnostics RO/RW S2M diagnostic 周期中断和关键路径耗时统计
0x9020..0x9023 MCAN Data Path Diagnostics RO S2M diagnostic 每通道缓存、丢帧、背压和服务耗时统计
0xF000 Device Objects RO S2M capability 能力、版本、上限只读对象

12.2 0x8010/0x8011 PDO Profile Control

0x8010 控制 TxPDO/Input 方向,数据流为 S2M0x8011 控制 RxPDO/Output 方向,数据流为 M2SSI1/3/4/5/6/7/8 为主站写入的 requested 配置或命令,SI2/9..16 为从站返回的状态和 active readback。

SI 名称 类型 访问 默认 说明
1 Apply command U8 RW 0 写 1 应用 requested profile
2 Status U8 RO 0 apply/parser 状态
3 PDO size encoding U8 RW 0x02 低 5 bit=base、高 3 bit=fineActivePDOBytes=128*base+16*fine
4 Channel mask U8 RW 0x0F bit0..7 对应 CAN0..CAN7
5 Encapsulation profile U8 RW 0 封装 profile;默认 profile 0,无时间戳、variable DLC
6 Budget policy U8 RW 0 预算策略;默认 Balanced
7 Option flags U8 RW 0x04 默认V1头,payload CRC16关闭;V2需显式置bit5
8 Command U8 RW 0 bit0 reset session,bit1 clear errors
9 Active PDO bytes U16 RO 0 当前 PDO 字节数
10 Active frame area bytes U16 RO 0 当前帧区字节数
11 Active layout CRC U32 RO 0 layout 合约 CRC
12 Active profile word U32 RO 0 active profile 打包回显
13 Packet sequence U16 RO 0 最近方向序号
14 Last PDO error U16 RO 0 最近封装层错误
15 PDO error counter U32 RO 0 封装层错误计数
16 PDO overflow counter U32 RO 0 溢出/背压计数

Status 常用值:

说明
0 OK
1 invalid state,通常为 OP 中尝试改变布局
2 invalid PDO size multiplier
3 invalid channel mask
4 invalid encapsulation profile
5 master mapping reload required
7 PDO encapsulation error
8 PDO overflow/backpressure
9 requested profile pending apply
10 unsupported option flag

Active profile word 打包格式:

Bits 字段 说明
0..4 base - 1 128B 基础块数减 1
5..12 ChannelMask bit0..3 对应 CAN0..CAN3,当前产品只使用低 4 bit
13..18 EncapsulationProfile 见第8章 profile 表
19..20 BudgetPolicy 见第 12 章预算策略
21..28 OptionFlags 方向选项,见第8章
29..31 fine 16B 微调单元数,0..7

Command 位定义:

Bit 名称 说明
0 reset session 清理该方向运行态序号、错误状态和临时会话信息
1 clear errors 清理 LastPDOErrorPDOErrorCounterPDOOverflowCounter
2 reserved 必须为 0
3 reserved 必须为 0
4 reserved 必须为 0
5 reserved 必须为 0
6 reserved 必须为 0
7 reserved 必须为 0

Last PDO error 常用值:

名称 说明
0 OK 无错误
2 frame overrun 单帧超过当前 profile 支持的封装能力
3 packet overrun 帧包超过本周期 frame area
4 unknown kind KIND 非法或当前不支持
5 invalid DLC DLC 与 classic CAN/CAN FD 规则不匹配
6 invalid channel 通道号超过能力范围或未在 channel mask 中启用
7 invalid TSF 时间戳格式不被当前 profile 或方向支持
8 truncated payload 长度不足,帧包被截断
9 unsupported profile EncapsulationProfile 不在能力掩码中
10 duplicate sequence 收到重复 RxPDO 镜像,通常作为幂等 no-op 处理
11 unsupported option option flags 含未支持位
12 active area active PDO/frame area 与主站 mapping 不一致
13 reserved bit 控制字或固定头部保留位非 0
14 bad header 固定头部版本、长度或字段非法
15 bad CRC payload_crc16 校验失败
16 bad schedule 预约发送格式非法或能力不支持

PDO error counter 统计解析、CRC、非法字段等封装层错误;PDO overflow counter 统计本周期帧区不足、TX/RX 背压导致的溢出或丢弃。现场排查时先看 Status,再看 LastPDOError 和两个计数器是否持续增加。

12.2.1 0x8021..0x8024 MCAN Data Path Control

0x8021..0x8024 分别对应 MCAN0..MCAN3。普通应用保持固件默认值即可;只有在真实 CAN/CAN FD 负载测试表明单周期服务预算不足时,才建议显式覆盖。该对象不改变位时序、过滤器或 Message RAM 配置。

对象 通道
0x8021 MCAN0
0x8022 MCAN1
0x8023 MCAN2
0x8024 MCAN3

面向客户应用的稳定子索引如下;对象中的其他子索引属于高级策略或保留扩展,不构成客户接口承诺。

SI 名称 类型 访问 默认 说明
1 Enable U8 RW 1 0=停用显式数据面策略,1=启用
2 Apply command U8 RW 0 所需字段写完后写 1,使当前通道配置生效;命令完成后自动清零
3 Apply status U8 RO 0 最近一次应用结果;0=OK
5 RX drain budget max U8 RW 2 每次服务最多从 MCAN 接收路径回收的帧数,范围 0..8;0 表示使用固件上限
12 TX budget max U8 RW 4 每次服务最多写入 MCAN 发送路径的帧数,范围 0..8;0 表示使用固件默认值
20 Active control word U32 RO 0 当前生效策略的打包回读,用于确认 apply 已生效

IgH MCAN Port API 的以下调用会使用这些索引:

API 实际启动 SDO
igh_mcan_port_set_channel_rx_drain_budget() 0x8021 + channel : 0x05
igh_mcan_port_set_channel_tx_write_budget() 0x8021 + channel : 0x0C

调用任一预算设置函数后,igh_mcan_port_apply_config() 还会为对应通道写 SI1=1,最后写 SI2=1。默认配置不会写 0x8021..0x8024,因此旧固件和设备出厂默认策略不受影响。提高预算可能增大瞬时 CAN 总线突发和 CPU 服务量,必须使用真实负载复测丢帧计数和延迟长尾。

12.2.2 数据面预算配置顺序

手动配置时按以下顺序执行:

  1. 确认设备固件提供目标对象;旧固件返回“对象不存在”时应保留默认策略,而不是让整套启动失败。
  2. SI1=1
  3. 只写需要覆盖的 SI5 和/或 SI12,取值范围为 0..8。
  4. SI2=1 应用。
  5. 读取 SI3SI20,确认应用成功并回读生效值。

12.2.3 制造商测试与维护对象

数据面旁路测试、直接寄存器访问、持久化维护和制造流程对象仅供制造商支持使用。客户应用不得依赖或写入这些对象;需要进一步诊断时,请读取 0x9011、0x9020..0x9023、标准状态和错误计数,并导出运行日志。

12.2.4 0x9011 Cycle Performance Diagnostics

0x9011 用于观察中断计数、PDI/DC 相位和固件关键路径的最坏耗时。除 Clear command 外,下列字段均只读。耗时字段单位为 CPU cycle,可使用 0x8000:04 返回的 CPU 时钟换算;未启用对应测量功能时,相关字段可能保持 0。

SI 名称 类型 访问 说明
1 PDI IRQ count U32 RO PDI 中断计数
2 Sync0 IRQ count U32 RO Sync0 中断计数
3 Sync1 IRQ count U32 RO Sync1 中断计数
4 PDI to Sync0 phase min I32 RO PDI 到 Sync0 相位差最小值
5 PDI to Sync0 phase max I32 RO PDI 到 Sync0 相位差最大值
6 APPL OutputMapping max cycles U32 RO RxPDO/OutputMapping 最大耗时
7 APPL InputMapping max cycles U32 RO TxPDO/InputMapping 最大耗时
8 MCAN PDO service max cycles U32 RO MCAN PDO 服务最大耗时
10 RxPDO parse max cycles U32 RO RxPDO 解析最大耗时
11 ESC read max cycles U32 RO PDI/ESC 读路径最大耗时
12 ESC write max cycles U32 RO PDI/ESC 写路径最大耗时
13 Schedule service max cycles U32 RO 预约发送服务最大耗时
14 Clear command U8 RW 写 1 清空本对象统计;命令由固件处理后清零

未列出的子索引为兼容或制造商诊断扩展,客户程序不得解释其位布局。

12.2.5 0x9020..0x9023 MCAN Data Path Diagnostics

0x9020..0x9023 分别对应 MCAN0..MCAN3,用于判断瓶颈来自 CAN 接收积压、PDO 空间、MCAN TX 背压、bus-off 还是通道服务预算。

SI 名称 类型 访问 说明
1 RX cache count U16 RO 当前等待打包的接收帧数
2 RX cache high watermark U16 RO 接收缓存历史最高水位
3 RX drain last U16 RO 最近一次服务回收的接收帧数
4 RX drain max U16 RO 历史单次最大回收帧数
5 RX dropped total U32 RO 接收丢弃总数
6 RX dropped old U32 RO 丢弃旧帧计数
7 RX dropped new U32 RO 丢弃新帧计数
8 RX dropped critical U32 RO 关键帧保护相关丢弃计数
9 TxPDO consumed last U16 RO 最近一次 TxPDO 打包消费帧数
10 TxPDO consumed max U16 RO 历史单次 TxPDO 最大消费帧数
11 TX FIFO full count U32 RO MCAN TX FIFO/Queue 满或不可写计数
12 TX stale dropped U32 RO 过期待发送帧丢弃计数
13 Bus-off count U32 RO bus-off 次数
14 Recovery attempts U16 RO 自动恢复尝试次数
15 Degraded state U16 RO 0=正常,非 0=降级或保护状态
16 Last error U32 RO 最近一次数据面或底层错误码
17 Service max cycles U32 RO 本通道服务最大耗时
18 Service last cycles U32 RO 本通道最近一次服务耗时

RX cache high watermark 持续接近缓存上限且 RX dropped total 增加,表示 CAN 输入或打包速度超过当前配置能力;TX FIFO full count 增加则表示 CAN 总线发送能力不足或下游未应答。两者应与 0x8010/0x8011 的 overflow counter 和主站 WKC 一起判断。

12.3 0x8000 System Config

SI 名称 类型 访问 默认 说明
1 Reboot command U8 WO 0 写 1 请求软件重启
4 CPU clock hz U32 RO runtime CPU 主频,用于换算 0x9011 的 cycle 计数
10 Config version U32 RW 0 主站配置版本回显
11 Last apply result U32 RO 0 最近系统配置应用结果
12 CAN pin rotation U8 RW 0 逻辑 CAN 通道到固定引脚组的旋转
13 Active CAN pin rotation U8 RO 0 当前生效 rotation
14 CAN pin rotation mask U8 RO 0x0F 支持的 rotation bit mask
15 CAN pin apply status U8 RO 0 最近 pin rotation 应用状态

CAN pin rotation 只允许在芯片/板级固定 CAN 引脚组之间旋转逻辑通道,不提供任意 GPIO 复用配置。

12.4 0x8001..0x8004 MCAN Channel Config

每路通道结构相同,0x8001 对应 CAN0,0x8004 对应 CAN3。

对象完整子项按功能分组如下。普通客户通常只需要配置 SI15/16/19/20 和必要的 FIFO/Queue 参数;滤波器、TSU、Timeout 属于高级配置。

SI 名称 类型 访问 默认 说明
1 Apply command U8 WO 0 写 1 应用通道配置
2 Apply status U8 RO 0 最近 apply 结果
3 Flash command U8 WO 0 bit0 save,bit1 load,bit2 factory reset
4 Flash status U8 RO 0 最近 flash 命令结果
5 Command sequence U32 RO 0 命令完成序号
6 Command Pad0 U32 RO 0 保留
7 Bit timing mode U8 RW 0 0=自动波特率求解,1=手动 bit timing
8 Node mode U8 RW 0 Normal / Loopback / Listen
9 Non-ISO enable U8 RW 0 CAN FD Non-ISO 模式
10 Transmit pause U8 RW 0 MCAN transmit pause
11 Edge filter enable U8 RW 0 边沿过滤
12 Protocol exception disable U8 RW 0 禁止 protocol exception
13 Wide message marker enable U8 RW 0 扩展 message marker
14 External timestamp use U8 RW 0 使用外部时间戳源
15 FD enable U8 RW 1 1=CAN FD,0=classic CAN
16 TDC enable U8 RW 1 CAN FD 传输延迟补偿
17 Restricted mode disable U8 RW 0 restricted operation mode 控制
18 Disable auto retransmission U8 RW 0 1=关闭 MCAN 自动重发
19 Nominal bitrate U32 RW 500000 仲裁段波特率
20 Data bitrate U32 RW 5000000 CAN FD 数据段波特率
21 Nominal SP min U16 RW 750 仲裁段采样点下限,单位 0.1%;已知对端采样点时建议写成对端目标值
22 Nominal SP max U16 RW 875 仲裁段采样点上限,单位 0.1%;已知对端采样点时建议写成对端目标值
23 Data SP min U16 RW 750 CAN FD 数据段采样点下限,单位 0.1%;已知对端采样点时建议写成对端目标值
24 Data SP max U16 RW 875 CAN FD 数据段采样点上限,单位 0.1%;已知对端采样点时建议写成对端目标值
25 Nominal BRP U16 RW 0 手动仲裁段 prescaler,仅 SI7=1 生效
26 Nominal TSEG1 U8 RW 0 手动仲裁段 TSEG1,仅 SI7=1 生效
27 Nominal TSEG2 U8 RW 0 手动仲裁段 TSEG2,仅 SI7=1 生效
28 Nominal SJW U8 RW 0 手动仲裁段 SJW,仅 SI7=1 生效
29 Data BRP U16 RW 0 手动 CAN FD 数据段 prescaler,仅 SI7=1 生效
30 Data TSEG1 U8 RW 0 手动 CAN FD 数据段 TSEG1,仅 SI7=1 生效
31 Data TSEG2 U8 RW 0 手动 CAN FD 数据段 TSEG2,仅 SI7=1 生效
32 Data SJW U8 RW 0 手动 CAN FD 数据段 SJW,仅 SI7=1 生效
33 TDC offset U8 RW 0 0=自动,非 0=手动 TDCO
34 TDC filter U8 RW 0 0=自动,非 0=手动 TDCF
36 Accept non-match std U8 RW 0 标准帧未命中过滤器时的处理策略
37 Accept non-match ext U8 RW 0 扩展帧未命中过滤器时的处理策略
38 Reject remote std U8 RW 0 是否拒绝标准远程帧
39 Reject remote ext U8 RW 0 是否拒绝扩展远程帧
40 Ext ID mask U32 RW 0x1FFFFFFF 扩展 ID 全局 AND mask
41 Std list max U8 RO 64 标准过滤器最大条数
42 Ext list max U8 RO 24 扩展过滤器最大条数
43 Std current index U8 RW 0 当前编辑的标准过滤器索引
44 Ext current index U8 RW 0 当前编辑的扩展过滤器索引
45 Std entry cmd U8 RW 0 标准过滤器编辑命令
46 Ext entry cmd U8 RW 0 扩展过滤器编辑命令
47 Std entry status U8 RO 0 标准过滤器命令执行结果
48 Ext entry status U8 RO 0 扩展过滤器命令执行结果
49 Std filter count U8 RW 0 标准过滤器有效条数
50 Std filter type U8 RW 0 标准过滤器类型
51 Std filter action U8 RW 0 标准帧命中后的处理动作
52 Std filter sync U8 RW 0 标准帧 sync message 标记
53 Std ID1 U32 RW 0 标准过滤器 ID1
54 Std ID2 U32 RW 0 标准过滤器 ID2
55 Ext filter count U8 RW 0 扩展过滤器有效条数
56 Ext filter type U8 RW 0 扩展过滤器类型
57 Ext filter action U8 RW 0 扩展帧命中后的处理动作
58 Ext filter sync U8 RW 0 扩展帧 sync message 标记
59 Ext ID1 U32 RW 0 扩展过滤器 ID1
60 Ext ID2 U32 RW 0 扩展过滤器 ID2
61 RX FIFO0 op mode U8 RW 0 FIFO0 操作模式
62 RX FIFO0 size U8 RW 48 FIFO0 元素数量
63 RX FIFO1 op mode U8 RW 0 FIFO1 操作模式
64 RX FIFO1 size U8 RW 12 FIFO1 元素数量
65 RX FIFO0 data size U8 RW 7 FIFO0 元素数据区大小枚举
66 RX FIFO1 data size U8 RW 7 FIFO1 元素数据区大小枚举
67 RX buffer count U8 RW 12 RX buffer 元素数量
68 RX buffer data size U8 RW 7 RX buffer 元素数据区大小枚举
69 TX FIFO queue mode U8 RW 0 0=FIFO,1=Queue
70 TX FIFO queue size U8 RW 32 TX FIFO/Queue 元素数量
71 TX dedicated buffer count U8 RW 0 dedicated TX buffer 数量
72 TX buffer data size U8 RW 7 TX 元素数据区大小枚举
73 TX event FIFO size U8 RW 32 TX Event FIFO 元素数量
74 Timestamp selection U8 RW 0 MCAN 时间戳选择
75 Timestamp prescaler U8 RW 0 MCAN timestamp prescaler
76 TSU enable U8 RW 0 启用 TSU
77 TSU use external timebase U8 RW 0 使用外部时间基
78 TSU capture on SOF U8 RW 0 SOF 捕获
79 TSU enable 64-bit U8 RW 0 64 bit TSU
80 Pad2 U8 RO 0 保留
81 TSU prescaler U16 RW 1 TSU prescaler,最小 1
82 TSU external timebase source U8 RW 0 外部时间基来源
83 TSU TBSEL option U8 RW 0 TBSEL 选项
84 Timeout enable U8 RW 0 启用 MCAN timeout
85 Timeout select U8 RW 0 timeout 选择,0..3
86 Pad3 U16 RO 0 保留
87 Timeout period U16 RW 0 timeout 周期

通道命令与状态:

字段 说明
Apply command 0 no-op
Apply command 1 应用当前 SDO 配置到运行时 MCAN 通道
Apply status / Flash status 0 OK
Apply status / Flash status 1 fail
Apply status / Flash status 3 build fail,配置转换失败
Apply status / Flash status 4 apply runtime fail,MCAN 重启或驱动应用失败
Flash command bit0 1 保存当前通道配置到 Flash
Flash command bit1 1 从 Flash 加载通道配置
Flash command bit2 1 恢复该通道出厂默认配置

Node mode 取值:

说明
0 Normal,正常收发
1 Restricted/monitor 类调试模式,按芯片驱动支持生效
2 Internal loopback,内部回环测试
3 External loopback/listen 类调试模式,按芯片驱动支持生效

手动 bit timing 仅在 SI7 Bit timing mode = 1 时生效。自动模式下主站配置 Nominal/Data bitrate 和采样点范围,固件根据 MCAN 源时钟求解 BRP/TSEG/SJW。采样点范围应按对端设备配置:已知对端采样点时建议把 min/max 都写成目标采样点;未知时先按对端文档推荐值配置并验证收发质量。手动模式下使用 SI25..32

滤波器全局字段:

SI 名称 类型 访问 说明
36 Accept non-match std U8 RW 标准帧未命中过滤器时的处理策略
37 Accept non-match ext U8 RW 扩展帧未命中过滤器时的处理策略
38 Reject remote std U8 RW 是否拒绝标准远程帧
39 Reject remote ext U8 RW 是否拒绝扩展远程帧
40 Ext ID mask U32 RW 扩展 ID 全局 mask
41 Std list max U8 RO 标准过滤器最大条数,当前 64
42 Ext list max U8 RO 扩展过滤器最大条数,当前 24

滤波器编辑窗口:

SI 名称 类型 访问 说明
43 Std current index U8 RW 当前编辑的标准过滤器索引
44 Ext current index U8 RW 当前编辑的扩展过滤器索引
45 Std entry cmd U8 RW 对当前标准过滤器索引执行命令
46 Ext entry cmd U8 RW 对当前扩展过滤器索引执行命令
47 Std entry status U8 RO 标准过滤器命令执行结果
48 Ext entry status U8 RO 扩展过滤器命令执行结果
49 Std filter count U8 RW 有效标准过滤器数量
50 Std filter type U8 RW 标准过滤器类型
51 Std filter action U8 RW 标准帧命中后的处理动作
52 Std filter sync U8 RW 标准帧 sync message 标记
53 Std ID1 U32 RW 标准过滤器 ID1
54 Std ID2 U32 RW 标准过滤器 ID2
55 Ext filter count U8 RW 有效扩展过滤器数量
56 Ext filter type U8 RW 扩展过滤器类型
57 Ext filter action U8 RW 扩展帧命中后的处理动作
58 Ext filter sync U8 RW 扩展帧 sync message 标记
59 Ext ID1 U32 RW 扩展过滤器 ID1
60 Ext ID2 U32 RW 扩展过滤器 ID2

Entry cmd

说明
0 no-op
1 load current,将当前索引条目读入编辑窗口
2 save current,将编辑窗口写入当前索引
3 clear current,禁用当前索引条目
4 flash current,预留;当前建议使用通道 Flash command 统一保存

Entry status

说明
0 OK
1 index 无效
2 command 无效

典型过滤器配置流程:

  1. 读取 Std list max / Ext list max,确认容量。
  2. Std filter countExt filter count
  3. current index
  4. filter type/action/sync/id1/id2
  5. entry cmd = 2 保存当前索引。
  6. 重复配置多个条目。
  7. Apply command = 1 让通道配置生效。
  8. 如需掉电保存,写 Flash command bit0 = 1

RAM/FIFO/Buffer 字段:

注意:表中的 SI 是十进制子项号;很多主站界面会用十六进制显示。用户常说的 0x41/0x42/0x44 分别就是十进制 65/66/68,对应 RX FIFO0、RX FIFO1、RX Buffer 的元素数据区大小。它们只决定 MCAN Message RAM 里每个元素可容纳的最大数据字节数,不决定 PDO 中单帧 CAN FD 的 DLC;实际 DLC 仍由 RxPDO/TxPDO 帧包里的 DLC 字段决定。

SI 十进制 SI 十六进制 名称 类型 访问 推荐默认 说明
61 0x3D RX FIFO0 op mode U8 RW 0 FIFO0 操作模式,0=blocking;FIFO 满时新帧不覆盖旧帧,错误通过诊断计数观察
62 0x3E RX FIFO0 size U8 RW 48 FIFO0 元素数量;通常承载普通接收帧
63 0x3F RX FIFO1 op mode U8 RW 0 FIFO1 操作模式,0=blocking
64 0x40 RX FIFO1 size U8 RW 12 FIFO1 元素数量;可配合过滤器承载指定帧
65 0x41 RX FIFO0 data size U8 RW 7 FIFO0 每个元素的数据区枚举;CAN FD 64B 使用 7
66 0x42 RX FIFO1 data size U8 RW 7 FIFO1 每个元素的数据区枚举;CAN FD 64B 使用 7
67 0x43 RX buffer count U8 RW 12 RX buffer 元素数量;只有过滤器动作选择 RXBUF 时才直接使用
68 0x44 RX buffer data size U8 RW 7 RX buffer 每个元素的数据区枚举;CAN FD 64B 使用 7
69 0x45 TX FIFO queue mode U8 RW 0 0=FIFO,1=Queue;Queue 按 CAN ID 仲裁优先级排序
70 0x46 TX FIFO queue size U8 RW 32 TX FIFO/Queue 元素数量;当前推荐全部 TX 资源走 FIFO
71 0x47 TX dedicated buffer count U8 RW 0 dedicated TX buffer 数量;当前推荐 0,避免与 FIFO 路径混用
72 0x48 TX buffer data size U8 RW 7 TX FIFO/Buffer 每个元素的数据区枚举;CAN FD 64B 使用 7
73 0x49 TX event FIFO size U8 RW 32 TX Event FIFO 数量;建议不小于 TX FIFO/Queue 元素数

data size 使用 HPM MCAN 驱动枚举,不是字节数本身。常用枚举如下:

枚举值 最大数据字节数 典型用途
0 8B classic CAN,或只需要 8B CAN FD 的极小 RAM 配置
1 12B CAN FD 12B
2 16B CAN FD 16B
3 20B CAN FD 20B
4 24B CAN FD 24B
5 32B CAN FD 32B
6 48B CAN FD 48B
7 64B CAN FD 64B,当前推荐默认

Message RAM 预算由元素数量和 data size 共同决定。CAN FD 通用默认建议 RXFIFO0=48, RXFIFO1=12, RXBUF=12, TXFIFO=32, TXBUF=0, TXEVENT=32, data size=7;classic CAN 可把 data size 降到 0,以节省 RAM 给更多元素。配置非法或超过通道 Message RAM 预算时,Apply status 会返回错误,运行配置不会切换到新值。

Timestamp/TSU/Timeout 字段:

SI 名称 类型 访问 说明
74 Timestamp selection U8 RW MCAN 时间戳选择,0..2
75 Timestamp prescaler U8 RW MCAN timestamp prescaler
76 TSU enable U8 RW 启用 TSU
77 TSU use external timebase U8 RW 使用外部时间基
78 TSU capture on SOF U8 RW SOF 捕获
79 TSU enable 64-bit U8 RW 64 bit TSU
80 Pad2 U8 RO 保留
81 TSU prescaler U16 RW TSU prescaler,最小 1
82 TSU external timebase source U8 RW 外部时间基来源
83 TSU TBSEL option U8 RW TBSEL 选项
84 Timeout enable U8 RW 启用 MCAN timeout
85 Timeout select U8 RW timeout 选择,0..3
86 Pad3 U16 RO 保留
87 Timeout period U16 RW timeout 周期

TDC 策略:

  • CAN FD 默认 TDC enable=1
  • 数据段低于 5M 时,主站可通过 SDO 关闭 TDC。
  • 数据段达到 5M 及以上时,固件忽略 TDC enable=0 并强制开启 TDC。
  • TDC offset/filter 默认 0,表示由 HPM MCAN 驱动按实际数据段时序自动计算。
  • 非 0 的 TDC offset/filter 仍被固件保留并下发给 MCAN 驱动,供现场专家调试使用。
  • 手动覆盖时建议 offset/filter 成对配置。

12.5 0x9000..0x9003 MCAN Channel Information

该对象为 RO,方向为 S2M,用于主站按需读取通道详细状态。

SI 名称 类型 访问 说明
1 ECR raw U32 RO 错误计数寄存器
2 PSR raw U32 RO 协议状态寄存器
3 IR raw U32 RO 中断位快照
4 RXF0S raw U32 RO RX FIFO0 状态
5 RXF1S raw U32 RO RX FIFO1 状态
6 TXFQS raw U32 RO TX FIFO/Queue 状态
7 TXEFS raw U32 RO TX Event FIFO 状态
8 HPMS raw U32 RO 高优先级消息状态
9 PDO channel status U16 RO 与 PDO 头部同语义的状态字
10 RX pending count U16 RO 未饱和 RX pending
11 TX pending count U16 RO 未饱和 TX pending
12 Channel event flags U16 RO latched warning/busoff/pressure/state-change
13 RX dropped counter U32 RO PDO 打包前丢帧计数
14 TX backpressure counter U32 RO TX 队列满/背压计数
15 Bus off counter U32 RO BusOff 迁移计数
16 Detail sequence U32 RO 详情快照变化序号

12.6 制造商维护接口

!!! danger "非公开接口" 寄存器访问、工厂维护和持久化修复接口不属于公开产品 API。客户现场不得通过 SDO 改写控制器寄存器或设备存储区;恢复或深度诊断必须使用官方服务流程。

12.7 0xF000 Device Objects

主站必须读取 0xF000 能力对象后再选择 PDO profile。

该对象为 RO,方向为 S2M,用于主站识别设备能力、版本和协议上限。

SI 名称 类型 访问 默认 说明
1 Device type U8 RO runtime 产品类型标识:0=ECAN-Lite,其他值为定制型号
2 Channel count U8 RO 4 MCAN 通道数
3 Capability version U16 RO 0x0001 能力对象版本
4 Hardware revision U32 RO runtime 设备硬件版本;未提供时返回 0
5 Firmware version major U16 RO runtime 固件主版本字段
6 Firmware version minor U16 RO runtime 固件次版本/构建字段
7 Serial number low U32 RO runtime 设备序列号低 32 bit;未提供时返回 0
8 Serial number high U32 RO runtime 设备序列号高 32 bit;未提供时返回 0
9 PDO header version mask U16 RO 0x0006 支持V1和V2

PDO 能力与上限:

SI 名称 类型 访问 默认 说明
10 PDO size base min U8 RO 1 低 5 bit 的最小 128B 基础块数
11 PDO size base max U8 RO 10 低 5 bit 的最大 128B 基础块数,不是编码 U8 的最大值
12 Encapsulation profile mask U32 RO 0x00000033 支持 profile 0/1/4/5
13 Max PDO bytes U16 RO 1392 单方向最大 PDO,10*128 + 7*16
14 Max CAN channels U8 RO 4 最大 CAN 通道数
15 PDO option flags mask U8 RO 0x3F 支持bit0..5
16 PDO feature flags U32 RO runtime 客户可用的 PDO、时间戳、对齐和预约发送能力
17 PDO size base unit bytes U16 RO 128 基础块单位;bit7 能力存在时实际可按 16B 微调
18 PDO default fixed header bytes U16 RO 5E=24,6E=32 默认V1固定头长度;显式V2为16/20
19 Device service flags U32 RO runtime 客户可用的设备服务能力

Encapsulation profile mask

Bit Profile 说明
0 0 compact inline,variable DLC,无时间戳
1 1 compact inline,variable DLC,允许 delta16
4 4 compact inline,允许 D64,无时间戳
5 5 compact inline,允许 D64,允许 delta16

PDO option flags mask

Bit 名称 说明
0 reserved 保留,必须为0
1 ALIGN_4_ENABLE 帧包按 4 字节对齐
2 NO_CRC16_ENABLE NO_CRC16默认置位,因此payload CRC16默认关闭
3 APP_BYPASS_ENABLE 旁路真实 MCAN 应用链路,仅用于数据路径诊断,不用于电机控制
4 PAYLOAD_ONLY_ENABLE 稳定 layout 下只更新有效 payload,接收端必须忽略 payload_len 之外的数据
5 HEADER_V2_ENABLE 支持显式选择紧凑V2头;出厂默认不置位

PDO feature flags

Bit 名称 说明
0 reserved 保留,不表示能力
1 TSF_DELTA16 支持 16 bit delta 时间戳
2 TSF_DELTA32 能力位定义保留;当前默认能力值未置位
3 TSF_FULL64 支持 64 bit 时间戳字段
4 D64 支持固定 64B data window
5 ALIGN4 支持 4 字节对齐
6 STREAM_CRC32 能力位定义保留;当前默认能力值未置位
7 FINE_SIZE_16 现有大小字段高 3 bit 支持 16B 微调;这是能力声明,不是配置开关
8 RX_TSF_SCHEDULE_TX 支持 RxPDO TSF_FULL64 format=1 预约发送
9 NO_CRC16 支持关闭固定头 payload CRC16
10 APP_BYPASS 支持应用链路旁路诊断
11 PAYLOAD_ONLY 支持仅更新有效 payload 的数据面优化
12 FINE_BYPASS 支持细粒度数据路径旁路诊断;普通应用不使用
13 HEADER_V2 支持V2紧凑PDO头

Device service flags

Bit 说明
0 支持 FoE 固件更新
2 支持配置持久化保存/加载
4 支持维护访问级别状态

RxPDO 预约发送复用动态帧 TSF_FULL64 字段,不改变普通 CAN frame 包结构:

text
format:u8 = 1
flags:u8 = 0
tag:u16
offset_ns:u32

TSF_NONE 仍为立即发送;TSF_FULL64 format=1 表示预约到下一次 SYNC0 周期的 offset_ns 相位发送。同一相位按 PDO 帧顺序排队。

预约发送实现约束:

  • 主站必须先确认 0xF000:16 的 bit8(掩码 0x00000100)已置位,表示支持 RxPDO TSF 预约发送。
  • offset_ns 以当前 EtherCAT DC/SYNC0 周期为参考,推荐先使用 100000ns 或更大的保守相位做 bring-up。
  • 设备按 SYNC0 相位调度预约帧;已超过目标相位的帧不会跨周期补发,主站应预留足够的 offset_ns 余量。
  • 预约发送与直接发送共用 CAN 发送路径;当通道拥塞或发送异常时,通过 PDO 状态和 SDO 诊断计数反馈。
  • 当主站停止后,ESC 过程数据区可能保持最后一帧 RxPDO 镜像;固件将完全相同的重复镜像作为幂等 no-op,不记为真实解析错误。

12.8 预约发送与直接发送实时性对比

方式 特点 适用场景
直接发送 收到有效 RxPDO 后尽快提交 CAN 帧,发送相位随主站 PDO 到达时刻变化 普通控制、功能验证和不要求固定相位的通信
预约发送 在 DC/SYNC0 周期内按 offset_ns 释放 CAN 帧 主站周期稳定且需要固定 CAN 发送相位的场景

预约发送不能补偿不稳定的主站周期。启用前应先确认 EtherCAT 周期、DC 状态和 WKC 稳定,并用 CAN 分析仪在实际线缆和负载下验证发送相位。


13. 技术规格

参数 规格
主控 HPMicro HPM5E00 系列 RISC-V MCU
EtherCAT 2 端口,100Mbps,CoE/FoE
CAN 4 路 MCAN
CAN 协议 CAN 2.0A/B,CAN FD ISO
CAN FD 数据域 最大 64B
推荐实时 PDO SM:RxPDO 128B、TxPDO 256B;DC:双向 384B;更大 PDO 需按目标周期重新验收
最大 PDO 1392B/方向
PDO 大小单位 128B 基础块 + 可选 16B 微调
PDO 固定头部 默认V1:5E 24B、6E 32B;显式V2:16B/20B
PDO 封装 2B 控制字 + CAN ID + 可选时间戳 + Data
标准 ID 字段 2B
扩展 ID 字段 4B
时间戳/预约封装 off / delta16,delta32/full64;RxPDO full64 format=1 用于 SYNC0 相位预约
TDC 默认开启,5M 及以上强制开启
参数持久化 Flash 配置镜像,CRC32
固件维护 FoE 支持
CPU / mchtmr CPU 400MHz,mchtmr 24MHz
已验证主站 profile sm_250us_1ms(默认,250μs 子周期/1ms 每通道)和 dc_1ms_cross_cycle(1ms,Sync0 shift 900μs)

14. 修订历史

版本 日期 说明
V3.0 2026-08 将综合手册按技术参考与应用流程分册;完整保留协议、对象字典和诊断定义;统一默认V1+CRC关闭(OptionFlags=0x04),V2仅在PDO头部章节说明并由主站显式启用