42 #ifndef _QSPI_W25Q32JWIQ_V2_H_
43 #define _QSPI_W25Q32JWIQ_V2_H_
50 #define QSPI_W25Q32JWIQ_DENSITY (0x16)
56 .jedec.type = QSPI_WINBOND_W25QXXXJWIQ_TYPE,
57 .jedec.density = QSPI_W25Q32JWIQ_DENSITY,
58 .jedec.density_mask = 0xFF,
60 .size_bits = QSPI_MEMORY_SIZE_32Mbits,
73 .read_instr_cfg.opcode = QSPI_FAST_READ_QUAD_OPCODE,
74 .read_instr_cfg.extra_byte_value = 0xFF,
75 .read_instr_cfg.cs_idle_delay_nsec = 10,
79 .erase_instr_cfg.hclk_cycles = 0,
80 .erase_instr_cfg.opcode = QSPI_SECTOR_ERASE_OPCODE,
81 .erase_instr_cfg.cs_idle_delay_nsec = 50,
86 .read_status_instr_cfg.busy_pos = QSPI_STATUS_REG_BUSY_BIT,
87 .read_status_instr_cfg.opcode = QSPI_READ_STATUS_REG_OPCODE,
88 .read_status_instr_cfg.delay_nsec = 0,
91 .write_enable_instr_cfg.opcode = QSPI_WRITE_ENABLE_OPCODE,
96 .page_program_instr_cfg.opcode = QSPI_PAGE_PROGRAM_QUAD_OPCODE,
100 .suspend_resume_instr_cfg.suspend_opcode = QSPI_WINBOND_SUSPEND_OPCODE,
101 .suspend_resume_instr_cfg.resume_opcode = QSPI_WINBOND_RESUME_OPCODE,
102 .suspend_resume_instr_cfg.resume_latency_usec = 1,
103 .suspend_resume_instr_cfg.res_sus_latency_usec = 20,
105 .delay.reset_usec = 30,
106 .delay.power_down_usec = 3,
107 .delay.release_power_down_usec = 30,
108 .delay.power_up_usec = 20,
110 .callback.initialize_cb = qspi_w25q32jwiq_initialize,
111 .callback.sys_clk_cfg_cb = qspi_winbond_sys_clock_cfg,
112 .callback.exit_qpi_cb = qspi_exit_qpi,
113 .callback.get_dummy_bytes_cb = qspi_winbond_get_dummy_bytes,
114 .callback.is_suspended_cb = qspi_winbond_is_suspended,
115 .callback.is_busy_cb = qspi_winbond_is_busy,
116 .callback.read_status_reg_cb = qspi_winbond_read_status_reg,
117 .callback.write_status_reg_cb = qspi_winbond_write_status_reg,
119 .resume_before_writing_regs =
false,
124 #if QSPI_WINBOND_UNLOCK_PROTECTION
125 qspi_winbond_unlock_protection(
id);
131 qspi_winbond_enable_quad_mode(
id);
134 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH) & (dg_configQSPI_FLASH_AUTODETECT == 0)
135 __attribute__((used, __section__(
"__product_header_primary__")))
136 static const PRODUCT_HEADER_STRUCT(3) ph_primary = {
137 .burstcmdA = 0xA8FF00EB,
138 .burstcmdB = 0x00001026,
139 .flash_config_section = 0x11AA,
140 .flash_config_length = 0x3,
141 .config_seq = {0x31, 0x02, 0x02},
145 __attribute__((used, __section__(
"__product_header_backup__")))
146 static const PRODUCT_HEADER_STRUCT(3) ph_backup = {
147 .burstcmdA = 0xA8FF00EB,
148 .burstcmdB = 0x00001026,
149 .flash_config_section = 0x11AA,
150 .flash_config_length = 0x3,
151 .config_seq = {0x31, 0x02, 0x02},