common: Implement Storage::size() in Mx25l.
[gps-watch.git] / src / common / mx25l.rs
index a6ad39550e9cbb9d9df7b1c0236e2e7228fabb51..ecc42bacfe84b9228db2aea4c4eba02a894176b4 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);
@@ -145,6 +157,10 @@ impl Mx25l {
 }
 
 impl Storage for Mx25l {
+    fn size(&self) -> usize {
+        2 << 20
+    }
+
     fn read(&self, address: usize, buffer: &mut [u8]) {
         self.with_selected(|| {
             spi::tx8(spi::SPI0, Command::READ as u8);
@@ -179,4 +195,8 @@ impl Storage for Mx25l {
 
         Ok(())
     }
+
+    fn clear(&mut self) {
+        self.erase_all();
+    }
 }