SPI RAM 23LC1024 (Microchip) with DMA

Dependencies:   mbed

Fork of SPIRAM_23LC1024 by Suga koubou

Revision:
0:c5ba7d914282
Child:
1:a7b1803dfa44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 09 00:32:20 2012 +0000
@@ -0,0 +1,88 @@
+/*
+ * 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);
+    }
+}