+/*\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
#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
* @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
*/
#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
\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
+/*\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
#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
* @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
*/
#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
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
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);