fix(spi-ota): SPI刷写初版已可完整进行刷写流程

- 在SPI OTA ISR处理函数入口立即设置已响应标志,防止帧被重复处理,避免状态机错误推进
- 修正DMA启动前预填SPI发送缓冲区,覆盖旧字节,解决MISO线输出旧ACK字节导致序号错位问题
- 改为SPI从机内部NSS固定低电平,防止因EXTI延迟丢失首字节,提升帧接收稳定性
- 优化CS下降沿处理流程,确保DMA停止后重新配置并启动,避免数据丢失和标志位误触发
- CS上升沿停止DMA但保持内部NSS低电平,提高下一次事务的接收连续性
- SPI中断处理加入对上次事务提前检测和补充分支,增强系统鲁棒性
- 降低调试打印频率,减少ISR日志开销
- 修复看门狗复位检测代码,阻止BOOT跳转至卡死的APP,进入等待OTA修复模式
- 在工程配置文件中添加bin格式输出支持
This commit is contained in:
cbb
2026-05-30 00:35:56 +08:00
parent 8590d327e6
commit ea7a885de4
8 changed files with 1406 additions and 24 deletions
+2 -1
View File
@@ -64,6 +64,8 @@ public:
static u8 s_isrLogBuf[kIsrLogBufSize];
static u16 s_isrLogLen;
static void sender(ota_link_tx_type_t type, u8 len, const u8 *data);
private:
static u8 crc8(const u8 *data, u16 len);
static bool buildFrame(spi_ota_frame_type_t type, const u8 *payload, u16 payload_len,
@@ -73,7 +75,6 @@ private:
const u8 **payload,
u16 *payload_len);
static ota_link_msg_type_t mapMsgType(spi_ota_frame_type_t type);
static void sender(ota_link_tx_type_t type, u8 len, const u8 *data);
static void queueTxFrame(const u8 *frame, u16 len);
static uint32_t enterCritical();
static void exitCritical(uint32_t primask);