Fujitsu MB85RSxx serial FRAM test program

Dependencies:   mbed MB85RSxx_SPI

Connectivity

MB82RSxx pinmbed LPC1114FN28 pinmbed LPC1768 pinArudino form factor
1 (_CS)9 (dp9)8 (p8)D10
2 (SO)1 (dp1)6 (p6)D12
3 (_WP)21 (VDD)40 (VOUT)3V3
4 (VSS)22 (GND)1 (GND)GND
5 (SI)2 (dp2)5 (p5)D11
6 (SCK)6 (dp6)7 (p7)D13
7 (_HOLD)21 (VDD)40 (VOUT)3V3
8 (VDD)21 (VDD)40 (VOUT)3V3
Revision:
1:bdf8b378dbc9
Parent:
0:20b32d13a758
Child:
3:3e6b31527e0e
--- a/main.cpp	Sun Apr 16 10:54:15 2017 +0000
+++ b/main.cpp	Mon Apr 24 14:03:53 2017 +0000
@@ -1,206 +1,61 @@
 #include "mbed.h"
+#include "MB85RSxx_SPI.h"
 
 DigitalOut myled(LED1);
 Serial pc(USBTX, USBRX);
 
 #if defined(TARGET_LPC1768)
-SPI _spi(p5, p6, p7); // mosi, miso, sclk
-DigitalOut _cs(p8);
+MB85RSxx_SPI _spi(p5, p6, p7, p8); // mosi, miso, sclk, cs
 #elif defined(TARGET_LPC1114)
-SPI _spi(dp2, dp1, dp6); // mosi, miso, sclk
-DigitalOut _cs(dp9);
+MB85RSxx_SPI _spi(dp2, dp1, dp6, dp9); // mosi, miso, sclk, cs
 #else // Arduino R3 Shield form factor
-SPI _spi(D11, D12, D13); // mosi, miso, sclk
-DigitalOut _cs(D10);
+MB85RSxx_SPI fram(D11, D12, D13, D10); // mosi, miso, sclk, cs
 #endif
 
-#define MB85_WREN   0x06
-#define MB85_WRDI   0x04
-#define MB85_RDSR   0x05
-#define MB85_WRSR   0x01
-#define MB85_READ   0x03
-#define MB85_WRITE  0x02
-#define MB85_RDID   0x9F
-#define MB85_FSTRD  0x0B
-#define MB85_SLEEP  0xB9
-
-#define MB85_DENSITY_64K    0x3
-#define MB85_DENSITY_256K   0x5
-#define MB85_DENSITY_512K   0x6
-#define MB85_DENSITY_1M     0x7
-#define MB85_DENSITY_2M     0x8
-
-static int _address_bits = 0;
-
-int read_device_id(uint8_t* device_id)
-{
-    _cs = 0;
-    _spi.write(MB85_RDID);
-    for (int i = 0; i < 4; i++) {
-        *device_id++ = (uint8_t)_spi.write(0);
-    }
-    _cs = 1;
-    
-    return 0;
-}
-
-uint8_t read_status()
-{
-    _cs = 0;
-    _spi.write(MB85_RDSR);
-    uint8_t st = (uint8_t)_spi.write(0);
-    _cs = 1;
-    
-    return st;
-}
-
-int read(uint32_t address, uint8_t* data, uint32_t len)
-{
-    _cs = 0;
-    
-    _spi.write(MB85_READ);
-    if (_address_bits == 24) {
-        _spi.write((uint8_t)((address >> 16) & 0xFF));
-    }
-    _spi.write((uint8_t)((address >>  8) & 0xFF));
-    _spi.write((uint8_t)((address >>  0) & 0xFF));
-    for (uint32_t i = 0; i < len; i++) {
-        *data++ = (uint8_t)_spi.write(0);
-    }
-    _cs = 1;
-    
-    return 0;
-}
-
-uint8_t read(uint32_t address)
+int main()
 {
-    uint8_t data;
-    _cs = 0;
-    _spi.write(MB85_READ);
-    if (_address_bits == 24) {
-        _spi.write((uint8_t)((address >> 16) & 0xFF));
-    }
-    _spi.write((uint8_t)((address >>  8) & 0xFF));
-    _spi.write((uint8_t)((address >>  0) & 0xFF));
-    data = (uint8_t)_spi.write(0);
-    _cs = 1;
-    
-    return data;
-}
-
-int write(uint32_t address, uint8_t* data, uint32_t len)
-{
-    _cs = 0;
-    _spi.write(MB85_WRITE);
-    if (_address_bits == 24) {
-        _spi.write((uint8_t)((address >> 16) & 0xFF));
-    }
-    _spi.write((uint8_t)((address >>  8) & 0xFF));
-    _spi.write((uint8_t)((address >>  0) & 0xFF));
-    for (uint32_t i = 0; i < len; i++) {
-        _spi.write(*data++);
-    }
-    _cs = 1;
-    
-    return 0;
-}
-
-int write(uint32_t address, uint8_t data)
-{
-    _cs = 0;
-    _spi.write(MB85_WRITE);
-    if (_address_bits == 24) {
-        _spi.write((uint8_t)((address >> 16) & 0xFF));
-    }
-    _spi.write((uint8_t)((address >>  8) & 0xFF));
-    _spi.write((uint8_t)((address >>  0) & 0xFF));
-    _spi.write(data);
-    _cs = 1;
-    
-    return 0;
-}
-
-int fill(uint32_t address, uint8_t data, uint32_t len)
-{
-    _cs = 0;
-    _spi.write(MB85_WRITE);
-    if (_address_bits == 24) {
-        _spi.write((uint8_t)((address >> 16) & 0xFF));
-    }
-    _spi.write((uint8_t)((address >>  8) & 0xFF));
-    _spi.write((uint8_t)((address >>  0) & 0xFF));
-    for (uint32_t i = 0; i < len; i++) {
-        _spi.write(data);
-    }
-    _cs = 1;
-    
-    return 0;
-}
-
-void write_enable()
-{
-    _cs = 0;
-    _spi.write(MB85_WREN);
-    _cs = 1;
-}
-
-void write_disable()
-{
-    _cs = 0;
-    _spi.write(MB85_WRDI);
-    _cs = 1;
-}
-
-int main() {
     uint8_t buf[16];
     uint32_t address;
 
     pc.baud(115200);
     pc.printf("\nFujitsu MB85RSxxx FRAM test program\n\n");
-    
-    // Initialize SPI
-    _spi.format(8, 0);
-    _cs = 1;
+
+    // Read device ID and detect memory density for addressing
+    fram.read_device_id(buf);
+    pc.printf("read device ID = 0x%x 0x%x 0x%x 0x%x\n", buf[0], buf[1], buf[2], buf[3]);
 
-    // Read device ID and detect memory density for addressing    
-    read_device_id(buf);
-    if ((buf[2] & 0x1F) > MB85_DENSITY_512K) {
-        _address_bits = 24;
-    } else {
-        _address_bits = 16;
-    }
-    pc.printf("read device ID = 0x%x 0x%x 0x%x 0x%x\n", buf[0], buf[1], buf[2], buf[3]);
-    write_enable();
-    pc.printf("read status (WREN) = 0x%x\n", read_status());
-    write_disable();
-    pc.printf("read status (WRDI) = 0x%x\n", read_status());
-    
+    fram.write_enable();
+    pc.printf("read status (WREN) = 0x%x\n", fram.read_status());
+
+    fram.write_disable();
+    pc.printf("read status (WRDI) = 0x%x\n", fram.read_status());
+
     // Write 0 data
-    write_enable();
-    fill(0, 0, 256);
+    fram.write_enable();
+    fram.fill(0, 0, 256);
 
     // Prepare write data
     for (int i = 0; i < 16; i++) {
         buf[i] = i;
     }
-    
+
     // Write data with write enable
-    write_enable();
-    write(0x00, buf, 16);
-    
+    fram.write_enable();
+    fram.write(0x00, buf, 16);
+
     // Attempt to write data (not written)
-    write(0x10, buf, 16);
-    
+    fram.write(0x10, buf, 16);
+
     // Write data with write enable
-    write_enable();
-    write(0x20, buf, 16);
-    
+    fram.write_enable();
+    fram.write(0x20, buf, 16);
+
     // Read data
     for (address = 0; address < 0x80; address += 16) {
-        read(address, buf, 16);
+        fram.read(address, buf, 16);
         pc.printf("%08X : ", address);
         for (int i = 0; i < 16; i++) {
-            pc.printf("%02X ", buf[i]);    
+            pc.printf("%02X ", buf[i]);
         }
         pc.printf("\n");
     }
@@ -208,15 +63,15 @@
     // Write number from 0 to 255
     pc.printf("\n");
     for (address = 0; address < 0x100; address++) {
-        write_enable();
-        write(address, (uint8_t)address);
+        fram.write_enable();
+        fram.write(address, (uint8_t)address);
     }
     // Read data
     for (address = 0; address < 0x100; address += 16) {
-        read(address, buf, 16);
+        fram.read(address, buf, 16);
         pc.printf("%08X : ", address);
         for (int i = 0; i < 16; i++) {
-            pc.printf("%02X ", buf[i]);    
+            pc.printf("%02X ", buf[i]);
         }
         pc.printf("\n");
     }
@@ -228,3 +83,4 @@
         wait(0.2);
     }
 }
+