EtherCAT从站(LAN9252+STM32)配置全解析与优化指南
SlaveInformation(从站信息)配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| VENDOR_ID | 供应商ID(本公司注册的 ETG 的 ID) | 0x000004D8(LAN9252 厂商 ID) | 调试阶段使用芯片原厂(如LAN9252 厂商 ID),或直接使用本公司ID |
| VENDOR_NAME | 供应商名称 | Microchip(LAN9252 厂商) | 匹配芯片原厂或本公司名称 |
| VENDOR_IMAGE | 供应商图标 | 默认或自定义 | 调试阶段默认,量产换成自定义 |
| GROUP_NAME | 从站设备分组名 | 默认或自定义 | 依公司产品分类命名 |
| GROUP_IMAGE | 从站设备组图标 | 默认或自定义 | 调试阶段默认,量产换成自定义 |
| DEVICE_IMAGE | 从站设备图标 | 默认或自定义 | 调试阶段默认,量产换成自定义 |
| PRODUCT_CODE | 产品代码 | 默认或自定义 | 默认芯片代码(如LAN9252)或公司产品ID,同型号产品其产品代码相同 |
| REVISION_NUMBER | 产品版本号 | 默认或自定义 | 自定义版本,按需修改 |
| SERIAL_NUMBER | 产品序列号 | 默认或自定义 | 调试固定默认,量产改唯一序号,就是每个产品全球唯一ID,可以用MCU ID或其他方式保持全球唯一 |
| DEVICE_PROFILE_TYPE | 设备行规类型 | 0x00000192 | ETG规范中定义的标准设备类型(如I/O模块、驱动器)。例如:通通用 I/O 设备: 0x00000191 运动控制设备:0x00000192 测量设备与闭环控制器:0x00000193 |
| DEVICE_NAME | 从站设备名称 | STM32F412-LAN9252-SPI | 自定义,主站扫描可直观识别 |
| DEVICE_HW_VERSION | 从站设备硬件版本号 | 1.0.0 |
按硬件版本填写。 修订号:修复错误,完全兼容 |
| DEVICE_SW_VERSION | 从站设备软件版本号 | 1.0.0 | 同硬件版本号 |
Generic (通用)配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| SYSTEM_HEADER_FILE | 系统头文件 | #include "stm32f4xx_hal.h" | 适配你的单片机工程头文件(如 GPIO、SPI 驱动声明、宏定义、类型定义)。开始不知道可空,后面可根据报错情况更新。 |
| EXPLICIT_DEVICE_ID | 显式设备 ID | 1 | 开启,主站可以依据EtherCAT标准给每台设备单独发一个 “唯一编号”; 关闭,主站只能靠接线的先后顺序来认设备,换线、换了设备顺序都会乱; |
| ESC_SM_WD_SUPPORTED | EtherCAT从站控制器(ESC) 同步管理器看门狗支持 | 1 | 开启后,主站掉线 / 断连超过超时,从站会自动复位或进入安全状态 |
| ESC_EEPROM_ACCESS_SUPPORT | ESC EEPROM 访问支持 | 1 | 开启,从设备提供访问EEPROM(包含外挂或内部模拟的)的功能 |
Hardware (硬件)配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| EL9800_HW | 倍福 EL9800 硬件支持 | 0 | 不用倍福评估板,设 0 |
| MCI_HW | 倍福MCI 硬件支持 | 0 | 不用倍福 MCI 接口,设 0 |
| FC1100_HW | 倍福 FC1100 主站卡支持 | 0 | 不用倍福 FC1100 主站卡,设 0 |
| TIESC_HW | TI ESC 芯片支持 | 0 | 本例用的是 Microchip LAN9252,设 0 |
| HW_ACCESS_FILE | 硬件访问头文件 | #include "9252_HW.h" | 导入 LAN9252 官方 SPI 底层驱动 |
| CONTROLLER_16BIT | 控制器(MCU)为 16 位 | 0 | 告诉协议栈 MCU 的位数,生成对应位宽的代码,不是32位,设0 |
| CONTROLLER_32BIT | 控制器(MCU)MCU 为 32 位 | 1 | STM32F是 32 位,设1 |
| MEMORY_UNIT_16BIT | 存储单元为16位 | 0 | 告诉协议栈 MCU 的内存访问最小单元。 STM32 最小读写 1 字节(8 位),设 0 |
| _PIC18 | 适配 PIC18 系列单片机 | 0 | 不用 PIC,设 0 |
| _PIC24 | 适配 PIC24 系列单片机 | 0 | 不用 PIC,设0 |
| ESC_16BIT_ACCESS | ESC 16 位访问 | 1 | MCU 和 ESC 通信16 位访问,LAN9252是16 位访问 |
| ESC_32BIT_ACCESS | ESC 32 位访问 | 0 | 和上面互斥,设 16 位就必须关 32 位 |
| MBX_16BIT_ACCESS | 邮箱 16 位访问 | 1 | 定义邮箱(非实时数据通道)的访问位宽。LAN9252 邮箱也要求 16 位访问,和 ESC 访问保持一致 |
| BIG_ENDIAN_16BIT | 16 位大端 | 0 | 告诉协议栈 MCU 的 16 位数据字节序。STM32 是小端模式,没有转换,设 0 |
| BIG_ENDIAN_FORMAT | 全局大端格式 | 0 | STM32 是小端模式,必须设 0 |
| EXT_DEBUGER_INTERFACE | 外部调试接口 | 0 | 不用 EL9800_4A(_PIC24),保持0 |
| UC_SET_ECAT_LED | 用户(MCU)控制 EtherCAT LED | 0 | Run/Error 灯 选择 LED 的控制主体。 1(如果 LED 接 STM32 GPIO) 0(如果 LED 接 LAN9252 引脚) 同下,二选一 |
| ESC_SUPPORT_ECAT_LED | ESC 支持 EtherCAT LED | 1 | LAN9252 完整支持硬件 LED,有 RUN_LED 和 ERR_LED 专用引脚 0(如果 LED 接 STM32 GPIO) 1(如果 LED 接 LAN9252 引脚) |
| ESC_EEPROM_EMULATION | 模拟 ESC EEPROM | 0 | 是否用 MCU 的 Flash 模拟 EEPROM。LAN9252 内部自带的硬件 EEPROM,不是 MCU 模拟,必须设 0 |
| CREATE_EEPROM_CONTENT | 生成 EEPROM 内容 | 0 | 为模拟 EEPROM 提供初始数据。只有开启模拟 EEPROM 时才有效,这里设 0 |
| ESC_EEPRO_SIZE | ESC EEPROM 容量字节数 | 0x800 | 告诉协议栈 EEPROM(外接 / 内部)有多大空间。LAN9252 内部自带EEPROM 为 2048(0x0800)字节 |
EtherCAT State Machine (EtherCAT状态机)配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| BOOTSTRAPMODE_SUPPORTED | 引导(Bootstrap)模式支持 | 1 | 需要支持通过 FoE 服务进行固件更新 设 1,则还必须设置"FOE_SUPPORTED" |
| OP_PD_REQUIRED | OP状态过程数据请求 | 0 | =1:必须收到主站输出数据才能进 OP,否则进不了 OP 状态 =0:没收到数据也能进 OP |
| PREOPTIMEOUT | PreOP 状态超时 | 0x7D0 |
Init 状态转换到 PreOP/Boot 状态的超时值(单位:ms)。 MCU+LAN9252 的初始化时间通常在 100ms 以内。 |
| SAFEOP2OPTIMEOUT | SafeOP 到 OP 状态超时 | 0x1000 | SafeOp(安全运行) → OP 超时时间,这个时间是给你在APPL_StartInput()和APPL_StartOutput()函数里做运行前准备用的.超时时间是 4096(0x1000)-50=4046ms |
| CHECK_SM_PARAM_ALIGNMENT | 检查 SM 地址 / 长度是否对齐 | 1 | 协议栈自动检查PDO、邮箱等内存区域的地址和长度是否对齐 |
Synchronisation(同步) 配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| AL_EVENT_ENABLED | AL 事件中断使能 | 1 |
当 AL 事件寄存器 (0x220) 变化时,是否触发中断。=1:中断模式(支持所有同步模式);=0:轮询模式(仅支持自由运行模式) |
| DC_SUPPORTED | 分布式时钟支持 | 1 | 从站是否支持分布式时钟 (DC)。注意:必须同时在SlaveInformation → ESC_CONFIG_DATA中开启 DC 支持。设1让总线上所有从站的采样时间完全同步,必须在代码中实现APPL_Sync0()中断函数,用于同步采样 |
| ECAT_TIMER_INT | EtherCAT 定时器中断 | 1 |
EtherCAT 看门狗超时检查是否在定时器中断中执行。 |
| MIN_PD_CYCLE_TIME | 最小过程数据周期(单位:ns) | 依据实际情况自定义 | 从站能够稳定支持的最快过程数据周期,单位 ns。对应对象字典 0x1C31:05。 例:0xF4240 = 1000,000 ns = 1ms |
| MAX_PD_CYCLE_TIME | 最大过程数据周期 (ns) | 依据实际情况自定义 | 从站能够支持的最慢过程数据周期,单位 ns。 例:0xC3500000 = 3,276,800,000 ns = 3.2768 秒 |
| PD_OUTPUT_DELAY_TIME | 过程数据输出延时(单位:ns) | 0 |
从站收到主站输出数据后,到数据在硬件上生效的延迟时间,单位 ns。对应对象字典 0x1C32:09。 2. 对于有输出的设备(如驱动器),这个值是硬件输出延迟; |
| PD_OUTPUT_CALC_AND_COPY_TIME | 过程数据输出计算和拷贝耗时(单位:ns) | 0 |
从站将主站输出数据从 DPRAM 拷贝到应用层并计算的时间,单位 ns。对应对象字典 0x1C32:06。 |
| PD_INPUT_CALC_AND_COPY_TIME | 过程数据输入计算和拷贝耗时(单位:ns) | 0 | 从站将采集到的输入数据计算并拷贝到 DPRAM 的时间,单位 ns。对应对象字典 0x1C33:06。 设为 0 时,SSC 会根据你的 PDO 长度自动计算一个保守值 |
| PD_INPUT_DELAY_TIME | 过程数据输入延迟(单位:ns) | 0 | 从站采集输入数据的时间点,到数据被拷贝到 DPRAM 的时间点之间的延迟,单位 ns。对应对象字典 0x1C33:09 1. DC 同步模式下,这个值用于主站的时间补偿 2. 对于大多数应用,设为 0 即可 3. 只有在你精确测量了 ADC 采样延迟时才需要手动设置 |
Application(应用) 配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| TEST_APPLICATION | 测试应用 | 0 | 是否启用 SSC 自带的测试应用,用于验证 EtherCAT 通信和 PDO 功能,不适合实际项目 |
| EL9800_APPLICATION | EL9800 评估板应用 | 0 | 不用该评估板 |
| CiA402_SAMPLE_APPLICATION | CiA402 示例应用 | 0 | 是否启用 CiA402 运动控制设备规范。 伺服电机、驱动器专用; 不涉及运动控制,设 0 |
| SAMPLE_APPLICATION | 示例应用 | 0 | SSC 提供的基础示例代码,演示 PDO 读写,没有实际业务逻辑,工业项目必须自己写应用,你可以基于它修改 |
| SAMPLE_APPLICATION_INTERFACE | 示例应用接口 | 0 | 是否启用示例应用的接口封装。和SAMPLE_APPLICATION 配套。 |
| BOOTLOADER_SAMPLE | 引导加载程序(Bootloader)示例 | 0 | 固件升级引导程序示例,这个示例非常简陋,工业级 OTA 升级建议自己实现 Bootloader。 |
| APPLICATION_FILE | 应用文件 | #include "app_ecat.h" | 指定你自己的应用层代码头文件路径,告诉 SSC 在哪里找你的应用函数声明。 |
| USE_DEFAULT_MAIN | 使用默认 main 函数 | 0 | 设 1:使用 SSC 生成的默认 main 函数 设0:不使用默认 main,由你自己编写 main 函数,手动调用协议栈的初始化和主循环处理函数 |
最核心的铁律(官方 ET9300 应用笔记强制规定)
ECAT_Main()的调用间隔必须小于 EtherCAT 看门狗时间的 1/2
EtherCAT 看门狗时间 = 主站配置的 2 倍 PDO 周期
- 如果你跑 1ms PDO 周期 → 看门狗 = 2ms →
ECAT_Main()必须每 1ms 以内调用一次 - 如果你跑 2ms PDO 周期 → 看门狗 = 4ms →
ECAT_Main()必须每 2ms 以内调用一次
工业级应用示例
// 全局标志位
volatile bool g_sample_flag = false;
// 1ms定时器中断服务函数
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
g_sample_flag = true; // 置位采样标志
}
}
int main(void)
{
// 初始化...
MX_TIM2_Init(); // 配置1ms定时器中断
HAL_TIM_Base_Start_IT(&htim2);
ECAT_Init();
while (1)
{
// 无限调用ECAT_Main(),有事件就处理,没事件立刻返回
ECAT_Main();
// 只有当1ms标志位置位时,才执行业务代码
if (g_sample_flag)
{
g_sample_flag = false;
APPL_Application(); // 1ms执行一次采样+解算
}
}
}
ProcessData(过程数据) 配置项

依据LAN9252 的 Process Data RAM(0x1000~0x1FFF) 进行分配PDO、Mailbox空间地址。
| 配置项 | 功能说明 | 修正后推荐配置值 | 适配方案理由 |
|---|---|---|---|
| MIN_PD_WRITE_ADDRESS | 最小 PDO 写地址 | 0x1000 |
限制主站输出 PDO 存放地址范围。对应 Sync Manager 2,主站写数据,从站读数据。如果主站不指定地址,默认地址放输出 PDO。 |
| DEF_PD_WRITE_ADDRESS | 默认 PDO 写地址 | 0x1100 |
|
| MAX_PD_WRITE_ADDRESS | 最大 PDO 写地址 | 0x1FFF | |
| MIN_PD_READ_ADDRESS | 最小 PDO 读地址 | 0x1000 | 限制主站输入 PDO 存放地址范围。对应 Sync Manager 3,从站写数据,主站读数据。如果主站不指定地址,默认地址放输入 PDO。 |
| DEF_PD_READ_ADDRESS | 默认 PDO 读地址 | 0x1400 | |
| MAX_PD_READ_ADDRESS | 最大 PDO 读地址 | 0x1FFF | |
| MAX_PD_INPUT_SIZE | 最大输入 PDO 大小 | 0x0044 | 从站最多能发送多少字节的实时数据给主站 |
| MAX_PD_OUTPUT_SIZE | 最大输出 PDO 大小 | 0x0044 | 主站最多能发送多少字节的实时数据给从站 |
Mailbox(邮箱) 配置项

| 配置项 | 功能说明 | 推荐配置值 | 适配方案理由 |
|---|---|---|---|
| MAILBOX_QUEUE | 邮箱队列 | 1 | 开启邮箱请求队列。 =1:多个请求排队处理; =0:同一时间只能处理 1 个,后续请求直接返回忙 |
| AOE_SUPPORTED | AoE 协议支持 | 0 | 不用 ADS over EtherCAT(倍福专用协议)设0 |
| COE_SUPPORTED | 支持 CoE(CANopen over EtherCAT)协议 支持 | 1 | 必须启用,用于 SDO/PDO 配置、对象字典通信 |
| COMPLETE_ACCESS_SUPPORTED | SDO 完整访问支持 | 1 | 是否支持一次性读写一个对象的所有子索引。依赖COE_SUPPORTED=1 |
| SEGMENTED_SDO_SUPPORTED | 分段 SDO 支持 | 1 | 是否支持超过邮箱大小的 SDO 数据传输。 超邮箱字节数,自动分包传输。依赖 COE_SUPPORTED=1 |
| SDO_RES_INTERFACE | SDO 响应接口 | 1 | 如果不能立即生成SDO响应(例如,当需要通过串行接口进行访问时),则应设置此开关。在这种情况下,OBJ_Read或OBJ_Write应返回ABORTIDX_WORKING,并在响应可用时通过调用SDOS_SdoRes发送响应。 |
| BACKUP_PARAMETER_SUPPORTED | 备份参数支持 | 0 | 用户自行存储应用参数,可关闭此功能 |
| STORE_BACKUP_PARAMETER_IMMEDIATELY | 立即保存备份参数 | 0 | =0:需要主站发保存命令才写入(推荐,防止频繁写 EEPROM 磨损)=1:参数一修改就立刻写入仅在BACKUP_PARAMETER_SUPPORTED=1时有效 |
| DIAGNOSIS_SUPPORTED | 诊断消息支持 | 0 | 是否支持 ETG.1020 标准诊断消息。普通从站无需诊断,省内存 |
| MAX_DIAG_MSG | 最大诊断消息数 | 默认 | 诊断消息环形缓冲区大小。不开诊断的话这个参数没用 |
| EMERGENCY_SUPPORTED | 紧急消息支持 | 1 | 是否支持主动发送紧急故障消息。过载、硬件异常可主动发故障给主站,符合工业传感器规范 |
| MAX_EMERGENCIES | 最大紧急消息数 | 1 | 单次故障上报足够,无需多缓存 |
| VOE_SUPPORTED | VoE 协议支持 | 0 | 是否支持厂商自定义协议。 |
| SOE_SUPPORTED | SOE 协议支持 | 0 | 是否支持伺服驱动协议。仅伺服电机用,非伺服专用协议,关闭 |
| EOE_SUPPORTED | EOE 协议支持 | 0 | 是否支持以太网 over EtherCAT。若在 EtherCAT 总线上传 TCP/IP 数据,设1 |
| STATIC_ETHERNET_BUFFER | 静态以太网缓冲区 | 0 | 是否使用静态缓冲区存储以太网帧。与EOE_SUPPORTED配套使用 |
| FOE_SUPPORTED | FOE 协议支持 | 1 | 是否支持文件 over EtherCAT。文件传输需要设1。如固件升级。 |
| DEF_MBX_SIZE | 默认邮箱大小 | 0x0080 | 如果主站用户没有手动设置邮箱大小,主站会自动使用这个值 |
| MAX_MBX_SIZE | 邮箱最大容量 | 0x0100 | 主站绝对不能设置超过这个值的邮箱大小,否则会直接报错,无法进入 OP 状态 |
| MIN_MBX_WRITE_ADDRESS | 最小邮箱写地址 | 0x1000 | 主站→从站邮箱写,限制邮箱地址范围 |
| DEF_MBX_WRITE_ADDRESS | 默认邮箱写地址 | 0x1000 | 注意起始地址与大小,与 PDO不能重叠 |
| MAX_MBX_WRITE_ADDRESS | 最大邮箱写地址 | 0x1FFF | |
| MIN_MBX_READ_ADDRESS | 最小邮箱读地址 | 0x1000 | 从站→主站邮箱读,限制邮箱地址范围 |
| DEF_MBX_READ_ADDRESS | 默认邮箱读地址 | 0x1080 | 注意起始地址与大小,与 PDO不能重叠 |
| MAX_MBX_READ_ADDRESS | 最大邮箱读地址 | 0x1FFF |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)