feat(vd960DBN): 事件日志区动态分区 — JEDEC ID 选档 (ROADMAP 落地)
- offlog.h: OfflogPart 运行时分区表 + g_offlog_part; AREA_BASE 改 0x090000 (参数64KB+OTA512KB); 容量宏展开为运行时值(主体零改动) - offlog.c: offlog_part_detect() 读 JEDEC ID → 事件区容量 W25Q32=512KB/16256条, Q64=1MB/32640, Q128=2MB/65408, Q256=4MB/130944 - storage.c/h: SPI_Flash_ReadJEDEC_ID() (0x9F, 校验 EF 40) - 旧固件事件区 0x010000 自动废弃(新地址无 magic → 重建), 预期行为 - 测试: mock JEDEC=0x16 + g_offlog_part, 15 例全过 - 文档: BLE/MQTT/TCP 协议 capacity 8064→动态, 交互示例, devlog
This commit is contained in:
@@ -28,9 +28,39 @@ static uint32_t _wr_off; /* 下一条记录写入的绝对地址
|
||||
static uint16_t _wr_sector; /* 当前写扇区号 (区内 1..63) */
|
||||
static uint32_t _wr_seq; /* 下一条记录的全局 seq */
|
||||
static uint16_t _boot_seq; /* 当前 boot 序号 */
|
||||
static uint32_t _count; /* 有效记录数 (0..8064) */
|
||||
static uint32_t _count; /* 有效记录数 (0..max_records) */
|
||||
static uint8_t _ready; /* init 完成标志 */
|
||||
|
||||
/*===========================================================================
|
||||
* 运行时分区表 (ROADMAP 2026-08-12: 上电读 JEDEC ID 决定事件区容量)
|
||||
*===========================================================================*/
|
||||
OfflogPart g_offlog_part = {
|
||||
OFFLOG_CHIP_W25Q32, /* 默认 */
|
||||
0x80000UL, /* 512KB */
|
||||
127, /* (512KB/4096) - 1 头扇区 */
|
||||
16256, /* 127 * 128 */
|
||||
};
|
||||
|
||||
/* 读 JEDEC ID → 填分区表。未知芯片按 W25Q32 兜底 (与 storage_init 打印对照) */
|
||||
static void offlog_part_detect(void)
|
||||
{
|
||||
uint8_t dev = SPI_Flash_ReadJEDEC_ID();
|
||||
uint32_t size = 0x80000UL;
|
||||
uint8_t chip = OFFLOG_CHIP_W25Q32;
|
||||
|
||||
switch (dev) {
|
||||
case OFFLOG_CHIP_W25Q32: size = 0x80000UL; break; /* 512KB */
|
||||
case OFFLOG_CHIP_W25Q64: size = 0x100000UL; break; /* 1MB */
|
||||
case OFFLOG_CHIP_W25Q128: size = 0x200000UL; break; /* 2MB */
|
||||
case OFFLOG_CHIP_W25Q256: size = 0x400000UL; break; /* 4MB */
|
||||
default: chip = OFFLOG_CHIP_W25Q32; break; /* 未知→默认 */
|
||||
}
|
||||
g_offlog_part.chip = chip;
|
||||
g_offlog_part.area_size = size;
|
||||
g_offlog_part.data_sectors = (size / 4096UL) - 1;
|
||||
g_offlog_part.max_records = g_offlog_part.data_sectors * OFFLOG_EVT_PER_SECTOR;
|
||||
}
|
||||
|
||||
/*===========================================================================
|
||||
* 基础读写
|
||||
*===========================================================================*/
|
||||
@@ -106,6 +136,7 @@ void offlog_init(void)
|
||||
{
|
||||
OfflogHead h;
|
||||
|
||||
offlog_part_detect(); /* JEDEC ID → 事件区容量 (W25Q32/Q64/Q128/Q256) */
|
||||
memset(&h, 0xFF, sizeof(h));
|
||||
offlog_head_read(&h);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user