存储同步管理器SyncManager 归纳

一、存储同步管理器(SM)核心概述

  1. 定义与作用 SM 是 EtherCAT 从站控制器的核心模块,通过组织特定大小的缓存区,由硬件控制主站与从站应用程序对缓存区的访问,核心目标是保障数据交换的一致性 (避免数据错乱)与安全性(防止数据丢失),同时在数据状态改变时产生中断通知双方,减少 CPU 轮询开销。
  2. 配置基础规则
    • 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. 状态①:缓存区 1 由主站写入数据,缓存区 2 空闲,缓存区 3 由从站读取数据。
  2. 状态②:主站写缓存区 1 完成后,缓存区 1 与缓存区 2 交换,缓存区 2 变为 "待读",缓存区 1 变为 "空闲"。
  3. 状态③:从站读缓存区 3 完成后,缓存区 3 变为 "空闲" 并与缓存区 1 交换,回到可再次读写的初始状态。
  4. 中断触发:若 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 与上次相同→识别为重复数据(状态③)
② 主站读邮箱操作(从站→主站)
  1. 从站有数据发送时,先将数据写入 SM1 通道缓存区。
  2. 主站发送 "读邮箱命令",携带 Ctr=1;若数据帧丢失,主站检测超时后翻转 SM0 通道控制寄存器的 "重复请求位"(0x0806.1)。
  3. 从站检测到 "重复请求位" 翻转后,将上次数据重新写入 SM1 通道,并翻转 SM1 通道的 "重复请求应答位"(0x80E.1)。
  4. 主站轮询到 "重复请求应答位" 翻转后,再次发送读命令,读取数据,WKC=1 表示读成功。
  5. 主站判断数据有效性:若 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
相关推荐
Larry_Yanan4 小时前
QML学习笔记(四十)QML的FileDialog和FolderDialog
笔记·qt·学习
社会大青年5 小时前
STM32 GPIO-------设置成51单片机模式输出
stm32·嵌入式硬件·51单片机
麻辣长颈鹿Sir5 小时前
单片机进入 B. 中断无限循环异常解决方法
单片机·嵌入式硬件·b.中断·异常中断处理·程序无限循环异常处理·芯海spi异常中断·芯海芯片
red watchma5 小时前
Xshell->MCU Ymodem协议实现
网络·单片机·嵌入式硬件
XINVRY-FPGA6 小时前
XC7A100T-2FGG484I Xilinx Artix-7 FPGA
arm开发·嵌入式硬件·fpga开发·硬件工程·信息与通信·信号处理·fpga
lingzhilab6 小时前
零知IDE——基于STM32F407VET6和ESP-01的SHT2X温湿度监测与云传输系统
stm32·单片机·嵌入式硬件
爱上妖精的尾巴6 小时前
5-22 WPS JS宏reduce数组的归并迭代应用(实例:提取最大最小值的记录)
服务器·前端·javascript·笔记·wps·js宏
国科安芯6 小时前
高辐射环境下AS32S601ZIT2型MCU的抗辐照性能与应用潜力分析
网络·人工智能·单片机·嵌入式硬件·fpga开发
爱因斯坦乐9 小时前
【vue】I18N国际化管理系统
前端·javascript·vue.js·笔记·前端框架