兼容PY25Q128LA NORFLASH 427/2 427/head
authorpenglei <1624952103@qq.com>
Tue, 2 Jul 2024 08:43:38 +0000 (16:43 +0800)
committerpenglei <1624952103@qq.com>
Tue, 2 Jul 2024 08:43:38 +0000 (16:43 +0800)
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/bootloader/flashboot/brandy/main.c
code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h
code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h
code/sdk/include/driver/flash/flash_common_config.h
code/sdk/include/driver/flash/flash_config_info.h
code/sdk/include/driver/flash/flash_others_config.h
code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c
code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c
code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c

index fe7ce2e..e3dd15f 100644 (file)
@@ -181,12 +181,12 @@ extern "C"
             on_time_CallBackProc();\r
         }\r
         // 进入睡眠模式\r
-        if (curTime.tm_hour == ((sleep_time & 0XFFFF0000) >> 16) && curTime.tm_min == (sleep_time & 0X0000FFFF))\r
+        if (curTime.tm_hour == ((sleep_time & 0XFFFF0000) >> 16) && curTime.tm_min == (sleep_time & 0X0000FFFF) && curTime.tm_sec == 0)\r
         {\r
             do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL);\r
         }\r
         // 退出睡眠模式\r
-        if (curTime.tm_hour == ((wake_up_time & 0XFFFF0000) >> 16) && curTime.tm_min == (wake_up_time & 0X0000FFFF))\r
+        if (curTime.tm_hour == ((wake_up_time & 0XFFFF0000) >> 16) && curTime.tm_min == (wake_up_time & 0X0000FFFF) && curTime.tm_sec == 0)\r
         {\r
             do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
         }\r
index 274de4b..6651338 100755 (executable)
@@ -405,7 +405,7 @@ static bool upg_need_upgrade(fota_upgrade_flag_area_t *upg_flag_info)
     if ((errcode_t)uapi_flash_exit_from_xip_mode(0) != ERRCODE_SUCC) {
         goto end;
     }
-    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
         real_read = uapi_flash_read_data_without_align(0, fota_address, (uint8_t *)(upg_flag_info),
         sizeof(fota_upgrade_flag_area_t));
     } else {
index 8a37759..75956db 100755 (executable)
@@ -1,3 +1,13 @@
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2024-06-29 17:26:01\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2024-07-02 16:41:57\r
+ * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h\r
+ * @Description: \r
+ * \r
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. \r
+ */\r
 /*\r
  * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.\r
  * Description:  NON-OS NANDFLASH DRIVER\r
@@ -12,7 +22,7 @@
 #define DS35X1G_BYTES_PER_OOB   64\r
 #define DS35X1G_PAGES_PER_BLOCK 64\r
 #define DS35X1G_TOTAL_BLOCKS    1024\r
-#define DS35X1G_CHIP_ID         0xE521\r
+#define DS35X1G_CHIP_ID         0xE521//0xE521,6161 id 没有check\r
 #define DS35X1G_OOB_TOTAL_LEN   4\r
 #define DS35X1G_OOB_PER_SIZE    8\r
 #define DS35X1G_OOB_1_OFFSET    0\r
index f7e0dfc..2b5c20f 100755 (executable)
@@ -1,3 +1,13 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:26
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 16:42:22
+ * @FilePath: /FD230/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
 /*
  * Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.
  * Description:  NON-OS NANDFLASH DRIVER
@@ -12,7 +22,7 @@
 #define DS35X1G_BYTES_PER_OOB   64
 #define DS35X1G_PAGES_PER_BLOCK 64
 #define DS35X1G_TOTAL_BLOCKS    1024
-#define DS35X1G_CHIP_ID         0xE521
+#define DS35X1G_CHIP_ID         0xE521//0xE521,6161 id 没有check
 #define DS35X1G_OOB_TOTAL_LEN   4
 #define DS35X1G_OOB_PER_SIZE    8
 #define DS35X1G_OOB_1_OFFSET    0
index a9c5b96..d541fa4 100755 (executable)
 #define FLASH_MANUFACTURER_XTX_XT25Q64D          0x17600B
 #define FLASH_MANUFACTURER_XTX_XT25Q128D         0x18600B
 
+#define FLASH_MANUFACTURER_PUYA_PY25Q128LA       0x186585
+
 #define FLASH_CMD_LEN_MAX     4
 
 #define addr_unalign(Addr, Boundary) ((Addr) & ((Boundary) - 1))
@@ -180,6 +182,7 @@ typedef enum flash_support_manufacturer {
     FLASH_XTX_XT25Q128D,
     FLASH_PUYA_P25Q64SL,
     FLASH_MXIC_MX25U256,
+    FLASH_PUYA_PY25Q128LA,
     FLASH_MANUFACTURER_MAX
 } flash_support_manufacturer_t;
 
index 157fb76..51b6421 100755 (executable)
@@ -125,6 +125,10 @@ static const flash_device_parameter_t g_flash_device_parameter[FLASH_MANUFACTURE
       g_puya_p25q32lc_enter_qspi_mode_cmd,        NULL,                               &g_puya_p25q32lc_config },
     { FLASH_MANUFACTURER_MXIC_MX25U256,         FLASH_SIZE_32MB,  0xA5, 0xAA, WAIT_CYCLES_4, 0x2B, 0xB0, 0x30,
       g_mxic_mx25uxx_enter_qspi_mode_cmd,         NULL,                               &g_mxic_mx25uxx_config },
+    // { FLASH_MANUFACTURER_PUYA_PY25Q128LA,       FLASH_SIZE_16MB, 0x38, 0xFF, WAIT_CYCLES_6, 0x48, 0x75, 0x7A,
+    //   g_puya_py25q128la_enter_qspi_mode_cmd,        NULL,                               &g_puya_py25q128la_config },
+    { FLASH_MANUFACTURER_PUYA_PY25Q128LA,       FLASH_SIZE_16MB, 0x20, 0xFF, WAIT_CYCLES_4, 0x05, 0x75, 0x7A,
+      g_puya_py25q128la_enter_qspi_mode_cmd,        NULL,                               &g_puya_py25q128la_config },
 };
 
 static const uint32_t g_xip_use_cmd_mode[] = {
@@ -142,6 +146,7 @@ static const uint32_t g_xip_use_cmd_mode[] = {
     FLASH_MANUFACTURER_ELITE_EN25S32A,
     FLASH_MANUFACTURER_DOSILICON_DS25M4AB,
     FLASH_MANUFACTURER_PUYA_P25Q64SL,
+    FLASH_MANUFACTURER_PUYA_PY25Q128LA,
 };
 
 static flash_cmd_exe_t g_winbond_w25qxx_set_qe_cmd[] = {
@@ -204,6 +209,22 @@ static flash_cmd_exe_t g_xtx_xt25q128d_set_qe_cmd[] = {
     { FLASH_CMD_TYPE_END,        HAL_SPI_FRAME_FORMAT_MAX_NUM,   0, { 0 } }
 };
 
+static flash_cmd_exe_t g_puya_py25q128la_set_qe_cmd[] = {
+    /* Check QE bit. */
+    { FLASH_CMD_TYPE_CHECK,      HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },
+    /* Write enable. */
+    { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } },
+    /* Write status register-2 to 0x2, set QE bit. */
+    { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },
+    /* Waite config done. */
+    { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },
+    /* Check QE bit. */
+    { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },
+    /* End cmd, will not execute and need return. */
+    { FLASH_CMD_TYPE_END,        HAL_SPI_FRAME_FORMAT_MAX_NUM,   0, { 0 } }
+};
+
+
 static const flash_qe_config_t g_flash_need_set_qe[] = {
     {FLASH_MANUFACTURER_WINBOND_W25Q32,      g_winbond_w25qxx_set_qe_cmd},
     {FLASH_MANUFACTURER_WINBOND_W25Q64,      g_winbond_w25qxx_set_qe_cmd},
@@ -214,6 +235,7 @@ static const flash_qe_config_t g_flash_need_set_qe[] = {
     {FLASH_MANUFACTURER_DOSILICON_DS25M4AB,  g_winbond_w25qxx_set_qe_cmd},
     {FLASH_MANUFACTURER_ELITE_EN25SX128A,    g_winbond_en25sx128a_set_qe_cmd},
     {FLASH_MANUFACTURER_XTX_XT25Q128D,       g_xtx_xt25q128d_set_qe_cmd},
+    {FLASH_MANUFACTURER_PUYA_PY25Q128LA,     g_puya_py25q128la_set_qe_cmd}
 };
 
 #define FLASH_WIP                (bit(0))
index c6e19d0..a95513d 100755 (executable)
@@ -141,6 +141,33 @@ static flash_cmd_exe_t g_xtx_xt25qxxd_enter_qspi_mode_cmd[] = {
     { FLASH_CMD_TYPE_END,        HAL_SPI_FRAME_FORMAT_MAX_NUM,   0, { 0 } }
 };
 
+/* PUYA config. */
+/* PY25Q128LA PUYA flash config. */
+static flash_cmd_exe_t g_puya_py25q128la_enter_qspi_mode_cmd[] = {
+    // /* Write enable for Volatils status register. */
+    // { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },
+    // /* Write status register-2 to 0x2, enable QPI write bit. */
+    // { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x01, 0x02 } },
+    // /* Enable QPI. */
+    // { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },
+    // /* Set dummy 6, maxinum read freq 70MHZ. */
+    // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0,  0x20} },
+    // /* End cmd, will not execute and need return. */
+    // { FLASH_CMD_TYPE_END,        HAL_SPI_FRAME_FORMAT_MAX_NUM,   0, { 0 } }
+    /* Write enable for Volatils status register. */
+    { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },
+    /* Write status register-2 to 0x2, enable QPI write bit. */
+    { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },
+    /* Waite config done. */
+    { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },
+    /* Enable QPI. */
+    { FLASH_CMD_TYPE_CMD,        HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },
+    /* Set dummy 6, maxinum read freq 70MHZ. */
+    { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0,  0x20} },
+    /* End cmd, will not execute and need return. */
+    { FLASH_CMD_TYPE_END,        HAL_SPI_FRAME_FORMAT_MAX_NUM,   0, { 0 } }
+};
+
 /* OTHERS enter xip mode config. */
 /* Micro config. */
 /* MT25QU128 Micro flash config. */
@@ -248,6 +275,24 @@ static flash_qspi_xip_config_t g_xtx_xt25qxxd_config = {
     false,
     false,
 };
+
+/* PUYA config. */
+/* PY25Q128LA PUYA flash config. */
+static flash_qspi_xip_config_t g_puya_py25q128la_config = {
+    /* The config that before enter XIP mode. */
+    WAIT_CYCLES_6,
+    HAL_SPI_INST_LEN_8,
+    HAL_SPI_ADDR_LEN_24,
+    HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,
+    /* The config that after enter XIP mode. */
+    WAIT_CYCLES_6,
+    HAL_SPI_INST_LEN_8,
+    HAL_SPI_ADDR_LEN_24,
+    HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,
+    /* XIP 32bit addr & wrap config. */
+    false,
+    false,
+};
 /**
   * @}
   */
index 0a8d37d..8b34084 100644 (file)
@@ -34,7 +34,7 @@ errcode_t kv_flash_read(const uint32_t flash_offset, const uint32_t size, uint8_
     }
 
     uint32_t read_len = 0;
-    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
         read_len = uapi_flash_read_data_without_align(0, flash_offset, tmp_ram_data, size);
     } else {
         read_len = uapi_flash_read_data(0, flash_offset, tmp_ram_data, size);
@@ -72,7 +72,7 @@ errcode_t kv_flash_write(const uint32_t flash_offset, uint32_t size, const uint8
         goto end;
     }
 
-    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+    if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
         write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size);
     } else {
         write_len = uapi_flash_write_data(0, flash_offset, ram_data, size);
index b414a90..a102468 100755 (executable)
@@ -228,7 +228,7 @@ errcode_t upg_flash_read(const uint32_t flash_offset, const uint32_t size, uint8
 
     uint32_t tail_size = UPG_FLASH_PAGE_SIZE - (flash_offset + UPG_FLASH_PAGE_SIZE) % UPG_FLASH_PAGE_SIZE;
     if (tail_size < size) { /* 跨页时,按页读取 */
-        if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+        if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
             (flash_offset < status_flag_offset + status_flag_size)) {
             read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data, tail_size);
         } else {
@@ -240,7 +240,7 @@ errcode_t upg_flash_read(const uint32_t flash_offset, const uint32_t size, uint8
     }
 
     uint32_t remain_size = size - read_len;
-    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
         (flash_offset < status_flag_offset + status_flag_size)) {
         read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data + read_len, remain_size);
     } else {
@@ -309,7 +309,7 @@ errcode_t upg_flash_write(const uint32_t flash_offset, uint32_t size, const uint
     }
 
     uint32_t write_len = 0;
-    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
         (flash_offset < status_flag_offset + status_flag_size)) {
         write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size);
     } else {
@@ -320,7 +320,7 @@ errcode_t upg_flash_write(const uint32_t flash_offset, uint32_t size, const uint
     }
 
     uint32_t read_len = 0;
-    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
         (flash_offset < status_flag_offset + status_flag_size)) {
         read_len = uapi_flash_read_data_without_align(0, flash_offset, cmp_data, size);
     } else {
index 9ab9b48..2d7f92d 100755 (executable)
@@ -526,7 +526,7 @@ static void extract_flash_write(const uint8_t *input_buffer_to_write, uint32_t b
 {
     flash_info_t flash_info;
     uapi_flash_get_info(0, &flash_info);
-    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) &&
+    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) &&
         ((g_codeloader_flash_writing_commands_location >= NV_FLASH_REGION_START) &&
             (g_codeloader_flash_writing_commands_location < (NV_FLASH_REGION_START + NV_FLASH_REGION_LENGTH)))) {
         uapi_flash_write_data_without_align(CHIP_FLASH_ID,
@@ -873,7 +873,7 @@ int8_t codeloader_command_processor_set_bin_sha_data(const codeloader_rx_buffer_
     /* puya flash do not verification */
     flash_info_t flash_info;
     uapi_flash_get_info(0, &flash_info);
-    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) &&
+    if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) &&
         ((g_codeloader_data_save_position.load_start_addr >= NV_FLASH_REGION_START) &&
          (g_codeloader_data_save_position.load_length <= NV_FLASH_REGION_LENGTH))) {
         (void)uapi_flash_exit_from_xip_mode(0);