|
- #include <SerialFlash.h>
- #include <SPI.h>
-
- const int FlashChipSelect = 6; // digital pin for flash chip CS pin
- //const int FlashChipSelect = 21; // Arduino 101 built-in SPI Flash
-
- SerialFlashFile file;
-
- const unsigned long testIncrement = 4096;
-
- void setup() {
- //uncomment these if using Teensy audio shield
- //SPI.setSCK(14); // Audio shield has SCK on pin 14
- //SPI.setMOSI(7); // Audio shield has MOSI on pin 7
-
- //uncomment these if you have other SPI chips connected
- //to keep them disabled while using only SerialFlash
- //pinMode(4, INPUT_PULLUP);
- //pinMode(10, INPUT_PULLUP);
-
- Serial.begin(9600);
-
- // wait up to 10 seconds for Arduino Serial Monitor
- unsigned long startMillis = millis();
- while (!Serial && (millis() - startMillis < 10000)) ;
- delay(100);
-
- if (!SerialFlash.begin(FlashChipSelect)) {
- while (1) {
- Serial.println("Unable to access SPI Flash chip");
- delay(1000);
- }
- }
- unsigned char id[5];
- SerialFlash.readID(id);
- unsigned long size = SerialFlash.capacity(id);
-
- if (size > 0) {
- Serial.print("Flash Memory has ");
- Serial.print(size);
- Serial.println(" bytes.");
- Serial.println("Erasing ALL Flash Memory:");
- // Estimate the (lengthy) wait time.
- Serial.print(" estimated wait: ");
- int seconds = (float)size / eraseBytesPerSecond(id) + 0.5;
- Serial.print(seconds);
- Serial.println(" seconds.");
- Serial.println(" Yes, full chip erase is SLOW!");
- SerialFlash.eraseAll();
- unsigned long dotMillis = millis();
- unsigned char dotcount = 0;
- while (SerialFlash.ready() == false) {
- if (millis() - dotMillis > 1000) {
- dotMillis = dotMillis + 1000;
- Serial.print(".");
- dotcount = dotcount + 1;
- if (dotcount >= 60) {
- Serial.println();
- dotcount = 0;
- }
- }
- }
- if (dotcount > 0) Serial.println();
- Serial.println("Erase completed");
- unsigned long elapsed = millis() - startMillis;
- Serial.print(" actual wait: ");
- Serial.print(elapsed / 1000ul);
- Serial.println(" seconds.");
- }
- }
-
- float eraseBytesPerSecond(const unsigned char *id) {
- if (id[0] == 0x20) return 152000.0; // Micron
- if (id[0] == 0x01) return 500000.0; // Spansion
- if (id[0] == 0xEF) return 419430.0; // Winbond
- if (id[0] == 0xC2) return 279620.0; // Macronix
- return 320000.0; // guess?
- }
-
-
- void loop() {
-
- }
|