41 #ifndef _QSPI_MX25U3235_V2_H_
42 #define _QSPI_MX25U3235_V2_H_
49 #define QSPI_MX25U3235_DENSITY (0x36)
53 __RETAINED_CODE
static uint8_t qspi_mx25u3235_get_dummy_bytes(
HW_QSPIC_ID id,
sys_clk_t sys_clk);
54 __RETAINED_CODE
static void qspi_mx25u3235_write_status_reg(
HW_QSPIC_ID id, uint8_t status_reg);
58 .jedec.type = QSPI_MACRONIX_MX25U_TYPE,
59 .jedec.density = QSPI_MX25U3235_DENSITY,
60 .jedec.density_mask = 0xFF,
62 .size_bits = QSPI_MEMORY_SIZE_32Mbits,
74 .read_instr_cfg.opcode = QSPI_FAST_READ_QUAD_OPCODE,
75 .read_instr_cfg.extra_byte_value = 0xA5,
76 .read_instr_cfg.cs_idle_delay_nsec = 5,
80 .erase_instr_cfg.hclk_cycles = 0,
81 .erase_instr_cfg.opcode = QSPI_SECTOR_ERASE_OPCODE,
82 .erase_instr_cfg.cs_idle_delay_nsec = 30,
87 .read_status_instr_cfg.busy_pos = QSPI_STATUS_REG_BUSY_BIT,
88 .read_status_instr_cfg.opcode = QSPI_READ_STATUS_REG_OPCODE,
89 .read_status_instr_cfg.delay_nsec = 0,
92 .write_enable_instr_cfg.opcode = QSPI_WRITE_ENABLE_OPCODE,
97 .page_program_instr_cfg.opcode = QSPI_MACRONIX_PAGE_PROGRAM_4IO_OPCODE,
101 .suspend_resume_instr_cfg.suspend_opcode = QSPI_MACRONIX_SUSPEND_OPCODE,
102 .suspend_resume_instr_cfg.resume_opcode = QSPI_MACRONIX_RESUME_OPCODE,
103 .suspend_resume_instr_cfg.suspend_latency_usec = 25,
104 .suspend_resume_instr_cfg.resume_latency_usec = 1,
105 .suspend_resume_instr_cfg.res_sus_latency_usec = 100,
107 .delay.reset_usec = 12000,
108 .delay.power_down_usec = 10,
109 .delay.release_power_down_usec = 30,
110 .delay.power_up_usec = 800,
112 .callback.initialize_cb = qspi_mx25u3235_initialize,
113 .callback.sys_clk_cfg_cb = qspi_mx25u3235_sys_clock_cfg,
114 .callback.exit_qpi_cb = qspi_exit_qpi,
115 .callback.get_dummy_bytes_cb = qspi_mx25u3235_get_dummy_bytes,
116 .callback.is_suspended_cb = qspi_macronix_is_suspended,
117 .callback.is_busy_cb = qspi_macronix_is_busy,
118 .callback.read_status_reg_cb = qspi_macronix_read_status_reg,
119 .callback.write_status_reg_cb = qspi_mx25u3235_write_status_reg,
121 .resume_before_writing_regs =
false,
124 __RETAINED_CODE
static uint8_t qspi_mx25u3235_get_dummy_bytes(
HW_QSPIC_ID id,
sys_clk_t sys_clk)
129 __RETAINED_CODE
static void qspi_mx25u3235_write_status_reg(
HW_QSPIC_ID id, uint8_t status_reg)
137 __RETAINED_CODE
static void qspi_mx25u3235_enable_quad_mode(
HW_QSPIC_ID id)
139 __DBG_QSPI_VOLATILE__ uint8_t status_reg;
140 __DBG_QSPI_VOLATILE__ uint8_t verify;
142 status_reg = qspi_flash_read_status_register(
id);
144 if (!(status_reg & QSPI_MACRONIX_STATUS_REG_QUAD_ENABLE_MASK)) {
145 status_reg |= QSPI_MACRONIX_STATUS_REG_QUAD_ENABLE_MASK;
146 qspi_flash_write_enable(
id);
147 qspi_flash_write_status_register(
id, status_reg);
149 verify = qspi_flash_read_status_register(
id);
150 ASSERT_WARNING((status_reg & QSPI_MACRONIX_STATUS_REG_QUAD_ENABLE_MASK) ==
151 (verify & QSPI_MACRONIX_STATUS_REG_QUAD_ENABLE_MASK));
157 qspi_mx25u3235_enable_quad_mode(
id);
165 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH) & (dg_configQSPI_FLASH_AUTODETECT == 0)
166 __attribute__((used, __section__(
"__product_header_primary__")))
167 static const PRODUCT_HEADER_STRUCT(3) ph_primary = {
168 .burstcmdA = 0xA8A500EB,
169 .burstcmdB = 0x00000066,
170 .flash_config_section = 0x11AA,
171 .flash_config_length = 0x3,
172 .config_seq = {0x01, 0x40, 0x02},
176 __attribute__((used, __section__(
"__product_header_backup__")))
177 static const PRODUCT_HEADER_STRUCT(3) ph_backup = {
178 .burstcmdA = 0xA8A500EB,
179 .burstcmdB = 0x00000066,
180 .flash_config_section = 0x11AA,
181 .flash_config_length = 0x3,
182 .config_seq = {0x01, 0x40, 0x02},