Created
July 8, 2019 09:53
-
-
Save mcenderdragon/da72535df511c4e686d66218d8e652df to your computer and use it in GitHub Desktop.
EEPROM problems
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
SPI Master Demo Sketch | |
Connect the SPI Master device to the following pins on the esp8266: | |
GPIO NodeMCU Name | Uno | |
=================================== | |
15 D8 SS | D10 | |
13 D7 MOSI | D11 | |
12 D6 MISO | D12 | |
14 D5 SCK | D13 | |
Note: If the ESP is booting at a moment when the SPI Master has the Select line HIGH (deselected) | |
the ESP8266 WILL FAIL to boot! | |
See SPISlave_SafeMaster example for possible workaround | |
*/ | |
#include <SPI.h> | |
#define normal | |
#ifdef normal | |
#define EE_READ 0b00000011//3 | |
#define EE_WRITE 0b00000010//2 | |
#define EE_WRDI 0b00000100//4 | |
#define EE_WREN 0b00000110//6 | |
#define EE_RDSR 0b00000101//5 | |
#define EE_WRSR 0b00000001//1 | |
#else | |
#define EE_READ 0b11000000 | |
#define EE_WRITE 0b01000000 | |
#define EE_WRDI 0b00100000 | |
#define EE_WREN 0b01100000 | |
#define EE_RDSR 0b10100000 | |
#define EE_WRSR 0b10000000 | |
#endif | |
class ESPMaster { | |
private: | |
uint8_t _ss_pin; | |
uint8_t _wp_pin; | |
public: | |
ESPMaster(uint8_t ss_pin, uint8_t wp_pin) | |
{ | |
_ss_pin = ss_pin; | |
_wp_pin = wp_pin; | |
} | |
void begin() { | |
pinMode(_ss_pin, OUTPUT); | |
pinMode(_wp_pin, OUTPUT); | |
digitalWrite(_ss_pin, HIGH); | |
digitalWrite(_wp_pin, LOW); | |
} | |
uint16_t readStatus() { | |
digitalWrite(_ss_pin, LOW); | |
delay(1); | |
uint16_t status = (SPI.transfer(EE_RDSR)<<8); | |
status |= SPI.transfer(0) & 0xFF; | |
digitalWrite(_ss_pin, HIGH); | |
return status; | |
} | |
void writeEnable() | |
{ | |
digitalWrite(_ss_pin, LOW); | |
delay(1); | |
SPI.transfer(EE_WREN); | |
digitalWrite(_ss_pin, HIGH); | |
} | |
void writeDisable() | |
{ | |
digitalWrite(_ss_pin, LOW); | |
SPI.transfer(EE_WRDI); | |
digitalWrite(_ss_pin, HIGH); | |
} | |
void writeStatus(uint8_t status) { | |
writeEnable(); | |
digitalWrite(_wp_pin, HIGH); | |
digitalWrite(_ss_pin, LOW); | |
SPI.transfer(EE_WRSR); | |
SPI.transfer(status & 0x0F); | |
digitalWrite(_wp_pin, LOW); | |
digitalWrite(_ss_pin, HIGH); | |
} | |
void readData(uint8_t address, uint8_t *data, uint8_t length) | |
{ | |
digitalWrite(_ss_pin, LOW); | |
SPI.transfer(EE_READ); | |
SPI.transfer(address); | |
for (uint8_t i = 0; i < length; i++) { | |
data[i] = SPI.transfer(0); | |
} | |
digitalWrite(_ss_pin, HIGH); | |
} | |
bool writeData(uint8_t address, uint8_t data) | |
{ | |
writeEnable(); | |
digitalWrite(_wp_pin, HIGH); | |
digitalWrite(_ss_pin, LOW); | |
SPI.transfer(EE_WRITE); | |
SPI.transfer(address & 0x7F); | |
SPI.transfer(data & 0xFF); | |
digitalWrite(_ss_pin, HIGH); | |
digitalWrite(_wp_pin, LOW); | |
uint8_t check = 0; | |
readData(address, &check, 1); | |
return check == data; | |
} | |
}; | |
#define SS 0 | |
#define WP 4 | |
ESPMaster esp(SS, WP); | |
SPISettings spidefault(4000000, MSBFIRST, SPI_MODE0); | |
void setup() { | |
Serial.begin(74880); | |
SPI.setDataMode(SPI_MODE0); //CPOL=0; CPHA=0; -> mode=0 | |
SPI.setClockDivider(SPI_CLOCK_DIV128); | |
SPI.setBitOrder(MSBFIRST); | |
SPI.begin(); | |
esp.begin(); | |
delay(1000); | |
Serial.println("Started"); | |
Serial.print("Satus "); | |
SPI.beginTransaction(spidefault); | |
digitalWrite(SS, LOW); | |
delay(1000); | |
uint8_t status; | |
status = SPI.transfer(EE_RDSR); | |
Serial.print(status); | |
Serial.print(" "); | |
status = SPI.transfer(0); | |
delay(500); | |
digitalWrite(SS, HIGH); | |
SPI.endTransaction(); | |
Serial.println(status); | |
} | |
int i = 0; | |
uint8_t j = 0; | |
void sendLoggedBase(uint8_t t) | |
{ | |
Serial.print("Send "); | |
Serial.print(t); | |
Serial.print(" got "); | |
SPI.transfer(t); | |
Serial.print(SPI.transfer(0)); | |
Serial.println(); | |
} | |
void sendLogged(uint8_t t) | |
{ | |
digitalWrite(SS, LOW); | |
delay(1); | |
sendLoggedBase(t); | |
digitalWrite(SS, HIGH); | |
delay(1); | |
} | |
void loop() | |
{ | |
uint32_t cks[] = {SPI_CLOCK_DIV128}; | |
for(uint8_t state=0;state<4;state++) | |
{ | |
SPI.setDataMode(state); //CPOL=0; CPHA=0; -> mode=0 | |
Serial.println(state); | |
for(uint8_t s=0;s<1;s++) | |
{ | |
SPI.setClockDivider(cks[s]); | |
uint16_t status = esp.readStatus(); | |
Serial.print(status); | |
esp.writeEnable(); | |
delay(1); | |
Serial.print(" "); | |
status = esp.readStatus(); | |
Serial.print(status); | |
Serial.print(" "); | |
uint8_t d[33]; | |
d[32]=0; | |
esp.readData(0, d, 32); | |
Serial.print((char*)d); | |
Serial.println(); | |
digitalWrite(WP, HIGH); | |
sendLogged(0); | |
sendLogged(1); | |
sendLogged(2); | |
sendLogged(5);//read status | |
sendLogged(5);//read status | |
digitalWrite(SS, LOW); | |
sendLoggedBase(3); | |
sendLoggedBase(0); | |
sendLoggedBase(1); | |
sendLoggedBase(2); | |
sendLoggedBase(3); | |
sendLoggedBase(4); | |
sendLoggedBase(5); | |
sendLoggedBase(6); | |
digitalWrite(SS, HIGH); | |
delay(1); | |
digitalWrite(SS, LOW); | |
delay(1);//write enable | |
Serial.print("Write "); | |
Serial.print(6); | |
SPI.write(6); | |
Serial.println(); | |
digitalWrite(SS, HIGH); | |
delay(1); | |
sendLogged(5);//read status | |
sendLogged(5);//read status | |
digitalWrite(SS, LOW); | |
delay(1);//write diable | |
Serial.print("Write "); | |
Serial.print(4); | |
SPI.write(4); | |
Serial.println(); | |
digitalWrite(SS, HIGH); | |
delay(1); | |
sendLogged(5);//read status | |
sendLogged(5);//read status | |
digitalWrite(SS, LOW); | |
delay(1);//write enable | |
Serial.print("Write "); | |
Serial.print(6); | |
SPI.write(6); | |
Serial.println(); | |
digitalWrite(SS, HIGH); | |
delay(1); | |
sendLogged(5);//read status | |
digitalWrite(SS, LOW); | |
sendLoggedBase(2); | |
sendLoggedBase(1); | |
sendLoggedBase(23); | |
digitalWrite(SS, HIGH); | |
sendLogged(5);//read status | |
digitalWrite(WP, LOW); | |
} | |
} | |
/* | |
uint8_t data[33]; | |
data[32] = 0; | |
esp.readData(0, data, 32); | |
Serial.println((char*)data); | |
i++; | |
j++; | |
if(j>=32) | |
j=0; | |
Serial.print("W: "); | |
Serial.print(j); | |
Serial.print("->"); | |
Serial.print(i); | |
if(esp.writeData(j, i)) | |
Serial.println(" Done"); | |
else | |
Serial.println(" Fail");*/ | |
delay(1000); | |
ESP.deepSleep(1e8); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11:49:58.053 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6) | |
11:49:58.053 -> | |
11:49:58.053 -> load 0x4010f000, len 1384, room 16 | |
11:49:58.053 -> tail 8 | |
11:49:58.053 -> chksum 0x2d | |
11:49:58.053 -> csum 0x2d | |
11:49:58.053 -> v8b899c12 | |
11:49:58.053 -> ~ld | |
Started | |
11:49:59.106 -> Satus 255 0 | |
11:50:00.594 -> 0 | |
11:50:00.594 -> 0 0 ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ | |
11:50:00.660 -> Send 0 got 255 | |
11:50:00.660 -> Send 1 got 255 | |
11:50:00.660 -> Send 2 got 255 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 3 got 0 | |
11:50:00.660 -> Send 0 got 255 | |
11:50:00.660 -> Send 1 got 255 | |
11:50:00.660 -> Send 2 got 255 | |
11:50:00.660 -> Send 3 got 255 | |
11:50:00.660 -> Send 4 got 255 | |
11:50:00.660 -> Send 5 got 255 | |
11:50:00.660 -> Send 6 got 255 | |
11:50:00.660 -> Write 6 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Write 4 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Write 6 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 2 got 0 | |
11:50:00.660 -> Send 1 got 0 | |
11:50:00.660 -> Send 23 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> 1 | |
11:50:00.660 -> 0 0 | |
11:50:00.660 -> Send 0 got 0 | |
11:50:00.660 -> Send 1 got 0 | |
11:50:00.660 -> Send 2 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 5 got 0 | |
11:50:00.660 -> Send 3 got 0 | |
11:50:00.660 -> Send 0 got 0 | |
11:50:00.660 -> Send 1 got 0 | |
11:50:00.660 -> Send 2 got 0 | |
11:50:00.729 -> Send 3 got 0 | |
11:50:00.729 -> Send 4 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 6 got 0 | |
11:50:00.729 -> Write 6 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Write 4 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Write 6 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 2 got 0 | |
11:50:00.729 -> Send 1 got 0 | |
11:50:00.729 -> Send 23 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> 2 | |
11:50:00.729 -> 0 0 ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ | |
11:50:00.729 -> Send 0 got 255 | |
11:50:00.729 -> Send 1 got 255 | |
11:50:00.729 -> Send 2 got 255 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 3 got 0 | |
11:50:00.729 -> Send 0 got 255 | |
11:50:00.729 -> Send 1 got 255 | |
11:50:00.729 -> Send 2 got 255 | |
11:50:00.729 -> Send 3 got 255 | |
11:50:00.729 -> Send 4 got 255 | |
11:50:00.729 -> Send 5 got 255 | |
11:50:00.729 -> Send 6 got 255 | |
11:50:00.729 -> Write 6 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Send 5 got 0 | |
11:50:00.729 -> Write 4 | |
Send 5 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Write 6 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 2 got 0 | |
11:50:00.797 -> Send 1 got 0 | |
11:50:00.797 -> Send 23 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> 3 | |
11:50:00.797 -> 0 0 | |
11:50:00.797 -> Send 0 got 0 | |
11:50:00.797 -> Send 1 got 0 | |
11:50:00.797 -> Send 2 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 3 got 0 | |
11:50:00.797 -> Send 0 got 0 | |
11:50:00.797 -> Send 1 got 0 | |
11:50:00.797 -> Send 2 got 0 | |
11:50:00.797 -> Send 3 got 0 | |
11:50:00.797 -> Send 4 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 6 got 0 | |
11:50:00.797 -> Write 6 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Write 4 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Write 6 | |
11:50:00.797 -> Send 5 got 0 | |
11:50:00.797 -> Send 2 got 0 | |
11:50:00.797 -> Send 1 got 0 | |
11:50:00.797 -> Send 23 got 0 | |
11:50:00.797 -> Send 5 got 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment