Go Down

Topic: Due + 23lc1024 sram not working (Read 227 times) previous topic - next topic

altronandon

Hi

I want to store some data to a 23lc1024 Sram but I am having trouble.

I have tried 4 or 5 different Sram Libraries and they all fail. The DUE hangs/stops at statup.

//************* code example *************

#include <SPI.h>
#include <SpiRam_Extended.h>


#define SS_PIN 10

SpiRAM SpiRam(SPI_CLOCK_DIV4, SS_PIN, CHIP_23LC1024);     //DUE hangs/stops here.

void setup()   {               
  Serial.begin(115200);
}

void loop()                   
{
  char data_to_chip[17] = "Testing 90123456";
  char data_from_chip[17] = "                ";
  int i = 0;

  // Write some data to RAM
  SpiRam.write_stream(SPI_CLOCK_DIV4, data_to_chip, 16);
  delay(100);

  // Read it back to a different buffer
  SpiRam.read_stream(SPI_CLOCK_DIV4, data_from_chip, 16);

  // Write it to the serial port
  for (i = 0; i < 16; i++) {
    Serial.print(data_from_chip);
  }
  Serial.print("\n");
  delay(1000);                  // wait for a second
}

//************* code example finish *************

I have tried changing the SPI clock divider to 21 84mhz/21 = 4mhz.
Tried changing CS pin to 4, 10, 52, 8.....
If I remove initCb(); from SPI.cpp / init() function the due will not hang but SPI Sram wont work (see below).

void SPIClass::init() {
   if (initialized)
      return;
   interruptMode = 0;
   interruptSave = 0;
   interruptMask[0] = 0;
   interruptMask[1] = 0;
   interruptMask[2] = 0;
   interruptMask[3] = 0;
   initCb();  // ****** comment out this line *******
   SPI_Configure(spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);
   SPI_Enable(spi);
   initialized = true;
}

Does anyone have any suggestions?

Thanks for any help.

Almec

ard_newbie

Hello altronandon,


Maybe there are several issues in your code or wiring, but :

1/ as per 23lc1024 datasheet, it should not work with SPI_CLOCK_DIV4.

2/ Parameters passed to SpiRam.read_stream and SpiRam.write_stream are not correct, first parameter should be the address, not clock speed you have previousely defined.

void SpiRAM::read_stream(int address, char *buffer, int length);
void SpiRAM::write_stream(int address, char *buffer, int length);

3/ Did you check your wiring with MISO, MOSI and SCK ?

altronandon

Thanks for the reply.

I got it working by using the standard SPI library on its own. None of the SPI Sram libraries would work even though they use the standard SPI library as well.

The turboSPI DMA library works fine. Doing two int writes and two int reads takes about 15 micro secs (will try and get it faster). That's over clocking the comms speed at 40mhz.

Almec

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy