23LC1024 SRAM problems...

I am trying to read and write to 23LC1024 SRAM chip.

I am using a Nanode gateway with the followng pin out:

Digital 0 Serial RX
Digital 1 Serial TX
Digital 2 RFM12B Interrupt (INT 0)
Digital 3 Interrupt / Wake Up Alarm Output from MCP7941x - if installed
Digital 4 SD Card
Digital 5 Green LED
Digital 6 Red LED
Digital 7 UNI/O bus: MAC Address (11AA02E48) - if installed
Digital 8 Slave Select for ENC28J60 Ethernet
Digital 9 Slave Select for 23K256 SRAM (DIP) - if installed
Digital 10 Slave Select for RFM12B
Digital 11 SPI bus: Shared MOSI (Master Output, Slave Input)
Digital 12 SPI bus: Shared MISO (Master Input, Slave Output)
Digital 13 SPI bus: Shared Serial Clock (output from master)
Analog 0 Spare and available for use
Analog 1 Spare and available for use
Analog 2 Spare and available for use
Analog 3 Spare and available for use
Analog 4 I2C Bus: SDA (data)
Analog 5 I2C Bus: SCL (clock)

I have the SRAM wired up the following way using breadboard jumper cables

Chip Nanode
1 9 SS
2 12 MISO
3 NC NC
4 GND Vss
5 11 MOSI
6 13 SCK
7 +5V ~HOLD
8 +5V Vcc

When I run the example sketches from this post here:
http://forum.arduino.cc/index.php/topic,182918.0.html

I get the following on the output which doesnt seem correct

Ram Tests Begin.

Fill Memory with 0xFF.

0: 0 0 0 0 0 0 0 0 0 0
A: 0 0 0 0 0 0 0 0 0 0
14: 0 0 0 0 0 0 0 0 0 0
1E: FF FF FF FF FF FF FF FF FF FF
28: FF FF FF FF FF FF FF FF FF FF
32: FF FF 0 0 0 0 0 0 0 0
3C: 0 0 0 0 0 0 0 0 0 0
46: 0 0 0 0 0 0 0 0 0 0
50: 0 0 0 0 0 0 0 0 0 0
5A: 0 0 0 0 0 0 0 0 0 0

1FF9A: 0 0 0 0 0 0 0 0 0 0
1FFA4: 0 FF FF FF FF FF FF FF FF FF
1FFAE: FF FF FF FF FF FF FF FF 0 0
1FFB8: 0 0 0 0 0 0 0 0 0 0
1FFC2: 0 0 0 0 0 0 0 0 0 0
1FFCC: 0 0 0 0 0 0 0 0 0 0
1FFD6: 0 0 0 0 0 0 0 0 0 0
1FFE0: 0 FF FF FF FF FF FF FF FF FF
1FFEA: FF FF FF FF FF FF FF FF FF FF
1FFF4: C0 0 0 0 0 0 0 0 0 0

Fill Memory with 0xAA.

0: FF FF FF FF FF FF FF FF FF FF
A: FF FF FF FF FF FF FF FF FF FF
14: FF FF FF FF FF C0 0 0 0 0
1E: 0 0 0 0 0 0 0 0 0 0
28: 0 0 0 0 0 0 0 0 0 0
32: 0 0 0 0 0 0 0 0 0 0
3C: 0 0 0 0 0 0 0 0 0 0
46: 0 0 0 0 0 0 0 0 0 0
50: 0 0 0 0 0 0 0 0 0 FF
5A: FF FF FF FF FF FF FF FF FF FF

1FF9A: FF FF FF FF FF FF FF C0 0 0
1FFA4: 0 0 0 0 0 0 0 0 0 0
1FFAE: 0 0 0 0 0 0 0 0 0 0
1FFB8: 0 0 0 0 0 0 0 0 0 0
1FFC2: 0 0 0 0 0 0 0 0 0 0
1FFCC: 0 FF FF FF FF FF FF FF FF FF
1FFD6: FF FF FF FF FF FF FF FF FF FF
1FFE0: 80 0 0 0 0 0 0 0 0 0
1FFEA: 0 0 0 0 0 0 0 0 0 0
1FFF4: 0 0 0 0 0 0 0 0 0 0

Fill Memory with Buffer.

0: FF FF FF FF FF FF FF FF FF FF
A: FF FF 0 0 0 0 0 0 0 0
14: 0 0 0 0 0 0 0 0 0 0
1E: 0 0 0 0 0 0 0 0 0 0
28: 0 0 0 0 0 0 0 0 0 0
32: 0 0 0 0 0 0 0 0 0 0
3C: 0 0 0 0 0 0 0 0 0 0
46: 0 0 0 0 0 0 0 0 0 0
50: 0 FF FF FF FF FF FF FF FF FF
5A: FF FF FF FF FF FF FF FF FF FF

1FF9A: 0 0 0 0 0 0 0 0 0 0
1FFA4: 0 0 0 0 0 0 0 0 0 0
1FFAE: 0 0 0 0 0 0 0 0 0 0
1FFB8: 0 0 0 0 0 0 0 0 0 0
1FFC2: 0 0 0 0 0 0 FF FF FF FF
1FFCC: FF FF FF FF FF FF FF FF FF FF
1FFD6: FF 0 0 0 0 0 0 0 0 0
1FFE0: 0 0 0 0 0 0 0 0 0 0
1FFEA: 0 0 0 0 0 0 0 0 0 0
1FFF4: 0 0 0 0 0 0 0 0 0 0

Read Buffer.



Write byte.

0: FF FF 0 0 0 0 0 0 0 0
A: 0 0 0 0 0 0 0 0 0 0
14: 0 0 0 0 0 0 0 0 0 0
1E: 0 0 0 0 0 0 0 0 0 0
28: 0 0 0 0 0 0 0 0 0 0
32: 0 0 0 0 0 0 0 0 0 0
3C: 0 0 0 0 0 0 0 0 0 0
46: 0 0 FF FF FF FF FF FF FF FF
50: FF FF FF FF FF FF FF FF FF FF
5A: FF FF FF 0 0 0 0 0 0 0

1FF9A: 0 0 0 0 0 0 0 0 0 0
1FFA4: 0 0 0 0 0 0 0 0 0 0
1FFAE: 0 0 0 0 0 0 0 0 0 0
1FFB8: 0 0 0 0 0 0 0 0 0 0
1FFC2: 0 FF FF FF FF FF FF FF FF FF
1FFCC: FF FF FF FF FF FF 0 0 0 0
1FFD6: 0 0 0 0 0 0 0 0 0 0
1FFE0: 0 0 0 0 0 0 0 0 0 0
1FFEA: 0 0 0 0 0 0 0 0 0 0
1FFF4: 0 0 0 0 0 0 0 0 0 0

Ram Tests Finished.

Code that I am using

// Tested uning a 23LC1024 sRam chip in a 8 pin DIP package
// Test connections are...
// Chip UNO MEGA  NAME
//  1   9   9     SS    (Hardware SS Pin (10 or 53) needs to remain output no matter what other pin you may for SS)
//  2   12  50    MISO
//  3   NC  NC
//  4   GND GND   Vss
//  5   11  51    MOSI
//  6   13  52    SCK
//  7   +5V +5V   ~HOLD
//  8   +5V +5V   Vcc


#include <SPI.h>
#include <SpiRAM.h>

const uint32_t ramSize = 0x1FFFF;           // 128K x 8 bit
const byte LED = 13;

char buffer[] = {"ABCDEFGHIJ"};
char buffer2[sizeof(buffer)];

SpiRAM sRam(9);                             // Initialize the RAM with non standard SS

void setup(){
  pinMode(LED,OUTPUT);
  digitalWrite(LED,LOW);  // Turn off LED (Mega LED stays on else)
 
  Serial.begin(115200);
  Serial.println("Ram Tests Begin.");
 
 // SPI.setClockDivider(SPI_CLOCK_DIV2);
 
  Serial.println("\r\nFill Memory with 0xFF.");
  sRam.fillBytes(0,0xFF,ramSize);
  dumpsRam(0,100);
  dumpsRam(ramSize - 100, 100);

  Serial.println("\r\nFill Memory with 0xAA.");
  sRam.fillBytes(0,0xAA,ramSize);
  dumpsRam(0,100);
  dumpsRam(ramSize - 100, 100);

  Serial.println("\r\nFill Memory with Buffer.");
  for (uint32_t x = 0; x < ramSize - (sizeof(buffer) - 1); x += sizeof(buffer) - 1){
    sRam.writeBuffer(x, buffer, sizeof(buffer) - 1);
  }
  dumpsRam(0,100);
  dumpsRam(ramSize - 100, 100);

  Serial.println("\r\nRead Buffer.");
  sRam.readBuffer(0,buffer2,sizeof(buffer2) - 1);
  Serial.println(buffer2);
  sRam.readBuffer(5,buffer2,sizeof(buffer2) - 1);
  Serial.println(buffer2);

  Serial.println("\r\nWrite byte.");
  for (uint32_t x = 0; x <= ramSize; x++){
    if((x % 1024) == 0) digitalWrite(LED,!digitalRead(LED));
    sRam.writeByte(x, (byte) x / 10);
  }
  dumpsRam(0,100);
  dumpsRam(ramSize - 100, 100);

  Serial.println("\r\nRam Tests Finished.");
}

void loop(){
}

void dumpsRam(uint32_t addr, uint32_t length)
{
  // block to 10
  addr = addr / 10 * 10;
  length = (length + 9)/10 * 10;

  byte b = sRam.readByte(addr);
  for (int i = 0; i < length; i++)
  {
    if (addr % 10 == 0)
    {
      Serial.println();
      Serial.print(addr, HEX);
      Serial.print(":\t");
    }
    Serial.print(b, HEX);
    b = sRam.readByte(++addr);
    Serial.print("\t");
  }
  Serial.println();
}

void dumpsRam2(uint32_t addr, uint32_t length)
{
  // block to 10
  addr = addr / 10 * 10;
  length = (length + 9)/10 * 10;

  char b = sRam.readByte(addr);
  for (int i = 0; i < length; i++)
  {
    if (addr % 10 == 0)
    {
      Serial.println();
      Serial.print(addr);
      Serial.print(":\t");
    }
    Serial.print(b);
    b = sRam.readByte(++addr);
    Serial.print("\t");
  }
  Serial.println();
}

Any ideas?

How have you got the SRAM chip connected? Is it using breadboard and patch wires or is it soldered into a PCB?
It seems some people have problems with this SRAM and/or library though I have only once had read errors and altering the SPI clock speed cured that. I put the problem down to poor connection/noise as later test using same breadboard & arduino had no problems. Grumpy_Mike also had problems but never reported back if and how he cured them, maybe he can comment?

I am using a bread boad and patch cables.

I tried settig SPI.setClockDivider to 2,4,8 but that had no effect.

I am not familiar with the Nanode Gateway but a quick look online says it's a 3.3V device so maybe that's a problem. Also are you sure the pin your using for SS is not used by other built in peripherals.