开机根据nand器件ID选用相应配置 2387/1 2387/head 2388/target/1
authorpenglei <1624952103@qq.com>
Wed, 24 Sep 2025 09:49:15 +0000 (17:49 +0800)
committerpenglei <1624952103@qq.com>
Wed, 24 Sep 2025 09:49:15 +0000 (17:49 +0800)
code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h
code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_xt26q02d.h
code/sdk/bootloader/flashboot/brandy/nandflash/nandflash_config.c
code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h
code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_xt26q02d.h
code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c
code/sdk/zhihui/utils/custom_utils.c

index 4bd6035..7db553a 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-09-05 09:29:03\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2025-09-24 17:44:34\r
+ * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_f35uqa001g.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 /*\r
  * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.\r
  * Description:  NON-OS NANDFLASH DRIVER\r
@@ -12,7 +20,7 @@
 #define F35UQA001G_BYTES_PER_OOB   64\r
 #define F35UQA001G_PAGES_PER_BLOCK 64\r
 #define F35UQA001G_TOTAL_BLOCKS    1024\r
-#define F35UQA001G_CHIP_ID         0x6161\r
+#define F35UQA001G_CHIP_ID         0xCD61\r
 #define F35UQA001G_OOB_TOTAL_LEN   4\r
 #define F35UQA001G_OOB_PER_SIZE    8\r
 #define F35UQA001G_OOB_1_OFFSET    0\r
index a863020..44e159c 100644 (file)
@@ -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
index 3b8ee08..1a452b0 100644 (file)
 \r
 uint32_t g_nandflash_init = 1;\r
 \r
+// CHIP ID到驱动结构体的映射表\r
+typedef struct {\r
+    uint16_t chip_id;\r
+    struct nand_driver_struct *driver;\r
+    const char *name;\r
+} nand_chip_mapping_t;\r
+\r
+static const nand_chip_mapping_t nand_chip_mappings[] = {\r
+    {DS35X1G_CHIP_ID,    &g_ds35x1g_driver,    "DS35X1G"},\r
+    {F35UQA001G_CHIP_ID, &g_f35uqa001g_driver, "F35UQA001G"},\r
+    {GD5F2GM7RE_CHIP_ID, &g_gd5f2gm7re_driver, "GD5F2GM7RE"},\r
+    {XT26Q02D_CHIP_ID,   &g_xt26q02d_driver,   "XT26Q02D"},\r
+};\r
+\r
+#define NAND_CHIP_MAPPINGS_COUNT (sizeof(nand_chip_mappings) / sizeof(nand_chip_mappings[0]))\r
+\r
 struct nand_driver_struct *get_nand_flash(void)\r
 {\r
-    #if defined(NANDFLASH_DS35X) \r
-    return &g_ds35x1g_driver;\r
-    #elif defined(NANDFLASH_F35UQA)\r
-        return &g_f35uqa001g_driver;\r
-    #elif defined(NANDFLASH_GD5F2G)\r
-        return &g_gd5f2gm7re_driver; \r
-    #elif defined(NANDFLASH_XT26Q02D)\r
-        return &g_xt26q02d_driver; \r
-    #else\r
-        return &g_ds35x1g_driver;    \r
-    #endif\r
+    static struct nand_driver_struct *cached_driver = NULL;\r
+    \r
+    // 如果已经缓存了驱动,直接返回\r
+    if (cached_driver != NULL) {\r
+        return cached_driver;\r
+    }\r
+    \r
+    // 初始化NAND驱动硬件\r
+    nand_driver_init(SPEED_MID);\r
+    \r
+    // 读取CHIP ID\r
+    uint16_t chip_id = 0;\r
+    qspi_data_type_def qspi_data = {0};\r
+    qspi_data.instruction = CMD_FLASH_ID;\r
+    \r
+    chip_id = read_id(&qspi_data);\r
+    \r
+    // 根据CHIP ID查找对应的驱动\r
+    for (uint32_t i = 0; i < NAND_CHIP_MAPPINGS_COUNT; i++) {\r
+        if (nand_chip_mappings[i].chip_id == chip_id) {\r
+            cached_driver = nand_chip_mappings[i].driver;\r
+            return cached_driver;\r
+        }\r
+    }\r
+    \r
+    // 如果没有找到匹配的CHIP ID,使用默认驱动\r
+    cached_driver = &g_ds35x1g_driver;\r
+    return cached_driver;\r
+\r
+//     #if defined(NANDFLASH_DS35X) \r
+//     return &g_ds35x1g_driver;\r
+//     #elif defined(NANDFLASH_F35UQA)\r
+//         return &g_f35uqa001g_driver;\r
+//     #elif defined(NANDFLASH_GD5F2G)\r
+//         return &g_gd5f2gm7re_driver; \r
+//     #elif defined(NANDFLASH_XT26Q02D)\r
+//         return &g_xt26q02d_driver; \r
+//     #else\r
+//         return &g_ds35x1g_driver;    \r
+//     #endif\r
 }\r
 \r
 void nandflash_qspi_init(void)\r
index 4bd6035..4474fb5 100644 (file)
@@ -1,3 +1,11 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2025-09-05 09:29:08\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2025-09-24 17:44:19\r
+ * @FilePath: /FD230/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_f35uqa001g.h\r
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
+ */\r
 /*\r
  * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.\r
  * Description:  NON-OS NANDFLASH DRIVER\r
@@ -12,7 +20,7 @@
 #define F35UQA001G_BYTES_PER_OOB   64\r
 #define F35UQA001G_PAGES_PER_BLOCK 64\r
 #define F35UQA001G_TOTAL_BLOCKS    1024\r
-#define F35UQA001G_CHIP_ID         0x6161\r
+#define F35UQA001G_CHIP_ID         0xCD61\r
 #define F35UQA001G_OOB_TOTAL_LEN   4\r
 #define F35UQA001G_OOB_PER_SIZE    8\r
 #define F35UQA001G_OOB_1_OFFSET    0\r
index 31b2ab0..d6ec849 100644 (file)
@@ -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
index 315a40e..7ed601f 100644 (file)
@@ -59,19 +59,68 @@ static const char * const g_volume_names[YF_VOLUMES_NUM] = { YF_NAME_STRS };
 struct mtd_info nandflash_freertos_info;\r
 bool get_exception_status(void);\r
 \r
+// CHIP ID到驱动结构体的映射表\r
+typedef struct {\r
+    uint16_t chip_id;\r
+    struct nand_driver_struct *driver;\r
+    const char *name;\r
+} nand_chip_mapping_t;\r
+\r
+static const nand_chip_mapping_t nand_chip_mappings[] = {\r
+    {DS35X1G_CHIP_ID,    &g_ds35x1g_driver,    "DS35X1G"},\r
+    {F35UQA001G_CHIP_ID, &g_f35uqa001g_driver, "F35UQA001G"},\r
+    {GD5F2GM7RE_CHIP_ID, &g_gd5f2gm7re_driver, "GD5F2GM7RE"},\r
+    {XT26Q02D_CHIP_ID,   &g_xt26q02d_driver,   "XT26Q02D"},\r
+};\r
+\r
+#define NAND_CHIP_MAPPINGS_COUNT (sizeof(nand_chip_mappings) / sizeof(nand_chip_mappings[0]))\r
+\r
 struct nand_driver_struct *get_nand_flash(void)\r
 {\r
-    #if defined(NANDFLASH_DS35X) \r
-    return &g_ds35x1g_driver;\r
-    #elif defined(NANDFLASH_F35UQA)\r
-        return &g_f35uqa001g_driver;\r
-    #elif defined(NANDFLASH_GD5F2G)\r
-        return &g_gd5f2gm7re_driver; \r
-    #elif defined(NANDFLASH_XT26Q02D)\r
-        return &g_xt26q02d_driver; \r
-    #else\r
-        return &g_ds35x1g_driver;    \r
-    #endif\r
+    static struct nand_driver_struct *cached_driver = NULL;\r
+    \r
+    // 如果已经缓存了驱动,直接返回\r
+    if (cached_driver != NULL) {\r
+        return cached_driver;\r
+    }\r
+    \r
+    // 初始化NAND驱动硬件\r
+    nand_driver_init(SPEED_MID);\r
+    \r
+    // 读取CHIP ID\r
+    uint16_t chip_id = 0;\r
+    qspi_data_type_def qspi_data = {0};\r
+    qspi_data.instruction = CMD_FLASH_ID;\r
+    \r
+    chip_id = read_id(&qspi_data);\r
+    \r
+    PRINT("检测到NAND Flash CHIP ID: 0x%04X\r\n", chip_id);\r
+    \r
+    // 根据CHIP ID查找对应的驱动\r
+    for (uint32_t i = 0; i < NAND_CHIP_MAPPINGS_COUNT; i++) {\r
+        if (nand_chip_mappings[i].chip_id == chip_id) {\r
+            cached_driver = nand_chip_mappings[i].driver;\r
+            PRINT("选择NAND Flash驱动: %s\r\n", nand_chip_mappings[i].name);\r
+            return cached_driver;\r
+        }\r
+    }\r
+    \r
+    // 如果没有找到匹配的CHIP ID,使用默认驱动\r
+    PRINT("未找到匹配的CHIP ID 0x%04X,使用默认驱动 DS35X1G\r\n", chip_id);\r
+    cached_driver = &g_ds35x1g_driver;\r
+    return cached_driver;\r
+\r
+//     #if defined(NANDFLASH_DS35X) \r
+//     return &g_ds35x1g_driver;\r
+//     #elif defined(NANDFLASH_F35UQA)\r
+//         return &g_f35uqa001g_driver;\r
+//     #elif defined(NANDFLASH_GD5F2G)\r
+//         return &g_gd5f2gm7re_driver; \r
+//     #elif defined(NANDFLASH_XT26Q02D)\r
+//         return &g_xt26q02d_driver; \r
+//     #else\r
+//         return &g_ds35x1g_driver;    \r
+//     #endif\r
 }\r
 \r
 static int formate_filesystem(uint32_t total_block_num)\r
index ed55aeb..8c4f50f 100644 (file)
@@ -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);