like there is an error, the data written is different, or there is a byte 00 that is not included in the data that has been written.
Code:
#include <93C66.h>
// #include "93C66.h"
/*
* Example Sketch demonstration on how to write to (and read from) a 93C66 eeprom
*
* Wiring:
* Pin 7(CS) to Chip pin 1
* Pin 9(SCK) to Chip pin 2
* Pin 10(DI/MOSI) to Chip pin 3
* Pin 11(DO/MISO) to Chip pin 4
*
* (For some chips:) GND/VCC to Chip pin 6
* This determines the organization:
* HIGH is 256x16 (Use EEPROM_MODE_16BIT)
* LOW is 512x8 (Use EEPROM_MODE_8BIT)
*
*/
#define pCS 7
#define pSK 9
#define pDI 10
#define pDO 11
uint8_t writeBuffer[512] = {
0xA2, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xDA, 0x6E,
0xFF, 0xFF, 0x4B, 0x30, 0x1C, 0x88, 0xFF, 0xFF,
0x20, 0x00, 0x00, 0x00, 0x4B, 0x22, 0xD0, 0x07,
0xA0, 0x0F, 0x70, 0x17, 0xE0, 0x2E, 0x2E, 0xA3,
0xE9, 0x02, 0x99, 0x05, 0x2F, 0x08, 0x0B, 0x10,
0xB4, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x6C, 0x03, 0x12, 0x00, 0xFF, 0xFF,
0x96, 0xFF, 0xEB, 0x00, 0xCE, 0x02, 0x9F, 0x02,
0x6D, 0x02, 0x1B, 0x02, 0xD8, 0x77, 0x8B, 0x01,
0xBC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x09,
0x57, 0x01, 0x89, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
0x21, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0x1F, 0x06, 0xE0, 0xF9, 0x1F, 0x06, 0xE0, 0xF9,
0xCE, 0x18, 0x31, 0xE7, 0xD6, 0x00, 0x29, 0xE2,
0xB6, 0x6A, 0x23, 0xE2, 0xCE, 0x04, 0x35, 0xE3,
0x80, 0x5E, 0x21, 0xE3, 0x34, 0x53, 0x98, 0xE2,
0x7C, 0x60, 0xE3, 0xE2, 0x46, 0x0C, 0xB5, 0xE2,
0xD2, 0x2B, 0x06, 0xE0, 0xA8, 0x1F, 0x48, 0xE3,
0x12, 0x0B, 0xE6, 0x01, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xEA, 0x00, 0x71,
0x00, 0xFF, 0xFF, 0xFF, 0x64, 0x02
};
// Prints all words of the buffer
void debugPrint(word* buff, int len) {
Serial.print("\n\t00\t01\t02\t03\t04\t05\t06\t07\t08\t09\t0A\t0B\t0C\t0D\t0E\t0F");
for(int i = 0; i < len; i++) {
if(i % 16 == 0) {
Serial.println();
Serial.print(i, HEX);
}
Serial.print("\t");
if(buff[i] < 0x10) {
Serial.print("0");
}
Serial.print(buff[i], HEX);
}
}
word swapBytes(word value) {
return (value >> 8) | (value << 8);
}
void setup() {
bool longMode = EEPROM_93C66_MODE_16BIT;
// bool longMode = EEPROM_93C66_MODE_8BIT ;
eeprom_93C66 e = eeprom_93C66(pCS, pSK, pDI, pDO);
e.set_mode(longMode);
Serial.begin(115200);
Serial.println("Writing data...");
// First, enable EW (Erase/Write)
e.ew_enable();
// if(longMode) {
// writeBuffer = "This is a string written in the 16-bit organization.\nHi, world!\0";
// } else {
// writeBuffer = "This is a string written in the 8-bit organization.\nAs you can see, the address space for this mode is much bigger!\nHey, world!\0";
// }
int len = 256;//longMode ? 128 : 512; // Increase size for more data up to 128 : 512
// Write your data
for(int i = 0; i < len; i++) {
e.write(i, writeBuffer[i]);
Serial.println(String(i));
}
// Optionally, disable EW after writing
e.ew_disable();
Serial.println("Writing data succes");
Serial.println("Reading data...\n");
uint16_t readBuffer[len];
for (int i = 0; i < len; i++) {
word r = e.read(i);
word swapped = swapBytes(r);
readBuffer[i] = swapped;
char buffer[6];
sprintf(buffer, "%04X", swapped);
Serial.print(buffer);
Serial.print(" ");
}
}
void loop() {}
output:
Writing data...
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
....
254
255
Writing data succes
Reading data...
A200 0000 FF00 FF00 FF00 FF0F DA00 6E00 FF00
FF00 4B00 3000 1C00 8800 FF00 FF00 2000 0080
0000 0000 4B00 2200 D000 0700 A000 0F00 7000
1700 E000 FFFF 2E00 A300 E900 0200 9900 0500
2F00 0800 0B00 1000 0000 F300 FF00 FF00 FF00
FF00 FF00 FF00 FF00 FF00 FF00 FF00 0700 FF00
FF00 FF00 FF00 FF00 6C00 0300 1200 0000 FF00
FF00 0000 FF00 EB00 0000 CE00 0200 9F00 0200
6D00 0200 1B00 0200 FF03 7700 8B00 0100 BC00
0000 FF00 FF00 FF00 FF00 C900 0900 0080 0100
8900 0100 FF00 FF00 FF00 FF00 2100 0F00 FF00
FF00 F0FF FF00 FF00 FF00 1F00 0600 E000 F900
1F00 0600 E000 FF00 FFFF 0600 E000 F900 1F00
0600 E000 F900 1F00 0600 E000 0000 1F00 0600
E000 F900 FFFF 0600 E000 F900 1F00 0600 E000
0100 1F00 0600 E000 F900 FFFF FFFF FFFF FFFF
FFFF FFFF FFFF 0000 FFFF FFFF FFFF FFFF FFFF
so every 1 byte step there is byte 00 which should not be included when written before, which should be A200FF instead of A2000000FF, so there are additional bytes that should not be there.