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
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 {
+/*\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
#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
+/*
+ * @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
#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
#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))
FLASH_XTX_XT25Q128D,
FLASH_PUYA_P25Q64SL,
FLASH_MXIC_MX25U256,
+ FLASH_PUYA_PY25Q128LA,
FLASH_MANUFACTURER_MAX
} flash_support_manufacturer_t;
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[] = {
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[] = {
{ 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},
{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))
{ 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. */
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,
+};
/**
* @}
*/
}
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);
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);
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 {
}
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 {
}
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 {
}
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 {
{
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,
/* 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);