SPI RAM 23LC1024 (Microchip) with DMA and FIFO

Dependencies:   SerRAM mbed

Fork of SPIRAM_23LC1024_DMA by Suga koubou

main.cpp

Committer:
okini3939
Date:
2012-11-09
Revision:
0:c5ba7d914282
Child:
1:a7b1803dfa44

File content as of revision 0:c5ba7d914282:

/*
 * SPI RAM 23LC1024 (Microchip)
 */
#include "mbed.h"

#define CMD_READ    0x03
#define CMD_WRITE   0x02
#define CMD_RDMR    0x05
#define CMD_WRMR    0x01

DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);

SPI spi(p11, p12, p13); // mosi, miso, sclk
DigitalOut cs(p17);

int ram_write (int addr, char *buf, int len) {
    int i;

    cs = 0;
    spi.write(CMD_WRITE);
    spi.write((addr >> 16) & 0xff);
    spi.write((addr >> 8) & 0xff);
    spi.write(addr & 0xff);

    for (i = 0; i < len; i ++) {
        spi.write(buf[i]);
    }
    cs = 1;
    return i;
}

int ram_read (int addr, char *buf, int len) {
    int i;

    cs = 0;
    spi.write(CMD_READ);
    spi.write((addr >> 16) & 0xff);
    spi.write((addr >> 8) & 0xff);
    spi.write(addr & 0xff);

    for (i = 0; i < len; i ++) {
        buf[i] = spi.write(0);
    }
    cs = 1;
    return i;
}

int main() {
    int i;
    char buf[256];

    cs = 1;
    pc.baud(115200);
    wait_ms(500);
    
    cs = 0;
    spi.write(CMD_RDMR);
    printf("RAM mode: %02x\r\n", spi.write(0));
    cs = 1;
    
    printf("RAM write\r\n");
    strcpy(buf, "Hello!");
    ram_write(0, buf, 6);
    
    for (i = 0; i < 256; i ++) {
        buf[i] = i;
    }
    ram_write(6, buf, 256);

    wait_ms(500);
    memset(buf, 0, 256);
    
    printf("RAM read\r\n");
    ram_read(0, buf, 256);
    for (i = 0; i < 256; i ++) {
        printf(" %02x", buf[i]);
        if ((i & 0x0f) == 0x0f)
            printf("\r\n");
    }

    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}