Fujitsu MB85RCxx I2C FRAM test program

Dependencies:   mbed MB85RCxx_I2C

Connectivity

MB82RCxx pinmbed LPC1114FN28 pinmbed LPC1768 pinArudino form factor
1 (A0)22 (GND)1 (GND)GND
2 (A1)22 (GND)1 (GND)GND
3 (A2)22 (GND)1 (GND)GND
4 (VSS)22 (GND)1 (GND)GND
5 (SDA)2 (dp5)9 (p9)D14
6 (SCL)6 (dp27)10 (p10)D15
7 (WP)22 (GND)1 (GND)GND
8 (VDD)21 (VDD)40 (VOUT)3V3

Note

SDA and SCL must be pulled-up by 2.2k-ohm registers.

Revision:
1:e15a9be72b69
Parent:
0:7e86fd056d40
--- a/main.cpp	Thu Apr 20 12:12:11 2017 +0000
+++ b/main.cpp	Sat Apr 22 12:14:58 2017 +0000
@@ -1,91 +1,17 @@
 #include "mbed.h"
+#include "MB85RCxx_I2C.h"
 
 DigitalOut myled(LED1);
 Serial pc(USBTX, USBRX);
 
 #if defined(TARGET_LPC1768)
-I2C _i2c(p9, p10);
+MB85RCxx_I2C fram(p9, p10);
 #elif defined(TARGET_LPC1114)
-I2C _i2c(dp5, dp27);
+MB85RCxx_I2C fram(dp5, dp27);
 #else
-I2C _i2c(D14, D15);
+MB85RCxx_I2C fram(D14, D15);
 #endif
 
-#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
-#define MB85RC_I2C_ADDRESS  0xA0
-#define I2C_WRITE           0
-#define I2C_READ            1
-
-int read_device_id(char* device_id)
-{
-    char buf;
-
-    buf = MB85RC_I2C_ADDRESS;
-    _i2c.write(0xF8, &buf, 1, true);
-    _i2c.read(0xF9, device_id, 3);
-    
-    return 0;
-}
-
-int read(uint32_t address, char *buf, uint32_t len)
-{
-    char byte_address[2];
-    char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
-    
-    byte_address[0] = ((address >> 8) & 0xFF);
-    byte_address[1] = ((address >> 0) & 0xFF);
-    _i2c.write(i2c_adrs, byte_address, 2, true);
-    _i2c.read(i2c_adrs, buf, len);
-    
-    return 0;
-}
-
-int write(uint32_t address, char *buf, uint32_t len)
-{
-    char byte_address[2];
-    char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
-    
-    byte_address[0] = ((address >> 8) & 0xFF);
-    byte_address[1] = ((address >> 0) & 0xFF);
-    _i2c.write(i2c_adrs, byte_address, 2, true);
-    for (uint32_t i = 0; i < len; i++) {
-        _i2c.write(*buf++);
-    }
-
-    return 0;
-}
-
-int write(uint32_t address, char buf)
-{
-    char byte_address[2];
-    char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
-    
-    byte_address[0] = ((address >> 8) & 0xFF);
-    byte_address[1] = ((address >> 0) & 0xFF);
-    _i2c.write(i2c_adrs, byte_address, 2, true);
-    _i2c.write(buf);
-
-    return 0;
-}
-
-int fill(uint32_t address, uint8_t data, uint32_t len)
-{
-    char byte_address[2];
-    char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
-    
-    byte_address[0] = ((address >> 8) & 0xFF);
-    byte_address[1] = ((address >> 0) & 0xFF);
-    _i2c.write(i2c_adrs, byte_address, 2, true);
-    for (uint32_t i = 0; i < len; i++) {
-        _i2c.write(data);
-    }
-    return 0;
-}
-
 int main() {
     char buf[16];
     uint32_t address;
@@ -93,20 +19,19 @@
     pc.baud(115200);
     pc.printf("\nFujitsu MB85RCxxx FRAM test program\n\n");
     
-    _i2c.frequency(400000);
-    read_device_id(buf);
+    fram.read_device_id(buf);
         
     pc.printf("read device ID = 0x%x 0x%x 0x%x\n\n", buf[0], buf[1], buf[2]);
 
-    fill(0, 0, 256);
+    fram.fill(0, 0, 256);
 
     for (int i = 0; i < 16; i++) {
         buf[i] = i;
     }
-    write(0, buf, 16);
+    fram.write(0, buf, 16);
 
     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]);    
@@ -116,10 +41,10 @@
 
     pc.printf("\n");
     for (address = 0; address < 0x100; address++) {
-        write(address, (uint8_t)address);
+        fram.write(address, (uint8_t)address);
     }
     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]);