From eed43b2e6759a5a26d9d6da2f3ca7bff4f83bd0d Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Tue, 2 Jul 2024 16:43:38 +0800 Subject: [PATCH] =?utf8?q?=E5=85=BC=E5=AE=B9PY25Q128LA=20NORFLASH?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../src/AlarmClockTimerConfig.cpp | 4 +- code/sdk/bootloader/flashboot/brandy/main.c | 2 +- .../nandflash/include/nandflash_ds35x1g.h | 12 ++++- .../nand/include/nandflash_ds35x1g.h | 12 ++++- .../driver/flash/flash_common_config.h | 3 ++ .../include/driver/flash/flash_config_info.h | 22 +++++++++ .../driver/flash/flash_others_config.h | 45 +++++++++++++++++++ .../chips/brandy/nv/nv_porting/nv_flash.c | 4 +- .../brandy/update/common/upg_common_porting.c | 8 ++-- ...r_execute_command_flash_writing_commands.c | 4 +- 10 files changed, 103 insertions(+), 13 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp index fe7ce2ed1..e3dd15fa2 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp @@ -181,12 +181,12 @@ extern "C" on_time_CallBackProc(); } // 进入睡眠模式 - if (curTime.tm_hour == ((sleep_time & 0XFFFF0000) >> 16) && curTime.tm_min == (sleep_time & 0X0000FFFF)) + if (curTime.tm_hour == ((sleep_time & 0XFFFF0000) >> 16) && curTime.tm_min == (sleep_time & 0X0000FFFF) && curTime.tm_sec == 0) { do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL); } // 退出睡眠模式 - if (curTime.tm_hour == ((wake_up_time & 0XFFFF0000) >> 16) && curTime.tm_min == (wake_up_time & 0X0000FFFF)) + if (curTime.tm_hour == ((wake_up_time & 0XFFFF0000) >> 16) && curTime.tm_min == (wake_up_time & 0X0000FFFF) && curTime.tm_sec == 0) { do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL); } diff --git a/code/sdk/bootloader/flashboot/brandy/main.c b/code/sdk/bootloader/flashboot/brandy/main.c index 274de4b8a..66513382f 100755 --- a/code/sdk/bootloader/flashboot/brandy/main.c +++ b/code/sdk/bootloader/flashboot/brandy/main.c @@ -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 { diff --git a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h index 8a37759b0..75956dbb4 100755 --- a/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h +++ b/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h @@ -1,3 +1,13 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2024-06-29 17:26:01 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2024-07-02 16:41:57 + * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/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 diff --git a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h index f7e0dfcd5..2b5c20fc7 100755 --- a/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h +++ b/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h @@ -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 diff --git a/code/sdk/include/driver/flash/flash_common_config.h b/code/sdk/include/driver/flash/flash_common_config.h index a9c5b9602..d541fa469 100755 --- a/code/sdk/include/driver/flash/flash_common_config.h +++ b/code/sdk/include/driver/flash/flash_common_config.h @@ -115,6 +115,8 @@ #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; diff --git a/code/sdk/include/driver/flash/flash_config_info.h b/code/sdk/include/driver/flash/flash_config_info.h index 157fb76e9..51b64218e 100755 --- a/code/sdk/include/driver/flash/flash_config_info.h +++ b/code/sdk/include/driver/flash/flash_config_info.h @@ -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)) diff --git a/code/sdk/include/driver/flash/flash_others_config.h b/code/sdk/include/driver/flash/flash_others_config.h index c6e19d0eb..a95513dab 100755 --- a/code/sdk/include/driver/flash/flash_others_config.h +++ b/code/sdk/include/driver/flash/flash_others_config.h @@ -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, +}; /** * @} */ diff --git a/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c b/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c index 0a8d37d33..8b340840a 100644 --- a/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c +++ b/code/sdk/middleware/chips/brandy/nv/nv_porting/nv_flash.c @@ -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); diff --git a/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c b/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c index b414a90f0..a102468a4 100755 --- a/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c +++ b/code/sdk/middleware/chips/brandy/update/common/upg_common_porting.c @@ -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 { diff --git a/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c b/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c index 9ab9b48a5..2d7f92deb 100755 --- a/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c +++ b/code/sdk/middleware/utils/codeloader/private/codeloader_execute_command_flash_writing_commands.c @@ -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); -- 2.17.1