AT45DB161 (EEPROM)+ nodemu(ESP8266) using sip?

45DB161E-Adesto.pdf (1.1 MB)
hello ,
i am using AT45DB161 (EEPROM) with nodemu(ESP8266) i want know how to read and write on EEPROM(AT45DB161) , i ind example but it is not working for me , compiler show error . Please help me hoe to write and read data .`

#include <SPI.h>
#include <ESP8266WiFi.h>
#define DATAOUT MOSI //MOSI
#define DATAIN  MISO //MISO
#define SPICLOCK  SCLK //sck
#define SLAVESELECT CS//

//opcodes
#define WREN  6
#define WRDI  4
#define RDSR  5
#define WRSR  1
#define READ  3
#define WRITE 2

byte eeprom_output_data;
byte eeprom_input_data=0;
byte clr;
int address=0;
//data buffer
char buffer [128];

void fill_buffer()
{

  for (int I=0;I<128;I++)

  {

    buffer[I]=I;

  }
}

char spi_transfer(volatile char data)
{

  SPDR = data;                    // Start the transmission

  while (!(SPSR & (1<<SPIF)))     // Wait the end of the transmission

  {

  };

  return SPDR;                    // return the received byte
}

void setup()
{

  Serial.begin(9600);

  pinMode(DATAOUT, OUTPUT);

  pinMode(DATAIN, INPUT);

  pinMode(SPICLOCK,OUTPUT);

  pinMode(SLAVESELECT,OUTPUT);

  digitalWrite(SLAVESELECT,HIGH); //disable device

  // SPCR = 01010000

  //interrupt disabled,spi enabled,msb 1st,master,clk low when idle,

  //sample on leading edge of clk,system clock/4 rate (fastest)

  SPCR = (1<<SPE)|(1<<MSTR);

  clr=SPSR;

  clr=SPDR;

  delay(10);

  //fill buffer with data

  fill_buffer();

  //fill eeprom w/ buffer

  digitalWrite(SLAVESELECT,LOW);

  spi_transfer(WREN); //write enable

  digitalWrite(SLAVESELECT,HIGH);

  delay(10);

  digitalWrite(SLAVESELECT,LOW);

  spi_transfer(WRITE); //write instruction

  address=0;

  spi_transfer((char)(address>>8));   //send MSByte address first

  spi_transfer((char)(address));      //send LSByte address

  //write 128 bytes

  for (int I=0;I<128;I++)

  {

    spi_transfer(buffer[I]); //write data byte

  }

  digitalWrite(SLAVESELECT,HIGH); //release chip

  //wait for eeprom to finish writing

  delay(3000);

  Serial.print('h',BYTE);

  Serial.print('i',BYTE);

  Serial.print('\n',BYTE);//debug

  delay(1000);
}

byte read_eeprom(int EEPROM_address)
{

  //READ EEPROM

  int data;

  digitalWrite(SLAVESELECT,LOW);

  spi_transfer(READ); //transmit read opcode

  spi_transfer((char)(EEPROM_address>>8));   //send MSByte address first

  spi_transfer((char)(EEPROM_address));      //send LSByte address

  data = spi_transfer(0xFF); //get data byte

  digitalWrite(SLAVESELECT,HIGH); //release chip, signal end transfer

  return data;
}

void loop()
{

  eeprom_output_data = read_eeprom(address);

  Serial.print(eeprom_output_data,DEC);

  Serial.print('\n',BYTE);

  address++;

  if (address == 128)

    address = 0;

  delay(500); //pause for readability
}

...which you chose not to share.

Good luck.

pleas help

Please share.
I'm guessing you're expecting AVR register references to work on the ESP, but without your error messages, it really is just a guess.

i want to save data on eeprom usin SPI Communication with ESP

OK, I wish you all the best in your endeavours.

sir i know my effort is wrong ,but can you suggest me the right way, you can ignore code and think about my task.

The first step on the right way is to post the error report from the compiler.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.