一、存储同步管理器(SM)核心概述
- 定义与作用SM 是 EtherCAT 从站控制器的核心模块,通过组织特定大小的缓存区,由硬件控制主站与从站应用程序对缓存区的访问,核心目标是保障数据交换的一致性(避免数据错乱)与安全性(防止数据丢失),同时在数据状态改变时产生中断通知双方,减少 CPU 轮询开销。
- 配置基础规则
- SM 配置寄存器从0x800地址开始,每个 SM 通道占用8 个字节,包含配置寄存器(控制参数)和状态寄存器(运行状态)。
- 操作约束:必须从缓存区起始地址开始操作,否则操作被拒绝;操作结束地址后,缓存区状态改变,可触发中断或 WDT 脉冲;同一数据帧内不允许两次操作结束地址。
二、SM 通道的两种运行模式
2.1 缓存类型(3 个缓存区模式)
(1)核心特性与适用场景
- 适用场景:周期性过程数据通信(如 PDO 实时控制数据)。
- 核心优势:允许主站与从站微处理器随时访问缓存区,接收方可获取最新数据,发送方可随时更新数据;若写速快于读速,旧数据会被覆盖(适用于实时性优先、允许少量数据覆盖的场景)。
- 缓存区分配规则仅配置第 1 个缓存区的地址范围,第 2、3 个缓存区由 SM 自动管理,不可直接访问且不可被其他 SM 通道占用,示例如下表:
地址范围 | 缓存区编号 | 访问权限 | 用途 |
---|
0x1000~0x10FF | 缓存区 1 | 可直接访问 | 主站 / 从站直接读写 |
0x1100~0x11FF | 缓存区 2 | 不可直接访问、不可共享 | SM 自动管理的备用缓存 |
0x1200~0x12FF | 缓存区 3 | 不可直接访问、不可共享 | SM 自动管理的备用缓存 |
0x1300 及以上 | - | 可自由分配 | 其他用途存储空间 |
(2)数据交换原理(状态切换)
以 “主站写数据、从站读数据” 为例,3 个缓存区通过状态切换实现连续数据交换:
- 状态①:缓存区 1 由主站写入数据,缓存区 2 空闲,缓存区 3 由从站读取数据。
- 状态②:主站写缓存区 1 完成后,缓存区 1 与缓存区 2 交换,缓存区 2 变为 “待读”,缓存区 1 变为 “空闲”。
- 状态③:从站读缓存区 3 完成后,缓存区 3 变为 “空闲” 并与缓存区 1 交换,回到可再次读写的初始状态。
- 中断触发:若 SM 控制寄存器(0x0804+N×8)中使能 ECAT 帧或 PDI 中断,每次成功读写后,SM 状态寄存器(0x0805+N×8)会设置中断事件请求,映射到 ECAT 中断请求寄存器(0x0210~0x0211)和 AL 事件请求寄存器(0x0220~0x0221),最终由中断屏蔽寄存器决定是否触发中断信号。
2.2 邮箱类型(1 个缓存区模式)
(1)核心特性与适用场景
- 适用场景:非周期性应用层数据通信(如 SDO 配置数据、设备参数交互)。
- 核心优势:采用握手机制,仅 1 个缓存区,确保数据不丢失;只有一端完成数据操作(写 / 读)后,另一端才能访问缓存区。
- 通道分工:通常使用两个 SM 通道配合:
- SM0 通道:主站→从站的数据传输(主站写、从站读)。
- SM1 通道:从站→主站的数据传输(从站写、主站读)。
(2)数据交换流程
① 主站写邮箱操作(主站→从站)
步骤 | 操作细节 | 关键判断指标 |
---|
1 | 主站发送 ECAT 帧,写 SM0 通道缓存区,携带顺序编号 Ctr(每次新服务 Ctr+1) | - |
2 | 从站接收数据帧,若 FCS 校验正确,SM0 通道状态改变 | 主站检查 WKC(工作计数器):WKC=1→写成功(状态①);WKC=0→写失败 |
3 | 若 WKC=0(缓存区满,从站未读上次数据),主站等待一段时间后重试 | 重试后 WKC=1→写成功(状态②) |
4 | 若数据帧丢失,主站超时后重发相同数据帧 | 从站检测 Ctr 与上次相同→识别为重复数据(状态③) |
② 主站读邮箱操作(从站→主站)
- 从站有数据发送时,先将数据写入 SM1 通道缓存区。
- 主站发送 “读邮箱命令”,携带 Ctr=1;若数据帧丢失,主站检测超时后翻转 SM0 通道控制寄存器的 “重复请求位”(0x0806.1)。
- 从站检测到 “重复请求位” 翻转后,将上次数据重新写入 SM1 通道,并翻转 SM1 通道的 “重复请求应答位”(0x80E.1)。
- 主站轮询到 “重复请求应答位” 翻转后,再次发送读命令,读取数据,WKC=1 表示读成功。
- 主站判断数据有效性:若 Ctr 与上次相同,确认数据无误;若不同,识别为新数据。
三、SM 配置寄存器详细说明
SM 每个通道的 8 字节寄存器包含偏移地址 + 0x0~+0x7,关键参数如下表(以单个 SM 通道为例):
偏移地址 | 位范围 | 寄存器名称 | 关键配置项 | 描述 | 复位值 |
---|
+0x0~+0x1 | 0~16 | 数据物理起始地址 | - | SM 通道处理的第一个字节在从站控制器地址空间的起始地址 | 0 |
+0x2~+0x3 | 0~16 | SM 通道数据长度 | - | 分配给 SM 通道的数据长度,必须 > 1 才激活;设为 1 时仅使能 WDT | 0 |
+0x4 | 0~1 | 运行模式 | 00:3 个缓存区模式;01:保留;10:1 个缓存区模式;11:保留 | 选择 SM 通道的缓存区数量模式 | 00 |
| 2~3 | 方向 | 00:读(ECAT 帧读、PDI 写);01:写(ECAT 帧写、PDI 读) | 设定数据传输方向 | 00 |
| 4 | ECAT 帧中断使能 | 0:不使能;1:使能 | ECAT 帧读写成功后是否触发中断 | 0 |
| 5 | PDI 中断使能 | 0:不使能;1:使能 | PDI 读写成功后是否触发中断 | 0 |
| 6 | WDT 触发 | 0:不使能;1:使能 | 是否通过 SM 通道触发 WDT(看门狗)脉冲 | 0 |
| 7 | 保留 | - | 预留位,无功能 | - |
+0x5 | 0 | 写中断标志 | 1:写成功触发中断;0:读第一个字节后清除 | 指示写操作相关中断状态 | 0 |
| 1 | 读中断标志 | 1:读成功触发中断;0:写第一个字节后清除 | 指示读操作相关中断状态 | 0 |
| 3 | 单缓存区状态 | 0:缓存区空闲;1:缓存区满(仅 1 个缓存区模式生效) | 邮箱模式下缓存区的占用状态 | 0 |
| 4~5 | 3 缓存区状态 | 00:缓存区 1;01:缓存区 2;10:缓存区 3;11:无写入(仅 3 个缓存区模式生效) | 指示 3 个缓存区中最后写入数据的缓存区编号 | 11 |
+0x6 | 0 | SM 通道使能 | 0:不使能(禁止 SM 控制内存访问);1:使能(允许 SM 控制内存访问) | 控制 SM 通道是否激活 | 0 |
| 1 | 重复请求 | 0:无;1:请求重复邮箱数据传输(配合 ECAT 帧读邮箱使用) | 主站请求从站重发邮箱数据 | 0 |
| 6 | ECAT 帧事件锁存 | 0:无操作;1:主站读写缓存区后产生锁存事件 | 记录主站对缓存区的访问事件 | 0 |
| 7 | PDI 事件锁存 | 0:无操作;1:PDI 读写缓存区或访问起始地址后产生锁存事件 | 记录从站 PDI 对缓存区的访问事件 | 0 |
+0x7 | 0 | SM 通道无效控制 | 读:0 = 正常激活,1 = 无效锁定;写:0 = 激活,1 = 请求无效(待当前帧结束) | 控制 SM 通道的激活 / 无效状态 | 0 |
| 1 | 重复请求应答 | 0:无;1:与重复请求位一致,表 PDI 应答重复请求 | 从站对主站 “重复请求” 的应答标志 | 0 |