feat(canfd): 添加收发器静默模式支持和SPI命令接口

添加了CAN FD收发器静默模式功能,允许通过硬件引脚控制发送使能:
- 新增setTxSilent/isTxSilent接口控制TCAN1057收发器Silent模式
- 静默时驱动器关断但接收机继续工作,支持只听不发场景
- 添加SPI命令0xC8用于ESP32远程控制静默模式切换
- 在总线状态位图中增加bit5表示静默状态
- 新增canBusyWaitUs函数用于ISR安全的微秒延时

fix(esc_lan9252): 改进warm jump后LAN9252探测逻辑

修复warm jump导致的LAN9252初始化问题:
- 识别warm jump后芯片非POR状态(idx0!=0x1234)的情况
- 自动补发硬件复位对齐到POR状态后再进行正常探测
- 改进调试信息输出,区分POR状态和warm jump残值情况
- 修正失败路径的复位标志初始化逻辑

refactor(spi): 整理SPI命令文件结构

调整SPI命令相关文件的组织结构:
- 移动诊断相关文件到更合适的位置
- 重新整理SPI命令处理文件的分组
This commit is contained in:
cbb
2026-10-10 02:25:56 +08:00
parent a777be1cb4
commit f3d7fc0c30
13 changed files with 1247 additions and 105 deletions
+33 -7
View File
@@ -48,8 +48,28 @@ constexpr uint8_t CONFIG_MOTOR_MAX_NODES = 9U;
/** @brief 电机离线判定超时 (ms)。超过此时间未收到 STATUS 帧则标记 offline。 */
constexpr uint16_t CONFIG_MOTOR_OFFLINE_MS = 3000U;
/** @brief SPI 命令逐帧日志(#if)。开启后仅异常路径输出
* (非v2帧/未知type/SEQ跳变/session不匹配),正常状态 UART 静默。 */
#define CONFIG_SPI_APP_LOG_ENABLE 1
* (非v2帧/未知type/SEQ跳变/session不匹配),正常状态 UART 静默。
* @note 2026-10-09 置 0:SPI 联调已结束,USART0 不再打印逐帧明细。
* 排查时改回 1;异常现场数据仍可通过 0xA4 快照读回(check_spi_diag.py),
* 因为 CONFIG_SPI_DIAG_ENABLE 仍为 1,计数器与现场快照照常记录。 */
#define CONFIG_SPI_APP_LOG_ENABLE 0
/**
* @brief SPI 链路全量硬件与协议诊断总开关 (0=发布/关闭, 1=开启)。
* @note 【一键发布开关】:
* - 0 (发布模式): 彻底裁剪 0xA4 诊断指令与 Handler 注册,清空诊断内存占用,
* 关闭中断与事务中的所有计数/现场快照记录,完全静默 USART0 诊断输出(零 CPU/RAM/Flash 开销)。
* - 1 (调试/诊断模式): 开启 CS/时序/硬件寄存器/SOF偏移/CRC错误统计、现场快照及 0xA4 查询支持。
* 发布固件时,将此处改为 0 即可一键关闭全部诊断功能并重新编译。
* 当前保持 1:只静默串口输出(见下 PERIODIC_PRINT),保留 0xA4 远程查询能力。
*/
#define CONFIG_SPI_DIAG_ENABLE 1
/**
* @brief SPI 诊断 USART0 周期打印开关 (仅在 CONFIG_SPI_DIAG_ENABLE=1 时生效)。
* @note 0=静默串口周期输出 (仍保留 0xA4 远程查询与现场快照,不刷屏);
* 1=每 5s 周期性或异常发生时在 USART0 打印 [SPI-DIAG] 单行摘要。
* 2026-10-09 置 0:按铃超时取消告警同样按本开关裁剪(计数器仍经 SPI_DIAG_RECORD 记账,可 0xA4 读回)。
*/
#define CONFIG_SPI_DIAG_PERIODIC_PRINT 0
/** @brief CAN_SEND 成功帧详细日志(#if)。 */
#define CONFIG_SPI_CAN_SEND_VERBOSE_LOG 0
/** @brief CAN-FD BRS 使能(canfd.cpp #if)。
@@ -155,8 +175,8 @@ constexpr uint32_t CONFIG_CAN_QUIET_AFTER_SEC = 10U;
* APP 固件版本号
* ============================================================ */
constexpr uint32_t APP_FW_VERSION_MAJOR = 1U;
constexpr uint32_t APP_FW_VERSION_MINOR = 6U;
constexpr uint32_t APP_FW_VERSION_PATCH = 51U; /* 1.6.50: CAN 空通道自动识别与降噪 */
constexpr uint32_t APP_FW_VERSION_MINOR = 7U;
constexpr uint32_t APP_FW_VERSION_PATCH = 2U; /* 1.7.2: CAN 通道收发器 Silent(只听不发)——S 脚 API + 0xC8 命令 + 0xC1 bus_state bit5;静默期发送入口回 0xE6 且不计错误 */
constexpr uint32_t APP_FW_VERSION_BUILD = 0U;
@@ -209,11 +229,17 @@ constexpr uint16_t CONFIG_SPI_LOG_BUF_SIZE = 256U;
constexpr uint32_t CONFIG_SPI_RING_TIMEOUT_MS = 50U;
/** @brief SPI 命令 handler 注册表容量。
*
* 当前 init 注册 12 个:boot_request / ota_wait / ping / init_status / can_bridge /
* can_burst / can_feedback / id_snapshot / adc_feedback / motor_state / motor_ota / exmc_diag。
* 当前 init 注册 13 个:boot_request / ota_wait / ping / init_status / can_bridge /
* can_burst / can_feedback / id_snapshot / adc_feedback / motor_state / motor_ota /
* exmc_diag / spi_diag。1.7.2 的 0xC8(CAN Silent)复用 can_feedback handler
* 多加一个 frame_type,不占新槽位。
* registerHandler 表满时静默丢弃,motor_ota 曾因容量=8 被丢弃(0xD0 回 0xEE)。
* 取 14 留余量;新增 handler 时须确认本容量足够。 */
* 新增 handler 时须确认本容量足够。 */
#if (CONFIG_SPI_DIAG_ENABLE != 0)
constexpr uint8_t CONFIG_SPI_MAX_COMMANDS = 16U;
#else
constexpr uint8_t CONFIG_SPI_MAX_COMMANDS = 14U;
#endif
/** @brief GD32 APP 版本(HELLO_ACK/PING 身份块;改功能后请递增便于现场核对)。 */
/* 版本号在 app_spi_cmd_ping.cpp fillGd32AppIdentityPayload 维护 */
/** @brief 每通道不重复 ID 快照表最大条目数(与 ESP32 CANFD_ID_SNAPSHOT_MAX 对齐)。 */