feat(canfd): 添加CANFD硬件自检功能并优化初始化时序

- 新增s_channelHwOk数组跟踪各通道硬件初始化状态
- 修改CANFD初始化流程,在GPIO上电后延时200ms再进入Normal模式
- 实现selfTestL0()轻量自检函数,检查硬件初始化、退出init模式、收发器状态等
- 更新CANFD初始化逻辑,只有自检通过才标记为成功

refactor(spi): 调整SPI DMA和EXTI配置顺序避免通信失步

- 将armSpiDmasForNextCs()调用移至configureExti()之前
- 添加注释说明DMA预装和EXTI开启的时序要求
- 避免OTA跳转后ESP32立即发送HELLO导致的SPI从机失步问题

fix(app_spi): 修复HELLO_ACK响应中credit初始化问题

- 在HELLO_ACK构建前将g_localCredit设置为1
- 与requestEsp32Read()保持一致避免TX占用时credit=0的问题
- 防止主机因remoteCredit=0而拒绝发送PING帧

refactor(initial): 重构应用初始化流程添加模块状态跟踪

- 引入ModuleBit枚举和掩码机制跟踪各模块初始化状态
- 实现mark()和report()方法统一管理模块启动结果
- 按NVIC→SysTick→ESP32_EN→USART0→AppSpi→ADC→CANFD→OTA→TaskManager→Scheduler→EtherCAT→Watchdog顺序启动
- 将CANFD模块成功条件改为selfTestL0()通过才标记成功
This commit is contained in:
cbb
2026-07-17 02:03:00 +08:00
parent 52d7f9be76
commit fedd39b902
5 changed files with 223 additions and 42 deletions
+9
View File
@@ -118,6 +118,13 @@ public:
static void init();
/**
* @brief L0 轻量自检(不向物理总线发帧)。
* @retval true 所有已使能通道通过;false 无使能通道或任一路失败。
* @note 检查:硬件 init 结果、退出 init mode、收发器 Normal、无 BUS_OFF、TEC/REC 阈值。
*/
static bool selfTestL0();
/**
* @brief 查询指定通道是否已使能。
* @param[in] channelIndex 通道索引 0/1/2。
@@ -207,6 +214,8 @@ private:
static volatile Mode s_mode;
static ChannelStats s_channelStats[3];
static ChannelFeedback s_feedback[3];
/** 各通道硬件 init(时序+退出 init mode)是否成功 */
static bool s_channelHwOk[3];
static uint32_t s_feedbackSeq;
static IdSnapshotTable s_idSnapshot[3];
};