common: Implement Storage::clear() in Mx25l.
[gps-watch.git] / src / common / mx25l.rs
index a6ad39550e9cbb9d9df7b1c0236e2e7228fabb51..ea2b8c1667372fe290f8c041d27566dfc9249d58 100644 (file)
@@ -39,6 +39,7 @@ enum Command {
     RDSR = 0x05,
     WREN = 0x06,
     SE   = 0x20,
+    CE   = 0x60,
     RDID = 0x9f,
 }
 
@@ -72,6 +73,17 @@ impl Mx25l {
         })
     }
 
+    pub fn erase_all(&self) {
+        self.write_enable();
+
+        self.with_selected(|| {
+            spi::tx8(spi::SPI0, Command::CE as u8);
+        });
+
+        while self.write_in_progress() {
+        }
+    }
+
     pub fn erase_sector(&self, address: usize) -> Result<(), Error> {
         if (address & (SECTOR_SIZE - 1)) != 0 {
             return Err(Error::UnalignedAddress);
@@ -179,4 +191,8 @@ impl Storage for Mx25l {
 
         Ok(())
     }
+
+    fn clear(&mut self) {
+        self.erase_all();
+    }
 }