From 483e20b7962e0d3fa9cd49ad34725fc3064c7d7b Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Wed, 24 Sep 2025 17:49:15 +0800 Subject: [PATCH] =?utf8?q?=E5=BC=80=E6=9C=BA=E6=A0=B9=E6=8D=AEnand?= =?utf8?q?=E5=99=A8=E4=BB=B6ID=E9=80=89=E7=94=A8=E7=9B=B8=E5=BA=94?= =?utf8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nandflash/include/nandflash_f35uqa001g.h | 10 ++- .../nandflash/include/nandflash_xt26q02d.h | 4 +- .../brandy/nandflash/nandflash_config.c | 67 ++++++++++++++--- .../nand/include/nandflash_f35uqa001g.h | 10 ++- .../nand/include/nandflash_xt26q02d.h | 4 +- .../driver/nand_flash/nand/nandflash_config.c | 71 ++++++++++++++++--- code/sdk/zhihui/utils/custom_utils.c | 4 +- 7 files changed, 140 insertions(+), 30 deletions(-) diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h index 4bd60359f..7db553a5d 100644 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-09-05 09:29:03 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-09-24 17:44:34 + * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ /* * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved. * Description: NON-OS NANDFLASH DRIVER @@ -12,7 +20,7 @@ #define F35UQA001G_BYTES_PER_OOB 64 #define F35UQA001G_PAGES_PER_BLOCK 64 #define F35UQA001G_TOTAL_BLOCKS 1024 -#define F35UQA001G_CHIP_ID 0x6161 +#define F35UQA001G_CHIP_ID 0xCD61 #define F35UQA001G_OOB_TOTAL_LEN 4 #define F35UQA001G_OOB_PER_SIZE 8 #define F35UQA001G_OOB_1_OFFSET 0 diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h index a863020fb..44e159c6a 100644 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2025-09-04 10:28:47 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-09-15 16:59:01 + * @LastEditTime: 2025-09-24 11:39:20 * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -20,7 +20,7 @@ #define XT26Q02D_BYTES_PER_OOB 64 #define XT26Q02D_PAGES_PER_BLOCK 64 #define XT26Q02D_TOTAL_BLOCKS 2048 -#define XT26Q02D_CHIP_ID 0xC882 +#define XT26Q02D_CHIP_ID 0x0B52 #define XT26Q02D_OOB_TOTAL_LEN 4 #define XT26Q02D_OOB_PER_SIZE 8 #define XT26Q02D_OOB_1_OFFSET 0 diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c b/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c index 3b8ee082c..1a452b097 100644 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c @@ -29,19 +29,64 @@ uint32_t g_nandflash_init = 1; +// CHIP ID到驱动结构体的映射表 +typedef struct { + uint16_t chip_id; + struct nand_driver_struct *driver; + const char *name; +} nand_chip_mapping_t; + +static const nand_chip_mapping_t nand_chip_mappings[] = { + {DS35X1G_CHIP_ID, &g_ds35x1g_driver, "DS35X1G"}, + {F35UQA001G_CHIP_ID, &g_f35uqa001g_driver, "F35UQA001G"}, + {GD5F2GM7RE_CHIP_ID, &g_gd5f2gm7re_driver, "GD5F2GM7RE"}, + {XT26Q02D_CHIP_ID, &g_xt26q02d_driver, "XT26Q02D"}, +}; + +#define NAND_CHIP_MAPPINGS_COUNT (sizeof(nand_chip_mappings) / sizeof(nand_chip_mappings[0])) + struct nand_driver_struct *get_nand_flash(void) { - #if defined(NANDFLASH_DS35X) - return &g_ds35x1g_driver; - #elif defined(NANDFLASH_F35UQA) - return &g_f35uqa001g_driver; - #elif defined(NANDFLASH_GD5F2G) - return &g_gd5f2gm7re_driver; - #elif defined(NANDFLASH_XT26Q02D) - return &g_xt26q02d_driver; - #else - return &g_ds35x1g_driver; - #endif + static struct nand_driver_struct *cached_driver = NULL; + + // 如果已经缓存了驱动,直接返回 + if (cached_driver != NULL) { + return cached_driver; + } + + // 初始化NAND驱动硬件 + nand_driver_init(SPEED_MID); + + // 读取CHIP ID + uint16_t chip_id = 0; + qspi_data_type_def qspi_data = {0}; + qspi_data.instruction = CMD_FLASH_ID; + + chip_id = read_id(&qspi_data); + + // 根据CHIP ID查找对应的驱动 + for (uint32_t i = 0; i < NAND_CHIP_MAPPINGS_COUNT; i++) { + if (nand_chip_mappings[i].chip_id == chip_id) { + cached_driver = nand_chip_mappings[i].driver; + return cached_driver; + } + } + + // 如果没有找到匹配的CHIP ID,使用默认驱动 + cached_driver = &g_ds35x1g_driver; + return cached_driver; + +// #if defined(NANDFLASH_DS35X) +// return &g_ds35x1g_driver; +// #elif defined(NANDFLASH_F35UQA) +// return &g_f35uqa001g_driver; +// #elif defined(NANDFLASH_GD5F2G) +// return &g_gd5f2gm7re_driver; +// #elif defined(NANDFLASH_XT26Q02D) +// return &g_xt26q02d_driver; +// #else +// return &g_ds35x1g_driver; +// #endif } void nandflash_qspi_init(void) diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h index 4bd60359f..4474fb58c 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-09-05 09:29:08 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-09-24 17:44:19 + * @FilePath: /FD230/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ /* * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved. * Description: NON-OS NANDFLASH DRIVER @@ -12,7 +20,7 @@ #define F35UQA001G_BYTES_PER_OOB 64 #define F35UQA001G_PAGES_PER_BLOCK 64 #define F35UQA001G_TOTAL_BLOCKS 1024 -#define F35UQA001G_CHIP_ID 0x6161 +#define F35UQA001G_CHIP_ID 0xCD61 #define F35UQA001G_OOB_TOTAL_LEN 4 #define F35UQA001G_OOB_PER_SIZE 8 #define F35UQA001G_OOB_1_OFFSET 0 diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_xt26q02d.h b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_xt26q02d.h index 31b2ab097..d6ec84957 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_xt26q02d.h +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_xt26q02d.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2025-09-04 10:28:47 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-09-15 16:58:55 + * @LastEditTime: 2025-09-24 11:38:51 * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -20,7 +20,7 @@ #define XT26Q02D_BYTES_PER_OOB 64 #define XT26Q02D_PAGES_PER_BLOCK 64 #define XT26Q02D_TOTAL_BLOCKS 2048 -#define XT26Q02D_CHIP_ID 0xC882 +#define XT26Q02D_CHIP_ID 0x0B52 #define XT26Q02D_OOB_TOTAL_LEN 4 #define XT26Q02D_OOB_PER_SIZE 8 #define XT26Q02D_OOB_1_OFFSET 0 diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c index 315a40eb1..7ed601f4f 100644 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c @@ -59,19 +59,68 @@ static const char * const g_volume_names[YF_VOLUMES_NUM] = { YF_NAME_STRS }; struct mtd_info nandflash_freertos_info; bool get_exception_status(void); +// CHIP ID到驱动结构体的映射表 +typedef struct { + uint16_t chip_id; + struct nand_driver_struct *driver; + const char *name; +} nand_chip_mapping_t; + +static const nand_chip_mapping_t nand_chip_mappings[] = { + {DS35X1G_CHIP_ID, &g_ds35x1g_driver, "DS35X1G"}, + {F35UQA001G_CHIP_ID, &g_f35uqa001g_driver, "F35UQA001G"}, + {GD5F2GM7RE_CHIP_ID, &g_gd5f2gm7re_driver, "GD5F2GM7RE"}, + {XT26Q02D_CHIP_ID, &g_xt26q02d_driver, "XT26Q02D"}, +}; + +#define NAND_CHIP_MAPPINGS_COUNT (sizeof(nand_chip_mappings) / sizeof(nand_chip_mappings[0])) + struct nand_driver_struct *get_nand_flash(void) { - #if defined(NANDFLASH_DS35X) - return &g_ds35x1g_driver; - #elif defined(NANDFLASH_F35UQA) - return &g_f35uqa001g_driver; - #elif defined(NANDFLASH_GD5F2G) - return &g_gd5f2gm7re_driver; - #elif defined(NANDFLASH_XT26Q02D) - return &g_xt26q02d_driver; - #else - return &g_ds35x1g_driver; - #endif + static struct nand_driver_struct *cached_driver = NULL; + + // 如果已经缓存了驱动,直接返回 + if (cached_driver != NULL) { + return cached_driver; + } + + // 初始化NAND驱动硬件 + nand_driver_init(SPEED_MID); + + // 读取CHIP ID + uint16_t chip_id = 0; + qspi_data_type_def qspi_data = {0}; + qspi_data.instruction = CMD_FLASH_ID; + + chip_id = read_id(&qspi_data); + + PRINT("检测到NAND Flash CHIP ID: 0x%04X\r\n", chip_id); + + // 根据CHIP ID查找对应的驱动 + for (uint32_t i = 0; i < NAND_CHIP_MAPPINGS_COUNT; i++) { + if (nand_chip_mappings[i].chip_id == chip_id) { + cached_driver = nand_chip_mappings[i].driver; + PRINT("选择NAND Flash驱动: %s\r\n", nand_chip_mappings[i].name); + return cached_driver; + } + } + + // 如果没有找到匹配的CHIP ID,使用默认驱动 + PRINT("未找到匹配的CHIP ID 0x%04X,使用默认驱动 DS35X1G\r\n", chip_id); + cached_driver = &g_ds35x1g_driver; + return cached_driver; + +// #if defined(NANDFLASH_DS35X) +// return &g_ds35x1g_driver; +// #elif defined(NANDFLASH_F35UQA) +// return &g_f35uqa001g_driver; +// #elif defined(NANDFLASH_GD5F2G) +// return &g_gd5f2gm7re_driver; +// #elif defined(NANDFLASH_XT26Q02D) +// return &g_xt26q02d_driver; +// #else +// return &g_ds35x1g_driver; +// #endif } static int formate_filesystem(uint32_t total_block_num) diff --git a/code/sdk/zhihui/utils/custom_utils.c b/code/sdk/zhihui/utils/custom_utils.c index ed55aebdd..8c4f50fe0 100644 --- a/code/sdk/zhihui/utils/custom_utils.c +++ b/code/sdk/zhihui/utils/custom_utils.c @@ -666,12 +666,12 @@ void startup_post_init_task(void) uint16_t delay_time = 1500; if(factory_test_flag) { - snprintf(path, 40, "/user/music/FactoryMode.mp3"); + snprintf(path, 40, "/user/res/music/FactoryMode.mp3"); delay_time = 2000; } else - snprintf(path, 40, "/user/music/PowerOn.mp3"); + snprintf(path, 40, "/user/res/music/PowerOn.mp3"); custom_play_audio(path,100); LOS_Msleep(delay_time); -- 2.17.1