feat(core): 升级固件至v0.4.1并增加GD32初始化状态监控功能
- 修复GD32 OTA中继全程ring抑制问题:handleIdle起点reset()曾立即解除 taskEntry设置的suppressRingService(true),导致中继全程worker偷读OTA ACK/WAIT - 增加reset(bool release_ring_suppress)参数控制ring抑制释放时机 - 新增GD32 APP初始化状态可视化功能(配套GD32 1.5.34+): * 通过SPI 0xA3查询模块位图/关键失败位图/复位源 * /system/status接口新增gd32_init字段提供状态详情 * 支持故障码数组显示,前端可直接显示中文失败原因 - 添加GD32模块级故障码支持(配套GD32 1.5.36): * 解析INIT_STATUS响应中的fault_codes数组 * 每模块1B故障码,支持CANFD通道号显示 - 电机状态协议升级:STATUS DLC从32字节扩展到48字节, 二进制协议版本升级到v2,entry大小从76字节变为92字节 - 修复SPI响应类型表,将0xA3加入短响应和APP ISR快速响应类型
This commit is contained in:
@@ -65,9 +65,10 @@ bool onMotorStateEvent(const uint8_t *payload, size_t len)
|
||||
slot.rx_count = rdU32Le(&e[4]);
|
||||
slot.seq = rdU32Le(&e[8]);
|
||||
memcpy(slot.data, &e[12], MOTOR_STATUS_DLC);
|
||||
slot.config_rx_count = rdU32Le(&e[44]);
|
||||
slot.config_seq = rdU32Le(&e[48]);
|
||||
memcpy(slot.config_data, &e[52], MOTOR_CONFIG_DLC);
|
||||
/* v0.74: STATUS DLC 48,CONFIG 字段整体后移 16B */
|
||||
slot.config_rx_count = rdU32Le(&e[60]);
|
||||
slot.config_seq = rdU32Le(&e[64]);
|
||||
memcpy(slot.config_data, &e[68], MOTOR_CONFIG_DLC);
|
||||
|
||||
offset += MOTOR_ENTRY_SIZE;
|
||||
}
|
||||
|
||||
@@ -6,12 +6,15 @@
|
||||
*
|
||||
* payload 格式(每页):
|
||||
* [0] page, [1] total_pages, [2] entry_count, [3] active_count
|
||||
* [4..] 每个 entry 76B:
|
||||
* [4..] 每个 entry 92B (v0.74: STATUS DLC 48):
|
||||
* [0] node_id, [1] channel, [2] online, [3] dlc,
|
||||
* [4..7] rx_count (LE), [8..11] seq (LE),
|
||||
* [12..43] data[32] (原始 STATUS payload)
|
||||
* [44..47] config_rx_count (LE), [48..51] config_seq (LE),
|
||||
* [52..75] config_data[24] (原始 CONFIG payload, 目标值回报)
|
||||
* [12..59] data[48] (原始 STATUS payload, 字节 32~35 = InitStatus)
|
||||
* [60..63] config_rx_count (LE), [64..67] config_seq (LE),
|
||||
* [68..91] config_data[24] (原始 CONFIG payload, 目标值回报)
|
||||
*
|
||||
* 注意:STATUS DLC 48 与页大小/页数变更(76→92、9→14 页)需 DCU GD32 与
|
||||
* ESP32 固件成对升级,旧解析方会因长度校验失败拒收(不误解析)。
|
||||
*
|
||||
* 同一节点号可能同时挂在多个 CAN 通道(两台电机同号异线),
|
||||
* 缓存表与 GD32 端一致按 node×channel 双键存储(27 槽)。
|
||||
@@ -30,18 +33,18 @@ extern "C" {
|
||||
#define MOTOR_MAX_NODES 9
|
||||
#define MOTOR_CHANNELS 3
|
||||
#define MOTOR_MAX_SLOTS (MOTOR_MAX_NODES * MOTOR_CHANNELS)
|
||||
#define MOTOR_STATUS_DLC 32
|
||||
#define MOTOR_STATUS_DLC 48
|
||||
#define MOTOR_CONFIG_DLC 24
|
||||
#define MOTOR_ENTRY_SIZE 76
|
||||
#define MOTOR_ENTRY_SIZE 92
|
||||
#define MOTOR_PAGE_HEADER 4
|
||||
#define MOTOR_TOTAL_PAGES 9
|
||||
#define MOTOR_TOTAL_PAGES 14
|
||||
|
||||
/** @brief 单电机状态快照。 */
|
||||
typedef struct {
|
||||
uint8_t node_id; ///< 1-9, 0=空槽
|
||||
uint8_t channel; ///< CAN 通道 (0/1/2)
|
||||
uint8_t online; ///< 1=在线, 0=离线
|
||||
uint8_t dlc; ///< STATUS 帧 DLC (正常=32)
|
||||
uint8_t dlc; ///< STATUS 帧 DLC (正常=48)
|
||||
uint32_t rx_count; ///< 累计收到帧数
|
||||
uint32_t seq; ///< GD32 侧更新序号
|
||||
uint8_t data[MOTOR_STATUS_DLC]; ///< 原始 STATUS payload
|
||||
|
||||
Reference in New Issue
Block a user