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:
@@ -408,10 +408,11 @@ void AppSpiCommand::init()
|
||||
configureGpio();
|
||||
configureDma();
|
||||
configureSpi0();
|
||||
configureExti();
|
||||
/* 首笔 CS 到来前预装 DMA,避免 EXTI 晚于首 SCK。
|
||||
* 必须在 configureSpi0/configureDma 之后调用。 */
|
||||
/* 必须先预装 DMA,再开 CS EXTI。
|
||||
* OTA 跳转后 ESP32 可能立刻打 HELLO:若 EXTI 已开而 DMA 未 arm,
|
||||
* 首笔 CS 会让 SPI 从机失步,之后长期 MISO 噪声/全 FF。 */
|
||||
armSpiDmasForNextCs();
|
||||
configureExti();
|
||||
}
|
||||
|
||||
/** @brief 在 CS 空闲期预装下一笔全双工 DMA。
|
||||
@@ -521,6 +522,9 @@ void AppSpiCommand::processCommand()
|
||||
g_v2Active = true;
|
||||
s_hasCachedResp = false;
|
||||
|
||||
/* 与 requestEsp32Read() 一致(L5 8bc01dd):建帧前 credit=1,
|
||||
* 避免 TX 占用时 g_localCredit=0 写入 HELLO_ACK,导致主机 remoteCredit=0 拒发 PING。 */
|
||||
g_localCredit = 1U;
|
||||
size_t built_len = 0U;
|
||||
v2_build_hello_ack_frame(g_sessionId, V2_ROLE_APP, (uint8_t)g_localCredit,
|
||||
0, hdr.tx_seq, m_txBuf, &built_len);
|
||||
|
||||
Reference in New Issue
Block a user