Renesas RZN2_EtherCAT_CiA402_CR52 SSC Config

Renesas 官方 EtherCAT CiA402 示例配置 (RZN2_EtherCAT_CiA402_CR52)

来源: Renesas 官方 EtherCAT CiA402 示例工程(RZN2 评估套件)
目标平台: RZN2 (Cortex-R52)
工具: SSC Tool (Slave Stack Code Tool)
整理日期: 2026-06-13


目录

  1. SlaveInformation(从站信息)
  2. Generic(通用配置)
  3. Hardware(硬件配置)
  4. EtherCAT State Machine(状态机配置)
  5. Synchronisation(同步配置)
  6. Application(应用层配置)
  7. ProcessData(过程数据配置)
  8. Mailbox(邮箱配置)
  9. 附录A:ESC 内存布局
  10. 附录B:ESC_16BIT_ACCESS 与 ESC_32BIT_ACCESS 配置分析

1. SlaveInformation(从站信息)

参数名称说明
VENDOR_ID0x00000766厂商ID(Renesas Electronics Corp.)
VENDOR_NAMERenesas Electronics Corp.厂商名称
VENDOR_IMAGE424DE600...厂商Logo位图数据
GROUP_NAMERenesas RZ/N2 Group设备组名称
GROUP_IMAGE424D0802...设备组Logo位图数据
DEVICE_IMAGE424D0802...设备Logo位图数据
PRODUCT_CODE0x00000914产品代码
REVISION_NUMBER0x00000300版本号(v3.00)
SERIAL_NUMBER0x00000000序列号
DEVICE_PROFILE_TYPE0x00000192设备协议类型(CiA402 伺服驱动)
DEVICE_NAMERenesas EtherCAT RZN2 CiA402设备名称
DEVICE_HW_VERSION1.0硬件版本
DEVICE_SW_VERSION4.00软件版本

2. Generic(通用配置)

参数名称说明
SYSTEM_HEADER_FILE(空)系统头文件路径
EXPLICIT_DEVICE_ID1显式设备ID支持
ESC_SM_WD_SUPPORTED1ESC状态机看门狗支持
STATIC_OBJECT_DIC0动态对象字典
ESC_EEPROM_ACCESS_SUPPORT1EEPROM访问支持

3. Hardware(硬件配置)

参数名称说明
HW_ACCESS_FILE#include "renesashw.h"Renesas硬件访问层头文件
MEMORY_UNIT_16BIT0非16位存储单元
ESC_16BIT_ACCESS0ESC 16位寄存器访问禁用
ESC_32BIT_ACCESS0ESC 32位寄存器访问禁用
MBX_16BIT_ACCESS0邮箱16位访问禁用
UC_SET_ECAT_LED1MCU控制EtherCAT RUN/ERR LED
ESC_SUPPORT_ECAT_LED0ESC硬件不直接驱动LED
ESC_EEPROM_EMULATION0不使用EEPROM仿真
CREATE_EEPROM_CONTENT0不生成EEPROM内容文件
ESC_EEPROM_SIZE0x800EEPROM容量2KB

注意: 该Hardware节点显示的是精简参数列表(Renesas定制版SSC Tool),与标准SSC Tool的完整参数列表不同。其中 ESC_16BIT_ACCESSESC_32BIT_ACCESS 均为 0 的原因详见 附录B


4. EtherCAT State Machine(状态机配置)

参数名称说明
BOOTSTRAPMODE_SUPPORTED0不支持Bootstrap模式(无FoE固件更新)
OP_PD_REQUIRED1OP状态需要有效过程数据
PREOPTIMEOUT0x7D0Pre-OP超时 2000ms
SAFEOP2OPTIMEOUT0x2328Safe-OP到OP超时 9000ms
CHECK_SM_PARAM_ALIGNMENT0不检查SM参数对齐

5. Synchronisation(同步配置)

参数名称说明
AL_EVENT_ENABLED1AL事件中断使能
DC_SUPPORTED1分布式时钟支持
ECAT_TIMER_INT0无EtherCAT定时器中断
MIN_PD_CYCLE_TIME0x7A120最小PDO周期 500μs
MAX_PD_CYCLE_TIME0xC3500000最大PDO周期 ~3.28s
PD_OUTPUT_DELAY_TIME0x0输出延迟 0ns
PD_OUTPUT_CALC_AND_COPY_TIME0x0输出计算拷贝时间 0ns
PD_INPUT_CALC_AND_COPY_TIME0x0输入计算拷贝时间 0ns
PD_INPUT_DELAY_TIME0x0输入延迟 0ns

6. Application(应用层配置)

参数名称说明
TEST_APPLICATION_REDUCED_MEMORY(空/未显示)减少测试应用内存占用
CiA402_SAMPLE_APPLICATION1启用CiA402示例应用
SAMPLE_APPLICATION0不启用标准示例应用
SAMPLE_APPLICATION_INTERFACE0不启用示例应用接口
BOOTLOADER_SAMPLE0不启用Bootloader示例
APPLICATION_FILE#include "sampleappl.h"应用层头文件
USE_DEFAULT_MAIN0不使用默认测试主函数

7. ProcessData(过程数据配置)

参数名称说明
MIN_PD_WRITE_ADDRESS0x1000输出数据最小地址(SM2)
DEF_PD_WRITE_ADDRESS0x1200输出数据默认地址(SM2)
MAX_PD_WRITE_ADDRESS0x2FFF输出数据最大地址
MIN_PD_READ_ADDRESS0x1000输入数据最小地址(SM3)
DEF_PD_READ_ADDRESS0x1500输入数据默认地址(SM3)
MAX_PD_READ_ADDRESS0x2FFF输入数据最大地址
MAX_PD_INPUT_SIZE0x0100最大输入数据 256字节
MAX_PD_OUTPUT_SIZE0x0100最大输出数据 256字节

8. Mailbox(邮箱配置)

8.1 协议支持

参数名称说明
MAILBOX_QUEUE1邮箱队列支持
AOE_SUPPORTED0不支持ADS over EtherCAT
COE_SUPPORTED1支持CANopen over EtherCAT
COMPLETE_ACCESS_SUPPORTED1支持SDO完全访问
SEGMENTED_SDO_SUPPORTED1支持分段SDO传输
SDO_RES_INTERFACE1SDO响应接口
BACKUP_PARAMETER_SUPPORTED0不支持备份参数
STORE_BACKUP_PARAMETER_IMMEDIATELY0不立即存储备份参数
DIAGNOSIS_SUPPORTED0不支持诊断消息
MAX_DIAG_MSG0x14最大诊断消息20条
EMERGENCY_SUPPORTED0不支持紧急消息
MAX_EMERGENCIES0x1最大紧急消息1条
VOE_SUPPORTED0不支持Vendor over EtherCAT
SOE_SUPPORTED0不支持Servo over EtherCAT
EOE_SUPPORTED0不支持Ethernet over EtherCAT
STATIC_ETHERNET_BUFFER0非静态以太网缓冲区
FOE_SUPPORTED0不支持File over EtherCAT

8.2 缓冲区配置

参数名称说明
DEF_MBX_SIZE0x0100默认邮箱大小 256字节
MAX_MBX_SIZE0x0100最大邮箱大小 256字节
MIN_MBX_WRITE_ADDRESS0x1000邮箱输出最小地址(SM0)
DEF_MBX_WRITE_ADDRESS0x1000邮箱输出默认地址(SM0)
MAX_MBX_WRITE_ADDRESS0x2FFF邮箱输出最大地址
MIN_MBX_READ_ADDRESS0x1000邮箱输入最小地址(SM1)
DEF_MBX_READ_ADDRESS0x1100邮箱输入默认地址(SM1)
MAX_MBX_READ_ADDRESS0x2FFF邮箱输入最大地址

附录A:ESC 内存布局

0x1000 ~ 0x10FF  SM0 邮箱输出 (Master→Slave)  256字节
0x1100 ~ 0x11FF  SM1 邮箱输入 (Slave→Master)  256字节
0x1200 ~ ...     SM2 过程数据输出 (PDO Output) 默认起始
0x1500 ~ ...     SM3 过程数据输入 (PDO Input)  默认起始

附录B:ESC_16BIT_ACCESS 与 ESC_32BIT_ACCESS 配置分析

B.1 问题的提出

3. Hardware(硬件配置) 中,ESC_16BIT_ACCESSESC_32BIT_ACCESS 都配置为 0,即禁用了 16 位和 32 位的 ESC 寄存器访问。直觉上,32 位访问应该比 8 位逐字节访问更高效,为什么 Renesas 官方示例要禁用它们?

B.2 SSC 配置参数的作用

ESC_16BIT_ACCESSESC_32BIT_ACCESS 是 Beckhoff SSC Tool 生成的配置参数,影响 SSC 核心层 如何访问 ESC DPRAM:

参数作用
ESC_16BIT_ACCESS = 1SSC 核心层以 16 位宽度直接访问 ESC 寄存器/DPRAM
ESC_32BIT_ACCESS = 1SSC 核心层以 32 位宽度直接访问 ESC 寄存器/DPRAM
两者都为 0SSC 核心层仅使用字节级 HW_EscRead()/HW_EscWrite() 进行所有数据传输

当两者都为 0 时,SSC 的通用读/写宏最终展开为 ESCMEMCPY,即标准 memcpy

HW_EscRead(pData, Address, Len)  →  memcpy(pData, &pEsc[Address], Len)
HW_EscWrite(pData, Address, Len) →  memcpy(&pEsc[Address], pData, Len)

B.3 Renesas 硬件访问层的设计

关键文件:renesashw.h

Renesas 在 renesashw.h 中设计了两组互相独立的宏:

第一组:通用访问宏(供 SSC 核心层调用)

#define ESC_MEM_ADDR    UINT8    // 以字节为最小寻址单元
#define ESC_MEM_SHIFT   0        // 地址偏移 = 地址本身(无需右移)

// 读:memcpy(pData, &pEsc[Address], Len)
#define HW_EscRead(pData, Address, Len)   ESCMEMCPY(...)

// 写:memcpy(&pEsc[Address], pData, Len)  
#define HW_EscWrite(pData, Address, Len)  ESCMEMCPY(...)

ESC_16BIT_ACCESS = 0ESC_32BIT_ACCESS = 0 时,SSC 核心层的所有数据路径都走这两个宏 → 最终是 memcpy

第二组:专用寄存器访问宏(供特定场景直接调用)

// 16 位读:将 pEsc 强制转为 UINT16*,地址除以 2(16 位对齐)
#define HW_EscReadWord(WordValue, Address)   \
    ((WordValue) = (((UINT16 *) pEsc)[((Address) >> 1)]))

// 32 位读:将 pEsc 强制转为 UINT32*,地址除以 4(32 位对齐)
#define HW_EscReadDWord(DWordValue, Address) \
    ((DWordValue) = (UINT32) (((UINT32 *) pEsc)[(Address >> 2)]))

// 对应的 16/32 位写宏同理
#define HW_EscWriteWord(WordValue, Address)  ...
#define HW_EscWriteDWord(DWordValue, Address) ...

// 直接读取 AL Event 寄存器(16 位对齐寄存器,地址偏移已硬编码)
#define HW_GetALEventRegister()  \
    ((((UINT16 ESCMEM *) pEsc)[((ESC_AL_EVENT_OFFSET) >> 1)]))

关键结论: 这两组宏完全独立。即使 ESC_16BIT_ACCESS = 0HW_EscReadWord() 仍然可以正常工作 —— 因为它是直接在 renesashw.h 中定义的,不归 SSC 代码生成器管。

B.4 RZ/N2 的 ESC 硬件连接方式

rm_ethercat_ssc_port.c:720-728 中:

UINT16 HW_Init(void)
{
    pEsc = (MEM_ADDR ESCMEM *) p_instance_ctrl->p_reg;
    //                          ^^^^^^^^^^^^^^^^^^
    // p_reg = (R_ESC_Type *) R_ESC_BASE  — ESC 硬件寄存器基地址(直接内存映射)
    return 0;
}

RZ/N2 的 ESC(EtherCAT Slave Controller)集成在芯片内部,ESC DPRAM 直接映射到 MCU 的物理地址空间。这意味着:

  • pEsc 就是一个普通的 C 指针,指向 ESC DPRAM 在内存中的起始位置
  • memcpy 直接走 MCU 内部总线访问 ESC DPRAM,无需任何 SPI/并行总线中转
  • 与通过 SPI 连接的外部 ESC 芯片完全不同,不存在总线宽度限制

B.5 两者均配置为 0 的原因

层面解释
安全性字节级 memcpy 无对齐要求,在 Cortex-R52 上绝不会产生 alignment fault;如果启用 32 位访问,SSC 核心层可能对非 4 字节对齐的 ESC 地址发起 32 位读/写,导致硬件异常
兼容性不是所有 ESC 寄存器地址都是 16 位或 32 位对齐的。ESC DPRAM 本身就是字节寻址,使用 memcpy 无需关心对齐
架构特点RZ/N2 的 ESC 通过内部总线 memory-mapped,memcpy 性能已足够;不像某些外部 ESC 需要通过 SPI 逐字节读取,此时才需要更宽的访问来弥补总线开销
职责分离通用数据路径走 HW_EscRead/HW_EscWrite → memcpy(安全、兼容);需要高效读取特定对齐寄存器时,单独使用 HW_EscReadWord / HW_EscReadDWord(如 AL Event 寄存器始终是 16 位对齐的)

B.6 反直觉的一点

表面上看,配置 ESC_32BIT_ACCESS = 1 似乎能提升吞吐量。但在 RZ/N2 平台上:

  1. SSC 核心层不知道具体哪些 ESC 地址是对齐的,统一使用 32 位访问有风险
  2. ESC_16BIT_ACCESSESC_32BIT_ACCESS 两个标志互相排斥,不能同时启用 —— 当 ESC 寄存器有 8/16/32 位混合对齐时,单一宽度无法覆盖所有场景
  3. 实际性能瓶颈不在 DPRAM 的读写宽度,而在 EtherCAT 总线的帧周期(通常 500μs ~ 1ms)

Renesas 选择 「通用路径用 memcpy 保安全,热路径用专用宏提效率」 的策略,两个 SSC 标志全部置 0 是最合理的工程决策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值