From f1d9ac4e48201016ce85e15fb5fd941b7a875735 Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 19 Aug 2026 14:45:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(vd960DBN):=20SPI=20Flash=20=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=8E=BB=E5=8E=82=E5=95=86=E4=BB=A3=E7=A0=81=E5=88=A4?= =?UTF-8?q?=E6=96=AD=20=E2=80=94=20=E5=85=BC=E5=AE=B9=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E5=8E=82=E5=AE=B6=E5=90=8C=E5=AE=B9=E9=87=8F=E5=9E=8B=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - W25Qxx 宏 0XEF13~17 -> 0X13~17 (去掉厂商前缀, 只留设备 ID) - SPI_Flash_ReadJEDEC_ID() 删除 id[0]!=0xEF||id[1]!=0x40 校验, 直接返回容量码 id[2] (JEDEC 容量码跨厂商标准化, offlog/snapshot 分区判断随之生效) - storage_init() switch 改 Flash_Model & 0xFF 低字节匹配 - 换非华邦芯片 (如 0x1A 厂商) 时识别不再不一致 --- .../OnlyUpdateApp_Peripheral/APP/storage.c | 21 ++++++++------- vd960DBN/docs/devlog.md | 27 +++++++++++++++++++ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c index 8038b6c..e04024e 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/storage.c @@ -19,11 +19,11 @@ /* Winbond SPIFalsh ID */ -#define W25Q80 0XEF13 -#define W25Q16 0XEF14 -#define W25Q32 0XEF15 -#define W25Q64 0XEF16 //64Mbit, 8MByte -#define W25Q128 0XEF17 +#define W25Q80 0X13 // device ID only, no vendor code +#define W25Q16 0X14 +#define W25Q32 0X15 +#define W25Q64 0X16 //64Mbit, 8MByte +#define W25Q128 0X17 /* Winbond SPIFalsh Instruction List */ #define W25X_WriteEnable 0x06 @@ -228,8 +228,10 @@ u16 SPI_Flash_ReadID(void) /********************************************************************* * @fn SPI_Flash_ReadJEDEC_ID * - * @brief Read JEDEC ID (0x9F). Return 3rd byte (device id). - * W25Q32=0x16 Q64=0x17 Q128=0x18 Q256=0x19; 0 if not Winbond. + * @brief Read JEDEC ID (0x9F). Return 3rd byte (capacity code). + * W25Q32=0x16 Q64=0x17 Q128=0x18 Q256=0x19. + * 2026-08-19: no vendor code check (id[0]/id[1]) - compatible + * with other vendors same-capacity parts. * * @return device id byte */ @@ -244,7 +246,8 @@ uint8_t SPI_Flash_ReadJEDEC_ID(void) id[2] = SPI1_ReadWriteByte(0xFF); GPIO_WriteBit(GPIOA, GPIO_Pin_4, 1); - if (id[0] != 0xEF || id[1] != 0x40) return 0; + /* 2026-08-19: no vendor code check - JEDEC capacity code (id[2]) + is standardized across vendors (e.g. 0x16=32Mbit for ISSI/GD too) */ return id[2]; } @@ -505,7 +508,7 @@ void storage_init(void) SPI_Flash_Init(); uint16_t Flash_Model = SPI_Flash_ReadID(); - switch(Flash_Model) + switch(Flash_Model & 0xFF) /* device ID low byte only, no vendor check */ { case W25Q80: PRINT("W25Q80 OK!\r\n"); break; case W25Q16: PRINT("W25Q16 OK!\r\n"); break; diff --git a/vd960DBN/docs/devlog.md b/vd960DBN/docs/devlog.md index 44aadba..0e0ee9e 100644 --- a/vd960DBN/docs/devlog.md +++ b/vd960DBN/docs/devlog.md @@ -4,6 +4,32 @@ > > 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接 +## 2026-08-19 — SPI Flash 识别去掉厂商代码判断(兼容多厂家同容量型号) + +### 背景 + +`SPI_Flash_ReadID()`(0x90 指令)返回 `0xEF15`(华邦:厂商 0xEF + 设备 ID 0x15),`SPI_Flash_ReadJEDEC_ID()`(0x9F 指令)返回 3 字节(0xEF 0x40 0x16)。原代码在 JEDEC 读取处硬编码校验 `id[0]==0xEF && id[1]==0x40`,且 `W25Qxx` 宏含 `0XEF` 厂商前缀——换其他厂家同容量型号(如 0x1A 开头)时识别不一致。 + +### 变更(storage.c,GBK+CRLF 保持原编码) + +| 位置 | 改动 | +|------|------| +| `W25Q80~W25Q128` 宏 | `0XEF13~0XEF17` → `0X13~0X17`(去掉厂商前缀,只留设备 ID) | +| `SPI_Flash_ReadJEDEC_ID()` | 删除 `if (id[0] != 0xEF \|\| id[1] != 0x40) return 0;`,直接 `return id[2];`(JEDEC 容量码跨厂商标准化:0x16=32Mbit 等) | +| `storage_init()` | `switch(Flash_Model)` → `switch(Flash_Model & 0xFF)`(只匹配设备 ID 低字节) | + +### 验证 + +- `check_c_balance.py` OK;`gcc -fsyntax-only` 无新错误(仅原有 unused warning) +- 逻辑说明:真正决定分区容量的是 offlog/snapshot 用 `SPI_Flash_ReadJEDEC_ID()` 容量码(0x16/0x17/0x18/0x19)匹配 `OFFLOG_CHIP_*`——这部分本来就不含厂商判断,随本次一并生效 + +### 遗留 + +- `/* Winbond SPIFalsh ID */` 历史注释未改(宏已不限于 Winbond,后续可顺手更新) +- 待板级:换非华邦同容量芯片实测识别 + +--- + ## 2026-08-19 — UART2 RX DMA 下 BLE→Loop OTA 失效修复:0x9F 帧透传回 BLE ### 背景 @@ -1416,6 +1442,7 @@ TCP 超时要等 ~2 分钟才触发 `SINT_STAT_TIM_OUT`, | 版本 | 时间 | 说明 | |------|------|------| +| V4.5 | 2026-08-19 | SPI Flash 识别去厂商代码: W25Qxx 宏去 0XEF 前缀, ReadJEDEC_ID 删厂商校验, storage_init 低字节匹配 (兼容多厂家) | | V4.4 | 2026-08-19 | UART2 DMA 下 BLE→Loop OTA 修复: lup_feed_byte_ota 0x9F 帧解析+透传回 BLE (停等 ACK), DMA poll OTA 模式切换/溢出阈值/tick 归零, 单测 8 例 | | V4.3 | 2026-08-18 | log_query 改 hex 原始字节上报 (协议 V1.03/V1.07 修订): offlog_evt_to_hex/snap_rec_to_hex, 2 条快照 406B<800B, 快照 count 恢复 2 | | V4.2 | 2026-08-18 | MQTT 命令集补齐: ssc_net_query/iot_net_query/iot_topic_query 只读组包 (协议 V1.02 对齐), 工具禁用未实现按钮 |