diff options
Diffstat (limited to 'src/flash/issi.rs')
| -rw-r--r-- | src/flash/issi.rs | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/src/flash/issi.rs b/src/flash/issi.rs deleted file mode 100644 index 6b517af..0000000 --- a/src/flash/issi.rs +++ /dev/null @@ -1,124 +0,0 @@ -//! ISSI Serial NOR Flash. -//! -//! The same algorithm will query the flash part to differentiate -//! the 3.3V part ("LP") from the 1.8V part ("WP"). Sequences and -//! configurations vary by part. Replace the W and L with 'x'. - -use super::*; -use crate::{ImxrtFlashAlgorithm, sequences::common as sequences}; - -pub type Is25xP128 = Issi<{ 128 / 8 * 1024 * 1024 }>; - -/// An ISSI serial NOR flash driver. -pub struct Issi<const FLASH_CAPACITY_BYTES: usize>; - -const ISSI_WP_MEM_TYPE: u8 = 0x70; -const ISSI_LP_MEM_TYPE: u8 = 0x60; - -impl<const FLASH_CAPACITY_BYTES: usize> ImxrtFlashAlgorithm for Issi<FLASH_CAPACITY_BYTES> { - 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_ID_JEDEC_ID, - defmt::unwrap!(crate::install_ip_cmd( - flexspi, - READ_ID_JEDEC_ID.seq_id, - &[sequences::SEQ_READ_ID_JEDEC_ID] - )) - ); - - let jedec_id = super::read_jedec_id(flexspi); - defmt::assert_eq!(jedec_id.mnf_id, 0x9D); - - let (dummy_cycles, set_read_params_data) = match jedec_id.mem_type { - ISSI_WP_MEM_TYPE => (15, 15 << 3), - ISSI_LP_MEM_TYPE => (10, (0b111 << 5) | (0b11) << 3), - _ => defmt::panic!("{=u8:#X}", jedec_id.mem_type), - }; - - 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 = [set_read_params_data]; - 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); - } -} |
