Browse Source

DataFlash: use ChipErase() instead of PageErase() on all pages

This makes the DataFlash erase much faster (about 6 seconds instead of
about 60 seconds).

We need to test and ensure the behaviour is equivalent apart from the
speed
mission-4.1.18
Andrew Tridgell 13 years ago committed by Craig Elder
parent
commit
fc73fd6531
  1. 7
      libraries/DataFlash/DataFlash.cpp
  2. 2
      libraries/DataFlash/DataFlash.h
  3. 6
      libraries/DataFlash/DataFlash_APM1.cpp
  4. 2
      libraries/DataFlash/DataFlash_APM1.h
  5. 9
      libraries/DataFlash/DataFlash_APM2.cpp
  6. 2
      libraries/DataFlash/DataFlash_APM2.h

7
libraries/DataFlash/DataFlash.cpp

@ -188,13 +188,8 @@ uint16_t DataFlash_Class::GetFilePage() @@ -188,13 +188,8 @@ uint16_t DataFlash_Class::GetFilePage()
void DataFlash_Class::EraseAll(void (*delay_cb)(unsigned long))
{
ChipErase(delay_cb);
SetFileNumber(0xFFFF);
for(uint16_t j = 1; j <= df_NumPages; j++) {
PageErase(j);
StartWrite(j);
delay_cb(1);
}
// write the logging format in the last page
StartWrite(df_NumPages+1);
WriteLong(DF_LOGGING_FORMAT);

2
libraries/DataFlash/DataFlash.h

@ -32,7 +32,7 @@ class DataFlash_Class @@ -32,7 +32,7 @@ class DataFlash_Class
virtual void PageToBuffer(unsigned char BufferNum, uint16_t PageAdr) = 0;
virtual unsigned char BufferRead (unsigned char BufferNum, uint16_t IntPageAdr) = 0;
virtual void PageErase(uint16_t PageAdr) = 0;
virtual void ChipErase(void) = 0;
virtual void ChipErase(void (*delay_cb)(unsigned long)) = 0;
// internal high level functions
int find_last_page(void);

6
libraries/DataFlash/DataFlash_APM1.cpp

@ -294,7 +294,7 @@ void DataFlash_APM1::PageErase (uint16_t PageAdr) @@ -294,7 +294,7 @@ void DataFlash_APM1::PageErase (uint16_t PageAdr)
}
void DataFlash_APM1::ChipErase ()
void DataFlash_APM1::ChipErase(void (*delay_cb)(unsigned long))
{
dataflash_CS_active(); // activate dataflash command decoder
@ -306,7 +306,9 @@ void DataFlash_APM1::ChipErase () @@ -306,7 +306,9 @@ void DataFlash_APM1::ChipErase ()
dataflash_CS_inactive(); //initiate flash page erase
dataflash_CS_active();
while(!ReadStatus());
while (!ReadStatus()) {
delay_cb(1);
}
dataflash_CS_inactive(); // deactivate dataflash command decoder
}

2
libraries/DataFlash/DataFlash_APM1.h

@ -19,7 +19,7 @@ class DataFlash_APM1 : public DataFlash_Class @@ -19,7 +19,7 @@ class DataFlash_APM1 : public DataFlash_Class
unsigned char ReadStatus();
uint16_t PageSize();
void PageErase (uint16_t PageAdr);
void ChipErase ();
void ChipErase(void (*delay_cb)(unsigned long));
public:

9
libraries/DataFlash/DataFlash_APM2.cpp

@ -350,7 +350,7 @@ void DataFlash_APM2::PageErase (uint16_t PageAdr) @@ -350,7 +350,7 @@ void DataFlash_APM2::PageErase (uint16_t PageAdr)
}
void DataFlash_APM2::ChipErase ()
void DataFlash_APM2::ChipErase(void (*delay_cb)(unsigned long))
{
// activate dataflash command decoder
CS_active();
@ -364,8 +364,11 @@ void DataFlash_APM2::ChipErase () @@ -364,8 +364,11 @@ void DataFlash_APM2::ChipErase ()
//initiate flash page erase
CS_inactive();
CS_active();
while(!ReadStatus());
while(!ReadStatus()) {
delay_cb(1);
}
// release SPI bus for use by other sensors
CS_inactive();
}
}

2
libraries/DataFlash/DataFlash_APM2.h

@ -23,7 +23,7 @@ class DataFlash_APM2 : public DataFlash_Class @@ -23,7 +23,7 @@ class DataFlash_APM2 : public DataFlash_Class
void CS_inactive();
void CS_active();
void PageErase (uint16_t PageAdr);
void ChipErase ();
void ChipErase(void (*delay_cb)(unsigned long));
public:
DataFlash_APM2(); // Constructor

Loading…
Cancel
Save