- 添加sendBackup方法用于在备份APP激活时发送确认消息 - 优化OTA跳转逻辑,在jumpToApplication中清除复位标志 - 修复move_app_data函数中数据源地址错误,从备份区域正确读取数据 - 在OTA流程中正确设置APP状态标志,确保应用验证状态管理 refactor(can): 清理调试代码和函数签名优化 - 移除调试用的printf语句和未使用的cstdio头文件 - 统一函数参数类型为u8和u32,提高代码一致性 - 优化CAN通信检查逻辑,移除冗余的调试输出 perf(ota): 优化OTA处理中的延时函数 - 将delay_1ms(1)改为delay_1us(100),提高延时精度 - 添加微秒级延时函数delay_1us实现 - 增加OTA超时时间从10秒到100秒 fix(ota): 修复OTA状态管理和错误处理 - 在各种错误情况下正确设置ota_state为OTA_STATE_IDLE - 在eraseApplicationArea中正确初始化APP状态标志 - 添加CRC校验失败时的调试输出选项 - 修复数据包大小验证逻辑
60 lines
2.2 KiB
C++
60 lines
2.2 KiB
C++
#ifndef __CONFIG_H__
|
|
#define __CONFIG_H__
|
|
#include "stdint.h"
|
|
|
|
#define EEPDEBUG 0
|
|
#define DEBUG_OTA 0
|
|
#define CAN_DEBUG 0
|
|
|
|
// Flash分区配置
|
|
constexpr u32 BOOTLOADER_SIZE = 0x4000; // 16KB
|
|
constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; // BOOT起始地址
|
|
constexpr u32 APPLATEST_START_ADDR = 0x08011000; // APP起始地址
|
|
constexpr u32 APPBACK_START_ADDR = 0x08005000; // APPBACK起始地址
|
|
constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB
|
|
constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB
|
|
|
|
|
|
// BOOT 相关
|
|
constexpr u32 OTA_CONFIG_NUM = 6;
|
|
constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801D000; // 最新APP可用地址
|
|
constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801D004; // 备份APP可用地址
|
|
constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801D008; // 最新APP激活
|
|
constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801D00C; // 备份APP激活
|
|
constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801D010; // 最新APP校验
|
|
constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801D014; // 备份APP校验
|
|
constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;
|
|
constexpr u32 OTA_AVAL = 0x00000000; // 全零表示可用
|
|
constexpr u32 FLASH_EEPROM_OK = 0;
|
|
constexpr u32 FLASH_EEPROM_ERROR = 1;
|
|
|
|
// CANFD配置
|
|
constexpr u32 CANFD_OTA_REQ_ID = 0x00000100;
|
|
constexpr u32 CANFD_OTA_DATA_ID = 0x00000101;
|
|
constexpr u32 CANFD_OTA_ACK_ID = 0x00000102;
|
|
constexpr u32 CANFD_OTA_WAIT_ID = 0x00000103;
|
|
constexpr u32 CANFD_OTA_CANCEL_ID = 0x00000000;
|
|
|
|
// 设备唯一ID寄存器地址 (GD32C10x系列)
|
|
constexpr u32 DEVICE_SERIAL_ADDR_MSB = 0x1FFFF7E8; // 最高32位
|
|
constexpr u32 DEVICE_SERIAL_ADDR_MID = 0x1FFFF7EC; // 中间32位
|
|
constexpr u32 DEVICE_SERIAL_ADDR_LSB = 0x1FFFF7F0; // 最低32位
|
|
|
|
// CANFD数据段最大64字节,我们用1字节序号 + 48字节数据 + 1字节CRC校验
|
|
constexpr u32 OTA_PACKET_SIZE = 48;
|
|
|
|
// 定义一个联合体类型用于float和byte数组之间的转换
|
|
typedef union {
|
|
u32 u;
|
|
u8 b[4];
|
|
} u32_union_t;
|
|
|
|
// 全局变量(需在安全区域存储)
|
|
constexpr uint8_t K_master[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB,
|
|
0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98,
|
|
0x76, 0x54, 0x32, 0x10}; // 预置主密钥
|
|
// 其他
|
|
constexpr u32 OTA_TIMEOUT = 100000;
|
|
constexpr u8 SIZE_U32 = sizeof(uint32_t);
|
|
constexpr u8 SIZE_FLOAT = sizeof(float);
|
|
#endif |