42 #ifndef _QSPI_W25Q32JWIM_V2_H_
43 #define _QSPI_W25Q32JWIM_V2_H_
50 #define QSPI_W25Q32JWIM_DENSITY (0x16)
56 .jedec.type = QSPI_WINBOND_W25QXXXJWIM_TYPE,
57 .jedec.density = QSPI_W25Q32JWIM_DENSITY,
58 .jedec.density_mask = 0xFF,
60 .size_bits = QSPI_MEMORY_SIZE_32Mbits,
72 .read_instr_cfg.opcode = QSPI_FAST_READ_QUAD_OPCODE,
73 .read_instr_cfg.extra_byte_value = 0xA5,
74 .read_instr_cfg.cs_idle_delay_nsec = 10,
78 .erase_instr_cfg.hclk_cycles = 0,
79 .erase_instr_cfg.opcode = QSPI_SECTOR_ERASE_OPCODE,
80 .erase_instr_cfg.cs_idle_delay_nsec = 50,
85 .read_status_instr_cfg.busy_pos = QSPI_STATUS_REG_BUSY_BIT,
86 .read_status_instr_cfg.opcode = QSPI_READ_STATUS_REG_OPCODE,
87 .read_status_instr_cfg.delay_nsec = 0,
90 .write_enable_instr_cfg.opcode = QSPI_WRITE_ENABLE_OPCODE,
95 .page_program_instr_cfg.opcode = QSPI_PAGE_PROGRAM_QUAD_OPCODE,
99 .suspend_resume_instr_cfg.suspend_opcode = QSPI_WINBOND_SUSPEND_OPCODE,
100 .suspend_resume_instr_cfg.resume_opcode = QSPI_WINBOND_RESUME_OPCODE,
101 .suspend_resume_instr_cfg.resume_latency_usec = 1,
102 .suspend_resume_instr_cfg.res_sus_latency_usec = 20,
104 .delay.reset_usec = 30,
105 .delay.power_down_usec = 3,
106 .delay.release_power_down_usec = 30,
107 .delay.power_up_usec = 20,
109 .callback.initialize_cb = qspi_w25q32jwim_initialize,
110 .callback.sys_clk_cfg_cb = qspi_winbond_sys_clock_cfg,
111 .callback.exit_qpi_cb = qspi_exit_qpi,
112 .callback.get_dummy_bytes_cb = qspi_winbond_get_dummy_bytes,
113 .callback.is_suspended_cb = qspi_winbond_is_suspended,
114 .callback.is_busy_cb = qspi_winbond_is_busy,
115 .callback.read_status_reg_cb = qspi_winbond_read_status_reg,
116 .callback.write_status_reg_cb = qspi_winbond_write_status_reg,
118 .resume_before_writing_regs =
false,
123 #if QSPI_WINBOND_UNLOCK_PROTECTION
124 qspi_winbond_unlock_protection(
id);
127 qspi_winbond_enable_quad_mode(
id);
130 #if (dg_configCODE_LOCATION == NON_VOLATILE_IS_QSPI_FLASH) & (dg_configQSPI_FLASH_AUTODETECT == 0)
131 __attribute__((used, __section__(
"__product_header_primary__")))
132 static const PRODUCT_HEADER_STRUCT(3) ph_primary = {
133 .burstcmdA = 0xA8A500EB,
134 .burstcmdB = 0x00001066,
135 .flash_config_section = 0x11AA,
136 .flash_config_length = 0x3,
137 .config_seq = {0x31, 0x02, 0x02},
141 __attribute__((used, __section__(
"__product_header_backup__")))
142 static const PRODUCT_HEADER_STRUCT(3) ph_backup = {
143 .burstcmdA = 0xA8A500EB,
144 .burstcmdB = 0x00001066,
145 .flash_config_section = 0x11AA,
146 .flash_config_length = 0x3,
147 .config_seq = {0x31, 0x02, 0x02},