feat(ota): 实现安全OTA更新协议支持AES加密和CRC校验
- 添加AES128加密解密功能支持安全固件传输 - 实现基于随机数握手的安全会话密钥协商机制 - 集成CRC32带密钥校验确保数据完整性 - 重构OTA状态机支持握手、数据传输和验证流程 - 添加CANFD数据长度规范处理和安全跳转逻辑 - 移除调试打印语句优化性能 refactor(can): 优化CANFD发送和OTA确认处理逻辑 - 重构CANFD_AsyncSend函数支持规范数据长度 - 重命名sendACK为sendDATA_ACK并添加重载函数 - 修复数据长度处理和缓冲区填充逻辑 - 优化CAN消息发送的数据复制和验证流程 - 移除未使用的联合体类型定义 chore(project): 添加AES加密模块和系统初始化配置 - 在项目配置中添加AES128加密解密文件 - 在main.cpp中初始化CRC外设模块 - 添加安全十六进制打印调试函数 - 集成AES加密库到OTA处理流程中 - 优化系统时钟初始化配置
This commit is contained in:
+28
-1
@@ -2,9 +2,12 @@
|
||||
#define __CONFIG_H__
|
||||
#include "stdint.h"
|
||||
|
||||
#define EEPDEBUG 0
|
||||
#define DEBUG_OTA 0
|
||||
|
||||
// Flash分区配置
|
||||
constexpr u32 BOOTLOADER_SIZE = 0x4000; // 16KB
|
||||
constexpr u32 APP_START_ADDR = 0x08004000; // APP起始地址
|
||||
constexpr u32 APP_START_ADDR = 0x08010000; // APP起始地址 0x08004000
|
||||
constexpr u32 APP2_START_ADDR = 0x08010000; // APP2起始地址
|
||||
constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB
|
||||
constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB
|
||||
@@ -15,6 +18,11 @@ constexpr u32 CANFD_OTA_DATA_ID = 0x00000101;
|
||||
constexpr u32 CANFD_OTA_ACK_ID = 0x00000102;
|
||||
constexpr u32 CANFD_OTA_WAIT_ID = 0x00000103;
|
||||
|
||||
// 设备唯一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;
|
||||
typedef struct {
|
||||
@@ -23,4 +31,23 @@ typedef struct {
|
||||
u32 crc32; // 简单校验
|
||||
} canfd_ota_packet_t;
|
||||
|
||||
// 定义一个联合体类型用于float和byte数组之间的转换
|
||||
typedef union {
|
||||
u32 u;
|
||||
u8 b[4];
|
||||
} u32_union_t;
|
||||
|
||||
// 添加辅助函数用于从u8数组中解包float类型数据
|
||||
static inline u32_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) {
|
||||
u32_union_t u32_union;
|
||||
u32_union.b[0] = buffer[offset];
|
||||
u32_union.b[1] = buffer[offset + 1];
|
||||
u32_union.b[2] = buffer[offset + 2];
|
||||
u32_union.b[3] = buffer[offset + 3];
|
||||
return u32_union;
|
||||
}
|
||||
// 其他
|
||||
constexpr u32 OTA_TIMEOUT = 10000;
|
||||
constexpr u8 SIZE_U32 = sizeof(uint32_t);
|
||||
constexpr u8 SIZE_FLOAT = sizeof(float);
|
||||
#endif
|
||||
Reference in New Issue
Block a user