Good evening, I'm trying to develop a program that takes a data of my choice and writes it in a certain area of the memory, for now with poor results, can someone help me? I am using a 2gb sd and an adapter of this model.
I enclose the code and thank you very much: D
#define DATAOUT 11//MOSI
#define DATAIN 12//MISO
#define SPICLOCK 13//sck
#define CHIPSELECT 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
int numByte = 4;
char buffer [4] = {'C','I','A','O'};
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
delay(10);
return SPDR; // return the received byte
}
void setup()
{
Serial.begin(9600);
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(CHIPSELECT,OUTPUT);
digitalWrite(CHIPSELECT,HIGH); //disable device
SPCR = (1<<SPE)|(1<<MSTR);
clr=SPSR;
clr=SPDR;
delay(10);
digitalWrite(CHIPSELECT,LOW);
spi_transfer(WREN); //write enable
digitalWrite(CHIPSELECT,HIGH);
delay(10);
digitalWrite(CHIPSELECT,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 numByte bytes
for (int I=0;I<numByte;I++)
{
spi_transfer(buffer[I]); //write data byte
}
digitalWrite(CHIPSELECT,HIGH); //release chip
//wait for eeprom to finish writing
delay(3000);
Serial.print('h');
Serial.print('i');
Serial.print('\n');//debug
delay(1000);
lettura_eeprom(address);
Serial.print("fine.");
}
byte read_eeprom(int EEPROM_address)
{
//READ EEPROM
int data;
digitalWrite(CHIPSELECT,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(CHIPSELECT,HIGH); //release chip, signal end transfer
return data;
}
void lettura_eeprom(int address){
for(int i = 0; i<numByte;i++){
eeprom_output_data = read_eeprom(address);
Serial.print(eeprom_output_data);
Serial.print('\n');
address++;
delay(500); //pause for readability
}
}
void loop()
{
}