//! ISSI Serial NOR Flash. use super::*; use crate::{ImxrtFlashAlgorithm, sequences::common as sequences}; pub type Is25WP128 = Issi<{ 128 / 8 * 1024 * 1024 }, 15>; /// An ISSI serial NOR flash driver. pub struct Issi; impl ImxrtFlashAlgorithm for Issi { const FLASH_CAPACITY_BYTES: usize = FLASH_CAPACITY_BYTES; const FLASH_PAGE_SIZE_BYTES: usize = 256; const FLASH_SECTOR_SIZE_BYTES: usize = 4096; fn initialize(flexspi: imxrt_drivers_flexspi::Instance) { defmt::assert_eq!( READ, defmt::unwrap!(crate::install_ip_cmd( flexspi, READ.seq_id, &[sequences::seq_fast_read_quad_io(DUMMY_CYCLES)], )) ); defmt::assert_eq!( SET_READ_PARAMS, defmt::unwrap!(crate::install_ip_cmd( flexspi, SET_READ_PARAMS.seq_id, &[sequences::SEQ_SET_READ_PARAMS_VOL] )) ); defmt::assert_eq!( WRITE_ENABLE, defmt::unwrap!(crate::install_ip_cmd( flexspi, WRITE_ENABLE.seq_id, &[sequences::SEQ_WRITE_ENABLE] )) ); defmt::assert_eq!( ERASE_SECTOR, defmt::unwrap!(crate::install_ip_cmd( flexspi, ERASE_SECTOR.seq_id, &[sequences::SEQ_WRITE_ENABLE, sequences::SEQ_ERASE_SECTOR] )) ); defmt::assert_eq!( READ_STATUS, defmt::unwrap!(crate::install_ip_cmd( flexspi, READ_STATUS.seq_id, &[sequences::SEQ_READ_STATUS] )) ); defmt::assert_eq!( PAGE_PROGRAM, defmt::unwrap!(crate::install_ip_cmd( flexspi, PAGE_PROGRAM.seq_id, &[ sequences::SEQ_WRITE_ENABLE, sequences::SEQ_PAGE_PROGRAM_QUAD_INPUT ] )) ); defmt::assert_eq!( CHIP_ERASE, defmt::unwrap!(crate::install_ip_cmd( flexspi, CHIP_ERASE.seq_id, &[sequences::SEQ_WRITE_ENABLE, sequences::SEQ_ERASE_CHIP] )) ); defmt::assert_eq!( RESET, defmt::unwrap!(crate::install_ip_cmd( flexspi, RESET.seq_id, &[sequences::SEQ_RSTEN, sequences::SEQ_RST] )) ); let set_read_params_data = [DUMMY_CYCLES << 3]; crate::start_ip_cmd(flexspi, SET_READ_PARAMS, 0, &set_read_params_data); crate::transmit_bytes(flexspi, &set_read_params_data); crate::wait_for_ip_cmd_done(flexspi); crate::clear_tx_fifo(flexspi); crate::wait_for_idle(flexspi); } }