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?