feat(ethercat): 添加EtherCAT从站功能支持并优化同步机制

- 添加CAN反馈和ID快照SPI命令文件
- 移除EXMC组件依赖,精简项目配置
- 添加RAM函数段链接脚本,优化Flash等待周期抖动
- 实现EscExmcBus类,提供16位并行总线访问LAN9252
- 实现EscLan9252驱动,支持寄存器和PDI内存访问
- 实现EthercatSlave类,采用三缓冲机制进行PDO数据交换
- 实现EthercatSync同步管理,支持SYNC0/SYNC1中断和定时器模式
- 添加ISR执行时间统计和诊断功能
- 分离周期路径和事件路径通知机制,避免RMW竞态
This commit is contained in:
cbb
2026-06-29 01:51:02 +08:00
parent 1612e326ee
commit b171767023
31 changed files with 2177 additions and 290 deletions
+17 -6
View File
@@ -102,7 +102,7 @@
#define CONFIG_TASK_PERIOD_HEARTBEAT_TICKS 10000U
/** @brief 周期温度/电压 UART 打印开关:0=关闭,1=开启。 */
#define CONFIG_UART_TEMP_PERIODIC_PRINT 0
#define CONFIG_UART_TEMP_PERIODIC_PRINT 1
/** @brief UART 诊断打印级别:0=仅温度/电压,1=温度/电压+CAN 统计。 */
#define CONFIG_UART_DIAG_LEVEL 1
/** @brief SPI 命令逐帧日志开关:0=关闭,1=开启。高速 CAN 桥接时应关闭。 */
@@ -129,7 +129,7 @@
/** @brief APP 次版本号。 */
#define APP_FW_VERSION_MINOR 1U
/** @brief APP 补丁版本号。 */
#define APP_FW_VERSION_PATCH 0U
#define APP_FW_VERSION_PATCH 2U
/** @brief APP 构建编号。 */
#define APP_FW_VERSION_BUILD 0U
@@ -175,13 +175,24 @@
/* ============================================================
* EtherCAT LAN9252 使能与配置
* ============================================================ */
/** @brief EtherCAT 使能开关:0=禁用(未焊接 LAN9252),1=启用(焊接后)。
* 禁用时 comm/ 全部代码不编译,初始化不调用 EtherCAT,EXMC/EXTI0-2 不配置。 */
#define CONFIG_ETHERCAT_ENABLE 0
/** @brief SYNC0 同步模式:0=EXTI 外部触发(ESC 硬件同步,默认),1=TIMER0 降级(DC 未同步时)。 */
#define CONFIG_ETHERCAT_SYNC_MODE 0
/** @brief periodicIsr 最大执行时间告警阈值(µs)。实测超过此值需评估减小 PDO 大小或优化 EXMC 时序。
* 当前阈值 5µs:基于 32 字节 PDO + EXMC 6 HCLK 时序的估算上限。
* preempt=0 ISR 阻塞窗口 ≤ 此阈值时,CAN/SPI 中断需容忍。 */
#define CONFIG_ETHERCAT_ISR_MAX_US_THRESHOLD 5U
/** @brief 输入 PDO(TxPDO)在 PDI 内存区的起始偏移。
* 对应 LAN9252 SyncManager 内存映射,需与主站 ESI 配置匹配。
* @note 占位值,实际数值待主站配置确定后在集成阶段填入。 */
#define CONFIG_ESC_PDI_INPUT_OFFSET 0x1000U
/** @brief 输出 PDO(RxPDO)在 PDI 内存区的起始偏移。
* 对应 LAN9252 SyncManager 内存映射,需与主站 ESI 配置匹配。
* @note 占位值,实际数值待主站配置确定后在集成阶段填入。 */
#define CONFIG_ESC_PDI_OUTPUT_OFFSET 0x1200U
/* ---------- EXMC 引脚配置(GD32E508 EXMC 标准映射) ---------- */
/** @brief EXMC NOR/SRAM Region1 基址(NE1 片选)。 */
#define CONFIG_ESC_EXMC_BASE_ADDR 0x60000000U