fix(vd960DBN): SPI Flash 识别去厂商代码判断 — 兼容其他厂家同容量型号
- 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 厂商) 时识别不再不一致
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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 对齐), 工具禁用未实现按钮 |
|
||||
|
||||
Reference in New Issue
Block a user