SPI Flash AT45DB080D (Atmel) see: http://mbed.org/users/okini3939/notebook/extend-memory/

Dependencies:   at45db161d mbed

Files at this revision

API Documentation at this revision

Comitter:
okini3939
Date:
Mon Nov 26 03:14:24 2012 +0000
Commit message:
1st build
;

Changed in this revision

at45db161d.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 54f4cc3dfc0e at45db161d.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/at45db161d.lib	Mon Nov 26 03:14:24 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/okini3939/code/at45db161d/#b379e16fdf6f
diff -r 000000000000 -r 54f4cc3dfc0e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Nov 26 03:14:24 2012 +0000
@@ -0,0 +1,109 @@
+/*
+ * SPI FLASH AT45DB081D (Atmel)
+ *   8Mbit
+ */
+#include "mbed.h"
+#include "at45db161d.h"
+
+#undef PAGE_SIZE
+#define PAGE_SIZE 264 // AT45DB081D (1MB)
+//#define PAGE_SIZE 528 // AT45DB321D (4MB)
+#define PAGE_NUM 4095 // AT45DB081D (1MB)
+//#define PAGE_NUM 8192 // AT45DB321D (4MB)
+
+#define WRITE_BUFFER 1
+#define READ_BUFFER 2
+
+DigitalOut myled(LED1);
+Serial pc(USBTX, USBRX);
+
+SPI spi(p11, p12, p13); // mosi, miso, sclk
+ATD45DB161D memory(spi, p19);
+
+void flash_write (int addr, char *buf, int len) {
+    int i;
+    memory.BufferWrite(WRITE_BUFFER, addr % PAGE_SIZE);
+    for (i = 0; i < len; i ++) {
+        spi.write(buf[i]);
+    }
+    memory.BufferToPage(WRITE_BUFFER, addr / PAGE_SIZE, 1);
+}
+
+void flash_read (int addr, char *buf, int len) {
+    int i;
+    memory.PageToBuffer(addr / PAGE_SIZE, READ_BUFFER);
+    memory.BufferRead(READ_BUFFER, addr % PAGE_SIZE, 1);
+    for (i = 0; i < len; i ++) {
+        buf[i] = spi.write(0xff);
+    }
+}
+
+int main() {
+    int i;
+    char buf[PAGE_SIZE];
+    Timer t;
+    ATD45DB161D::ID id;
+
+    pc.baud(115200);
+    spi.frequency(16000000);
+    wait_ms(500);
+    
+    memory.ReadManufacturerAndDeviceID(&id);
+    printf("RAM Manufacturer ID : %02x\r\n", id.manufacturer);
+    printf("RAM Device ID : %02x %02x\r\n", id.device[0], id.device[1]);
+    wait_ms(10);
+
+    printf("\r\nHELLO test\r\n");
+    
+    printf("RAM write\r\n");
+    strcpy(buf, "Hello!");
+    flash_write(0, buf, 6);
+    
+    for (i = 0; i < PAGE_SIZE; i ++) {
+        buf[i] = i;
+    }
+    flash_write(6, buf, PAGE_SIZE - 6);
+
+    wait(1);
+    memset(buf, 0, PAGE_SIZE);
+    
+    printf("RAM read\r\n");
+    flash_read(0, buf, PAGE_SIZE);
+    for (i = 0; i < PAGE_SIZE; i ++) {
+        printf(" %02x", buf[i]);
+        if ((i & 0x0f) == 0x0f)
+            printf("\r\n");
+    }
+
+    wait(1);
+
+    printf("\r\nWrite/Read time\r\n");
+
+    printf("RAM write\r\n");
+    t.reset();
+    t.start();
+    for (i = 0; i < 0x20000; i += PAGE_SIZE) {
+        buf[0] = (i >> 8) & 0xff;
+        flash_write(i, buf, PAGE_SIZE);
+        if ((i & 0x0fff) == 0) printf(".");
+    }
+    t.stop();
+    printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), (float)0x20000 / 1024 / t.read());
+
+    wait(1);
+
+    printf("RAM read\r\n");
+    t.reset();
+    t.start();
+    for (i = 0; i < 0x20000; i += PAGE_SIZE) {
+        flash_read(i, buf, PAGE_SIZE);
+        if (buf[0] != ((i >> 8) & 0xff)) {
+            printf("error %d\r\n", i);
+            break;
+        }
+        if ((i & 0x0fff) == 0) printf(".");
+    }
+    t.stop();
+    printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), 0x20000 / 1024 / t.read());
+
+}
diff -r 000000000000 -r 54f4cc3dfc0e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Nov 26 03:14:24 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/3d775a932e1d
\ No newline at end of file