I have been having problems with saving data on an spi chip, 4x the 23lc1024, and was hoping if someone could help me out. ( I am using Arduino Uno)
This is the circuit and arduino connections for a SPI.
I have 4 SPI's which share all the arduino pins but all need a unique SS pin (Digital pin 10 ->7)

This is the code:
#include <SPI.h>
//SRAM opcodes
#define RDSR 5
#define WRSR 1
#define READ 3
#define WRITE 2
//Byte transfer functions
uint8_t Spi23LC1024Read8(uint32_t address) {
uint8_t read_byte;
PORTB &= ~(1<<PORTB2); //set SPI_SS low
SPI.transfer(READ);
SPI.transfer((uint8_t)(address >> 16) & 0xff);
SPI.transfer((uint8_t)(address >> 8) & 0xff);
SPI.transfer((uint8_t)address);
read_byte = SPI.transfer(0x00);
PORTB |= (1<<PORTB2); //set SPI_SS high
Serial.print("READ. ");
Serial.print("address: ");
Serial.print(address);
Serial.print(", value: ");
return read_byte;
}
void Spi23LC1024Write8(uint32_t address, uint8_t data_byte) {
PORTB &= ~(1<<PORTB2); //set SPI_SS low
SPI.transfer(WRITE);
SPI.transfer((uint8_t)(address >> 16) & 0xff);
SPI.transfer((uint8_t)(address >> 8) & 0xff);
SPI.transfer((uint8_t)address);
SPI.transfer(data_byte);
PORTB |= (1<<PORTB2); //set SPI_SS high
Serial.print("WRITE. ");
Serial.print("address= ");
Serial.print(address);
Serial.print(", data byte= ");
Serial.println(data_byte);
}
void setup(void) {
uint32_t i;
uint8_t value;
Serial.begin(9600);
SPI.begin();
for (i=0; i<32; i++) {
Spi23LC1024Write8(i, (uint8_t)i);
}
for (i=0; i<32; i++) {
value = Spi23LC1024Read8(i);
Serial.println((uint16_t)value);
}
}
void loop() {
}
This is what the serial monitor returns:
WRITE. address= 0, data byte= 0
WRITE. address= 1, data byte= 1
WRITE. address= 2, data byte= 2
WRITE. address= 3, data byte= 3
WRITE. address= 4, data byte= 4
WRITE. address= 5, data byte= 5
WRITE. address= 6, data byte= 6
WRITE. address= 7, data byte= 7
WRITE. address= 8, data byte= 8
WRITE. address= 9, data byte= 9
WRITE. address= 10, data byte= 10
WRITE. address= 11, data byte= 11
WRITE. address= 12, data byte= 12
WRITE. address= 13, data byte= 13
WRITE. address= 14, data byte= 14
WRITE. address= 15, data byte= 15
WRITE. address= 16, data byte= 16
WRITE. address= 17, data byte= 17
WRITE. address= 18, data byte= 18
WRITE. address= 19, data byte= 19
WRITE. address= 20, data byte= 20
WRITE. address= 21, data byte= 21
WRITE. address= 22, data byte= 22
WRITE. address= 23, data byte= 23
WRITE. address= 24, data byte= 24
WRITE. address= 25, data byte= 25
WRITE. address= 26, data byte= 26
WRITE. address= 27, data byte= 27
WRITE. address= 28, data byte= 28
WRITE. address= 29, data byte= 29
WRITE. address= 30, data byte= 30
WRITE. address= 31, data byte= 31
READ. address: 0, value: 195
READ. address: 1, value: 191
READ. address: 2, value: 0
READ. address: 3, value: 253
READ. address: 4, value: 0
READ. address: 5, value: 0
READ. address: 6, value: 0
READ. address: 7, value: 145
READ. address: 8, value: 255
READ. address: 9, value: 255
READ. address: 10, value: 255
READ. address: 11, value: 255
READ. address: 12, value: 255
READ. address: 13, value: 255
READ. address: 14, value: 255
READ. address: 15, value: 247
READ. address: 16, value: 255
READ. address: 17, value: 255
READ. address: 18, value: 255
READ. address: 19, value: 255
READ. address: 20, value: 255
READ. address: 21, value: 255
READ. address: 22, value: 255
READ. address: 23, value: 255
READ. address: 24, value: 255
READ. address: 25, value: 255
READ. address: 26, value: 255
READ. address: 27, value: 255
READ. address: 28, value: 255
READ. address: 29, value: 255
READ. address: 30, value: 255
READ. address: 31, value: 253
The read values I get are always the same , So I guess the problem lays with the writing to the chip.
I hope someone can help me out here, many thanks


