sample of Memory File System Library, for SPI PRAM NP8P128A13 (Micron) see: http://mbed.org/users/okini3939/notebook/extend-memory/

Dependencies:   FatFileSystemCpp PRAMFileSystem mbed

Fork of SPIRAM_NP8P128A13TSM60E by Suga koubou

Committer:
okini3939
Date:
Fri Nov 09 01:57:47 2012 +0000
Revision:
0:4d4598bd9119
Child:
1:3a2094fa7c4c
1st build
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:4d4598bd9119 1 /*
okini3939 0:4d4598bd9119 2 * SPI RAM NP8P128A13TSM60E (Micron)
okini3939 0:4d4598bd9119 3 * 128Mbit
okini3939 0:4d4598bd9119 4 */
okini3939 0:4d4598bd9119 5 #include "mbed.h"
okini3939 0:4d4598bd9119 6
okini3939 0:4d4598bd9119 7 #define CMD_WREN 0x06 // Write enable
okini3939 0:4d4598bd9119 8 #define CMD_WRDI 0x04 // Write disable
okini3939 0:4d4598bd9119 9 #define CMD_RDID 0x9f // Read identification
okini3939 0:4d4598bd9119 10 #define CMD_RDSR 0x05 // Read status register
okini3939 0:4d4598bd9119 11 #define CMD_WRSR 0x01 // Write status registe
okini3939 0:4d4598bd9119 12 #define CMD_READ 0x03 // Read data bytes
okini3939 0:4d4598bd9119 13 #define CMD_FREAD 0x0b // Read data bytes at higher speed
okini3939 0:4d4598bd9119 14 #define CMD_PP 0x02 // Page program (legacy program)
okini3939 0:4d4598bd9119 15 #define CMD_PP_BA 0x22 // Page program (bit-alterable write)
okini3939 0:4d4598bd9119 16 #define CMD_PP_1S 0xd1 // Page program (On all 1s)
okini3939 0:4d4598bd9119 17 #define CMD_SE 0xd8 // Sector erase
okini3939 0:4d4598bd9119 18
okini3939 0:4d4598bd9119 19 DigitalOut myled(LED1);
okini3939 0:4d4598bd9119 20 Serial pc(USBTX, USBRX);
okini3939 0:4d4598bd9119 21
okini3939 0:4d4598bd9119 22 SPI spi(p11, p12, p13); // mosi, miso, sclk
okini3939 0:4d4598bd9119 23 DigitalOut cs(p14), hold(p15), reset(p16);
okini3939 0:4d4598bd9119 24
okini3939 0:4d4598bd9119 25 int ram_status () {
okini3939 0:4d4598bd9119 26 int r;
okini3939 0:4d4598bd9119 27
okini3939 0:4d4598bd9119 28 cs = 0;
okini3939 0:4d4598bd9119 29 spi.write(CMD_RDSR);
okini3939 0:4d4598bd9119 30 r = spi.write(0);
okini3939 0:4d4598bd9119 31 cs = 1;
okini3939 0:4d4598bd9119 32 return r;
okini3939 0:4d4598bd9119 33 }
okini3939 0:4d4598bd9119 34
okini3939 0:4d4598bd9119 35 int ram_write (int addr, char *buf, int len) {
okini3939 0:4d4598bd9119 36 int i;
okini3939 0:4d4598bd9119 37
okini3939 0:4d4598bd9119 38 while (ram_status() & 1) {
okini3939 0:4d4598bd9119 39 // write in progress
okini3939 0:4d4598bd9119 40 wait_us(10);
okini3939 0:4d4598bd9119 41 }
okini3939 0:4d4598bd9119 42
okini3939 0:4d4598bd9119 43 cs = 0;
okini3939 0:4d4598bd9119 44 spi.write(CMD_WREN);
okini3939 0:4d4598bd9119 45 cs = 1;
okini3939 0:4d4598bd9119 46 wait_us(10);
okini3939 0:4d4598bd9119 47
okini3939 0:4d4598bd9119 48 cs = 0;
okini3939 0:4d4598bd9119 49 spi.write(CMD_PP_BA);
okini3939 0:4d4598bd9119 50 spi.write((addr >> 16) & 0xff);
okini3939 0:4d4598bd9119 51 spi.write((addr >> 8) & 0xff);
okini3939 0:4d4598bd9119 52 spi.write(addr & 0xff);
okini3939 0:4d4598bd9119 53
okini3939 0:4d4598bd9119 54 len = len - (addr & 0x1f);
okini3939 0:4d4598bd9119 55 for (i = 0; i < len; i ++) {
okini3939 0:4d4598bd9119 56 spi.write(buf[i]);
okini3939 0:4d4598bd9119 57 }
okini3939 0:4d4598bd9119 58 cs = 1;
okini3939 0:4d4598bd9119 59 return i;
okini3939 0:4d4598bd9119 60 }
okini3939 0:4d4598bd9119 61
okini3939 0:4d4598bd9119 62 int ram_read (int addr, char *buf, int len) {
okini3939 0:4d4598bd9119 63 int i;
okini3939 0:4d4598bd9119 64
okini3939 0:4d4598bd9119 65 cs = 0;
okini3939 0:4d4598bd9119 66 spi.write(CMD_READ);
okini3939 0:4d4598bd9119 67 spi.write((addr >> 16) & 0xff);
okini3939 0:4d4598bd9119 68 spi.write((addr >> 8) & 0xff);
okini3939 0:4d4598bd9119 69 spi.write(addr & 0xff);
okini3939 0:4d4598bd9119 70
okini3939 0:4d4598bd9119 71 for (i = 0; i < len; i ++) {
okini3939 0:4d4598bd9119 72 buf[i] = spi.write(0);
okini3939 0:4d4598bd9119 73 }
okini3939 0:4d4598bd9119 74 cs = 1;
okini3939 0:4d4598bd9119 75 return i;
okini3939 0:4d4598bd9119 76 }
okini3939 0:4d4598bd9119 77
okini3939 0:4d4598bd9119 78 int main() {
okini3939 0:4d4598bd9119 79 int i;
okini3939 0:4d4598bd9119 80 char buf[64];
okini3939 0:4d4598bd9119 81
okini3939 0:4d4598bd9119 82 cs = 1;
okini3939 0:4d4598bd9119 83 hold = 1;
okini3939 0:4d4598bd9119 84 reset = 0;
okini3939 0:4d4598bd9119 85 pc.baud(115200);
okini3939 0:4d4598bd9119 86 wait_ms(10);
okini3939 0:4d4598bd9119 87 reset = 1;
okini3939 0:4d4598bd9119 88 wait_ms(500);
okini3939 0:4d4598bd9119 89
okini3939 0:4d4598bd9119 90 cs = 0;
okini3939 0:4d4598bd9119 91 spi.write(CMD_RDID);
okini3939 0:4d4598bd9119 92 printf("RAM Manufacturer ID : %02x\r\n", spi.write(0));
okini3939 0:4d4598bd9119 93 i = (spi.write(0) << 8) | spi.write(0);
okini3939 0:4d4598bd9119 94 printf("RAM Device ID : %04x\r\n", i);
okini3939 0:4d4598bd9119 95 cs = 1;
okini3939 0:4d4598bd9119 96 wait_ms(10);
okini3939 0:4d4598bd9119 97
okini3939 0:4d4598bd9119 98 printf("Status Register : %02x\r\n", ram_status());
okini3939 0:4d4598bd9119 99
okini3939 0:4d4598bd9119 100 printf("RAM write\r\n");
okini3939 0:4d4598bd9119 101 strcpy(buf, "Hello!");
okini3939 0:4d4598bd9119 102 ram_write(0, buf, 6);
okini3939 0:4d4598bd9119 103
okini3939 0:4d4598bd9119 104 for (i = 0; i < 64; i ++) {
okini3939 0:4d4598bd9119 105 buf[i] = i;
okini3939 0:4d4598bd9119 106 }
okini3939 0:4d4598bd9119 107 ram_write(6, buf, 64);
okini3939 0:4d4598bd9119 108
okini3939 0:4d4598bd9119 109 wait_ms(500);
okini3939 0:4d4598bd9119 110 memset(buf, 0, 64);
okini3939 0:4d4598bd9119 111
okini3939 0:4d4598bd9119 112 printf("RAM read\r\n");
okini3939 0:4d4598bd9119 113 ram_read(0, buf, 64);
okini3939 0:4d4598bd9119 114 for (i = 0; i < 64; i ++) {
okini3939 0:4d4598bd9119 115 printf(" %02x", buf[i]);
okini3939 0:4d4598bd9119 116 if ((i & 0x0f) == 0x0f)
okini3939 0:4d4598bd9119 117 printf("\r\n");
okini3939 0:4d4598bd9119 118 }
okini3939 0:4d4598bd9119 119
okini3939 0:4d4598bd9119 120 while(1) {
okini3939 0:4d4598bd9119 121 myled = 1;
okini3939 0:4d4598bd9119 122 wait(0.2);
okini3939 0:4d4598bd9119 123 myled = 0;
okini3939 0:4d4598bd9119 124 wait(0.2);
okini3939 0:4d4598bd9119 125 }
okini3939 0:4d4598bd9119 126 }