use anyhow::Result;
use probe_rs::{
architecture::arm::{sequences::DefaultArmSequence, ApAddress, DpAddress},
Probe,
};
fn main() -> Result<()> {
pretty_env_logger::init();
let probes = Probe::list_all();
let mut probe = probes[0].open()?;
probe.attach_to_unspecified()?;
let iface = probe.try_into_arm_interface().unwrap();
let mut iface = iface.initialize(DefaultArmSequence::create())?;
let port = ApAddress {
dp: DpAddress::Default,
ap: 1,
};
const RESET: u8 = 0;
const ERASEALL: u8 = 4;
const ERASEALLSTATUS: u8 = 8;
iface.write_raw_ap_register(port, RESET, 1)?;
iface.write_raw_ap_register(port, RESET, 0)?;
iface.write_raw_ap_register(port, ERASEALL, 1)?;
while iface.read_raw_ap_register(port, ERASEALLSTATUS)? != 0 {}
iface.write_raw_ap_register(port, RESET, 1)?;
iface.write_raw_ap_register(port, RESET, 0)?;
Ok(())
}