Grabar y Leer Eeprom SPI

Buenas Gente :

Estoy con una EEprom SPI (de 128k en concreto CAT25128LI de Onsemi ) y sigiendo el ejemplo de http://arduino.cc/es/Tutorial/SPIEEPROM
conecto la placa perfecto con la memoria pero a la hora de cargar el programa K.O. error de compilacion ??????

EJ: del sketch completo:

#define DATAOUT 11//MOSI
#define DATAIN 12//MISO
#define SPICLOCK 13//sck
#define SLAVESELECT 10//ss

//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;*

  • }*
    }
    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*); //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*_
    }
    Error de compilacion en void setup .
    Soy novato en esto .. hay algun ejemplo mas sencillo ??? el el IDE de Arduino los ejemplos de EEPROM son de su propia eeprom no externa , es decir sin comunicación verdad???
    Saludos
1 Like

Por lo que veo, tienes algunos problemas con los arrays y con la función serial.print

Cuando llenas el buffer, fíjate que en el ejemplo pone

buffer[I]=I; y tú tienes buffer=I;

Luego da error de compilación porque parece que ya no se puede usar serial.print(var,BYTE);, sino que debes cambiarlos por serial.write(var);

A mí ahora me compila con 1.0.1 y 1.0.2

:wink:

PD: edito porque el elemento del array cambia el formato a cursiva y no aparece bien. Como a ti también te pasa, supongo que también lo tendrás bien. Para pegar códico usa los tags de CODE :wink:

Gracias OoTzToO .... en cuanto tenga un ratito le doy caña y os comento .

Todavía ando un poco novel jajajjaja.