Expand description

Flash memory module

Example usage of flash programming interface:

fn program_region(mut flash: flash::Parts) -> Result<(), flash::Error> {
    // Unlock the flashing module
    let mut prog = flash.keyr.unlock_flash(&mut flash.sr, &mut flash.cr)?;

    let page = flash::FlashPage(5);

    // Perform the erase and programing operation
    prog.erase_page(page)?;
    let data = [
        0x1111_1112_1113_1114,
        0x2221_2222_2223_2224,
        0x3331_3332_3333_3334,
    ];
    prog.write_native(page.to_address(), &data)?;

    // Check result (not needed, but done for this example)
    let addr = page.to_address() as *const u64;
    assert!(unsafe { core::ptr::read(addr) } == data[0]);
    assert!(unsafe { core::ptr::read(addr.offset(1)) } == data[1]);
    assert!(unsafe { core::ptr::read(addr.offset(2)) } == data[2]);

    Ok(())
}

Re-exports

pub use flash_trait::Error;
pub use flash_trait::FlashPage;
pub use flash_trait::Read;
pub use flash_trait::WriteErase;

Structs

Opaque ACR register

Opaque CR register

Opaque ECCR register

Flash programming interface

Opaque KEYR register

Opaque OPTKEYR register

Opaque PCROP1ER register

Opaque PCROP1SR register

Opaque PDKEYR register

Constrained FLASH peripheral

Opaque SR register

Opaque WRP1AR register

Opaque WRP1BR register

Traits

Extension trait to constrain the FLASH peripheral