diff --git a/NORFlasherFirmware.ino b/NORFlasherFirmware.ino index 3e8ee73..c6f1584 100644 --- a/NORFlasherFirmware.ino +++ b/NORFlasherFirmware.ino @@ -6,7 +6,8 @@ enum { CMD_INVALID, CMD_WRITE, CMD_TEST, - CMD_DUMP + CMD_DUMP, + CMD_ERASE }; char line[120]; @@ -32,7 +33,7 @@ void setup() { setCtrlPins(); setAddrPinsOut(); - setDataPinsIn(); + setDataPinsOut(); //setDataPinsOut(); Serial.begin(9600, SERIAL_8N1); @@ -84,6 +85,7 @@ byte parseCommand(char c) { case 'w': cmd = CMD_WRITE; break; case 't': cmd = CMD_TEST; break; case 'd': cmd = CMD_DUMP; break; + case 'e': cmd = CMD_ERASE; break; default: cmd = CMD_INVALID; break; } @@ -122,7 +124,7 @@ void loop() { Serial.println("Wrote: 0x3F"); setDataPinsIn(); delay(500); - Serial.println("Received: "); + Serial.print("Received: "); Serial.println(readData(0x0000), HEX); cmd = NULL; break; @@ -136,6 +138,10 @@ void loop() { // } cmd = NULL; break; + case CMD_ERASE: + eraseROM(); + cmd = NULL; + break; case CMD_INVALID: default: @@ -144,6 +150,8 @@ void loop() { Serial.println("Commands: "); Serial.println("w\twrite new firmware"); Serial.println("d\tdump firmware"); + Serial.println("t\tdo a test write and then read"); + Serial.println("e\terase chip"); Serial.println(); break; } @@ -154,4 +162,18 @@ void dumpROM() { byte data = readData(0x0000 | i); Serial.println(data, HEX); } +} + +void eraseROM() { + setDataPinsOut(); + + writeByte(0xAA, 0x5555); + writeByte(0x55, 0x2AAA); + writeByte(0x80, 0x5555); + writeByte(0xAA, 0x5555); + writeByte(0x55, 0x2AAA); + writeByte(0x10, 0x5555); + + delay(100); + setDataPinsIn(); } \ No newline at end of file