FM25W256, it was write protect first. 初期状態ではライトプロテクトがかかっていることに対応。 "The WREN command must be issued prior to any write operation." from FM25W256 datasheet.

Dependencies:   FM25W256 mbed

Fork of Hello-FM25W256 by Toyomasa Watarai

Revision:
0:3efb18460968
Child:
1:be908b1aafe6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 04 13:48:22 2016 +0000
@@ -0,0 +1,94 @@
+#include "mbed.h"
+
+Serial pc(USBTX, USBRX);
+SPI fram(dp2, dp1, dp6);
+DigitalOut _cs(dp18);
+
+#define CMD_WREN   0x06
+#define CMD_WRDI   0x04
+#define CMD_RDSR   0x05
+#define CMD_WRSR   0x01
+#define CMD_READ   0x03
+#define CMD_WRITE  0x02
+
+void write_byte(uint16_t address, uint8_t data)
+{
+    _cs = 0;
+    fram.write(CMD_WREN);
+    _cs = 1;
+
+    _cs = 0;
+    fram.write(CMD_WRITE);
+    fram.write(address >> 8);
+    fram.write(address & 0xFF);
+    fram.write(data & 0xFF);
+    _cs = 1;
+}
+
+uint8_t read_byte(uint16_t address)
+{
+    uint8_t data;
+
+    _cs = 0;
+    fram.write(CMD_READ);
+    fram.write(address >> 8);
+    fram.write(address & 0xFF);
+    data = fram.write(0);
+    _cs = 1;
+
+    return data;
+}
+
+void read_bytes(uint16_t address, uint8_t *buf, uint16_t size)
+{
+    _cs = 0;
+    fram.write(CMD_READ);
+    fram.write(address >> 8);
+    fram.write(address & 0xFF);
+    while (size--) {
+        *buf++ = fram.write(0);
+    }
+    _cs = 1;
+}
+
+
+void read_test()
+{
+    uint16_t adrs = 0;
+    for(int i=0; i<16; i++) {
+        pc.printf("0x%04X : ", i * 16);
+        for(int j=0; j<16; j++) {
+            //pc.printf("%02X ", fram.write(0));
+            pc.printf("%02X ", read_byte(adrs++));
+        }
+        pc.printf("\n");
+    }
+}
+    
+void write_test()
+{
+    for(int i=0; i<256; i++) {
+        write_byte(i, i);
+    }
+}
+
+int main()
+{
+    fram.format(8, 0);
+    fram.frequency(20000000);
+    _cs = 1;
+
+    pc.printf("\nFM25W256 test program - write test? (y/n) ");
+    if (pc.getc() == 'y') {
+        write_test();
+    }
+
+    pc.printf("\nFM25W256 test program - read test? (y/n) ");
+    if (pc.getc() == 'y') {
+        pc.printf("\n");
+        read_test();
+    }
+
+    while(1) {
+    }
+}