//! Common SPI sequences. use imxrt_drivers_flexspi::{Instr, Pads, SDR_CMD, SDR_DUMMY, SDR_RADDR, SDR_READ, SDR_WRITE}; pub use crate::flexspi::Sequence; /// Enable write access. /// /// This should be sequenced before configuration register /// updates, page programs, and erases. pub const SEQ_WRITE_ENABLE: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x06); Sequence(instr) }; /// Program a page using four output data signals. pub const SEQ_PAGE_PROGRAM_QUAD_INPUT: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x32); instr[1] = Instr::new(SDR_RADDR, Pads::One, 24); instr[2] = Instr::new(SDR_WRITE, Pads::Four, 0); Sequence(instr) }; /// Erase a 4KiB sector. pub const SEQ_ERASE_SECTOR: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x20); instr[1] = Instr::new(SDR_RADDR, Pads::One, 24); Sequence(instr) }; /// Erase the entire chip. pub const SEQ_ERASE_CHIP: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x60); Sequence(instr) }; /// Read the status register. pub const SEQ_READ_STATUS: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x05); instr[1] = Instr::new(SDR_READ, Pads::One, 0); Sequence(instr) }; /// Form a read sequence with a given number of /// dummy cycles. /// /// The sequence sends the read address using four signals. pub const fn seq_fast_read_quad_io(dummy_cycles: u8) -> Sequence { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0xEB); instr[1] = Instr::new(SDR_RADDR, Pads::Four, 24); instr[2] = Instr::new(SDR_DUMMY, Pads::Four, dummy_cycles); instr[3] = Instr::new(SDR_READ, Pads::Four, 0); Sequence(instr) } /// Set parameters for reading data (volatile). pub const SEQ_SET_READ_PARAMS_VOL: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0xC0); instr[1] = Instr::new(SDR_WRITE, Pads::One, 0); Sequence(instr) }; /// Software reset enable. pub const SEQ_RSTEN: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x66); Sequence(instr) }; /// Software reset. pub const SEQ_RST: Sequence = { let mut instr = [Instr::STOP; _]; instr[0] = Instr::new(SDR_CMD, Pads::One, 0x99); Sequence(instr) };