fix(esc_lan9252): 修复LAN9252 HBI访问模型和IRQ输出使能问题

- 修正HBI访问模型:将ESC核心CSR(0x0000-0x0FFF)改为通过ECAT_CSR_CMD/DATA
  间接端口访问,解决此前直接寻址导致核心寄存器恒读0/写丢弃的问题

- 新增csrRead/csrWrite/pramRead/pramWrite接口,正确实现LAN9252访问端口操作

- 添加PDI就绪检测:等待DL_STATUS bit0置位确认EEPROM加载完成和EtherCAT核心使能

- 实现IRQ引脚输出使能:配置IRQ_CFG和INT_EN寄存器,使EtherCAT事件能到达PB1,
  解决PDI_Isr未触发导致SAFEOP->OP无限挂起的问题

- 为ESC_EXMC硬件诊断添加CONFIG_ESC_EXMC_DIAG门控,默认关闭避免影响正常运行

- 修正system_gd32e50x.c中HXTAL故障诊断的寄存器偏移和位设置错
This commit is contained in:
cbb
2026-09-02 02:38:35 +08:00
parent cfe7725b26
commit 44d407390b
29 changed files with 1178 additions and 292 deletions
+16 -3
View File
@@ -118,12 +118,25 @@ public:
static void init();
/** L0 自检故障原因码(selfTestL0 输出;经 0xA3 fault_codes[] 上报,高 3 位带通道号见 initial.h) */
enum SelfTestFault : uint8_t {
kSelfTestOk = 0U, /**< 通过 */
kSelfTestHwInit = 1U, /**< 控制器初始化失败(重试 5 次后仍不成功) */
kSelfTestStuckInit = 2U, /**< 卡在初始化模式(IWS 未清零) */
kSelfTestStbLevel = 3U, /**< 收发器 STB 输出未拉低(配置未生效) */
};
/**
* @brief L0 轻量自检(不向物理总线发帧)。
* @brief L0 轻量自检(不向物理总线发帧),仅校验 GD32 侧控制器自身状态。
* @param[out] fault_code 首个失败通道的 SelfTestFault 原因码;全部通过时为 kSelfTestOk。允许空。
* @param[out] fault_channel 首个失败通道号 0/1/2;全部通过时无意义。允许空。
* @retval true 所有已使能通道通过;false 无使能通道或任一路失败。
* @note 检查:硬件 init 结果、退出 init mode、收发器 Normal、无 BUS_OFF、TEC/REC 阈值。
* @note 检查:硬件 init 结果、退出 init mode、收发器 STB 已置 Normal。
* 1.5.35 移除 BUS_OFF 与 TEC/REC 检查:它们是总线侧状态,
* 通道未接从站(RX 浮空噪声)时会误报——「没接设备」不等于错误;
* 总线健康经 0xC1 反馈帧(bus_state/TEC/REC)运行期上报,网页 CAN 页可见。
*/
static bool selfTestL0();
static bool selfTestL0(uint8_t *fault_code = nullptr, uint8_t *fault_channel = nullptr);
/**
* @brief 查询指定通道是否已使能。