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.

Committer:
MACRUM
Date:
Thu Apr 20 12:12:11 2017 +0000
Revision:
0:7e86fd056d40
Child:
1:e15a9be72b69
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:7e86fd056d40 1 #include "mbed.h"
MACRUM 0:7e86fd056d40 2
MACRUM 0:7e86fd056d40 3 DigitalOut myled(LED1);
MACRUM 0:7e86fd056d40 4 Serial pc(USBTX, USBRX);
MACRUM 0:7e86fd056d40 5
MACRUM 0:7e86fd056d40 6 #if defined(TARGET_LPC1768)
MACRUM 0:7e86fd056d40 7 I2C _i2c(p9, p10);
MACRUM 0:7e86fd056d40 8 #elif defined(TARGET_LPC1114)
MACRUM 0:7e86fd056d40 9 I2C _i2c(dp5, dp27);
MACRUM 0:7e86fd056d40 10 #else
MACRUM 0:7e86fd056d40 11 I2C _i2c(D14, D15);
MACRUM 0:7e86fd056d40 12 #endif
MACRUM 0:7e86fd056d40 13
MACRUM 0:7e86fd056d40 14 #define MB85_DENSITY_64K 0x3
MACRUM 0:7e86fd056d40 15 #define MB85_DENSITY_256K 0x5
MACRUM 0:7e86fd056d40 16 #define MB85_DENSITY_512K 0x6
MACRUM 0:7e86fd056d40 17 #define MB85_DENSITY_1M 0x7
MACRUM 0:7e86fd056d40 18 #define MB85_DENSITY_2M 0x8
MACRUM 0:7e86fd056d40 19 #define MB85RC_I2C_ADDRESS 0xA0
MACRUM 0:7e86fd056d40 20 #define I2C_WRITE 0
MACRUM 0:7e86fd056d40 21 #define I2C_READ 1
MACRUM 0:7e86fd056d40 22
MACRUM 0:7e86fd056d40 23 int read_device_id(char* device_id)
MACRUM 0:7e86fd056d40 24 {
MACRUM 0:7e86fd056d40 25 char buf;
MACRUM 0:7e86fd056d40 26
MACRUM 0:7e86fd056d40 27 buf = MB85RC_I2C_ADDRESS;
MACRUM 0:7e86fd056d40 28 _i2c.write(0xF8, &buf, 1, true);
MACRUM 0:7e86fd056d40 29 _i2c.read(0xF9, device_id, 3);
MACRUM 0:7e86fd056d40 30
MACRUM 0:7e86fd056d40 31 return 0;
MACRUM 0:7e86fd056d40 32 }
MACRUM 0:7e86fd056d40 33
MACRUM 0:7e86fd056d40 34 int read(uint32_t address, char *buf, uint32_t len)
MACRUM 0:7e86fd056d40 35 {
MACRUM 0:7e86fd056d40 36 char byte_address[2];
MACRUM 0:7e86fd056d40 37 char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
MACRUM 0:7e86fd056d40 38
MACRUM 0:7e86fd056d40 39 byte_address[0] = ((address >> 8) & 0xFF);
MACRUM 0:7e86fd056d40 40 byte_address[1] = ((address >> 0) & 0xFF);
MACRUM 0:7e86fd056d40 41 _i2c.write(i2c_adrs, byte_address, 2, true);
MACRUM 0:7e86fd056d40 42 _i2c.read(i2c_adrs, buf, len);
MACRUM 0:7e86fd056d40 43
MACRUM 0:7e86fd056d40 44 return 0;
MACRUM 0:7e86fd056d40 45 }
MACRUM 0:7e86fd056d40 46
MACRUM 0:7e86fd056d40 47 int write(uint32_t address, char *buf, uint32_t len)
MACRUM 0:7e86fd056d40 48 {
MACRUM 0:7e86fd056d40 49 char byte_address[2];
MACRUM 0:7e86fd056d40 50 char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
MACRUM 0:7e86fd056d40 51
MACRUM 0:7e86fd056d40 52 byte_address[0] = ((address >> 8) & 0xFF);
MACRUM 0:7e86fd056d40 53 byte_address[1] = ((address >> 0) & 0xFF);
MACRUM 0:7e86fd056d40 54 _i2c.write(i2c_adrs, byte_address, 2, true);
MACRUM 0:7e86fd056d40 55 for (uint32_t i = 0; i < len; i++) {
MACRUM 0:7e86fd056d40 56 _i2c.write(*buf++);
MACRUM 0:7e86fd056d40 57 }
MACRUM 0:7e86fd056d40 58
MACRUM 0:7e86fd056d40 59 return 0;
MACRUM 0:7e86fd056d40 60 }
MACRUM 0:7e86fd056d40 61
MACRUM 0:7e86fd056d40 62 int write(uint32_t address, char buf)
MACRUM 0:7e86fd056d40 63 {
MACRUM 0:7e86fd056d40 64 char byte_address[2];
MACRUM 0:7e86fd056d40 65 char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
MACRUM 0:7e86fd056d40 66
MACRUM 0:7e86fd056d40 67 byte_address[0] = ((address >> 8) & 0xFF);
MACRUM 0:7e86fd056d40 68 byte_address[1] = ((address >> 0) & 0xFF);
MACRUM 0:7e86fd056d40 69 _i2c.write(i2c_adrs, byte_address, 2, true);
MACRUM 0:7e86fd056d40 70 _i2c.write(buf);
MACRUM 0:7e86fd056d40 71
MACRUM 0:7e86fd056d40 72 return 0;
MACRUM 0:7e86fd056d40 73 }
MACRUM 0:7e86fd056d40 74
MACRUM 0:7e86fd056d40 75 int fill(uint32_t address, uint8_t data, uint32_t len)
MACRUM 0:7e86fd056d40 76 {
MACRUM 0:7e86fd056d40 77 char byte_address[2];
MACRUM 0:7e86fd056d40 78 char i2c_adrs = (MB85RC_I2C_ADDRESS | ((address >> 15) & 0x02));
MACRUM 0:7e86fd056d40 79
MACRUM 0:7e86fd056d40 80 byte_address[0] = ((address >> 8) & 0xFF);
MACRUM 0:7e86fd056d40 81 byte_address[1] = ((address >> 0) & 0xFF);
MACRUM 0:7e86fd056d40 82 _i2c.write(i2c_adrs, byte_address, 2, true);
MACRUM 0:7e86fd056d40 83 for (uint32_t i = 0; i < len; i++) {
MACRUM 0:7e86fd056d40 84 _i2c.write(data);
MACRUM 0:7e86fd056d40 85 }
MACRUM 0:7e86fd056d40 86 return 0;
MACRUM 0:7e86fd056d40 87 }
MACRUM 0:7e86fd056d40 88
MACRUM 0:7e86fd056d40 89 int main() {
MACRUM 0:7e86fd056d40 90 char buf[16];
MACRUM 0:7e86fd056d40 91 uint32_t address;
MACRUM 0:7e86fd056d40 92
MACRUM 0:7e86fd056d40 93 pc.baud(115200);
MACRUM 0:7e86fd056d40 94 pc.printf("\nFujitsu MB85RCxxx FRAM test program\n\n");
MACRUM 0:7e86fd056d40 95
MACRUM 0:7e86fd056d40 96 _i2c.frequency(400000);
MACRUM 0:7e86fd056d40 97 read_device_id(buf);
MACRUM 0:7e86fd056d40 98
MACRUM 0:7e86fd056d40 99 pc.printf("read device ID = 0x%x 0x%x 0x%x\n\n", buf[0], buf[1], buf[2]);
MACRUM 0:7e86fd056d40 100
MACRUM 0:7e86fd056d40 101 fill(0, 0, 256);
MACRUM 0:7e86fd056d40 102
MACRUM 0:7e86fd056d40 103 for (int i = 0; i < 16; i++) {
MACRUM 0:7e86fd056d40 104 buf[i] = i;
MACRUM 0:7e86fd056d40 105 }
MACRUM 0:7e86fd056d40 106 write(0, buf, 16);
MACRUM 0:7e86fd056d40 107
MACRUM 0:7e86fd056d40 108 for (address = 0; address < 0x80; address += 16) {
MACRUM 0:7e86fd056d40 109 read(address, buf, 16);
MACRUM 0:7e86fd056d40 110 pc.printf("%08X : ", address);
MACRUM 0:7e86fd056d40 111 for (int i = 0; i < 16; i++) {
MACRUM 0:7e86fd056d40 112 pc.printf("%02X ", buf[i]);
MACRUM 0:7e86fd056d40 113 }
MACRUM 0:7e86fd056d40 114 pc.printf("\n");
MACRUM 0:7e86fd056d40 115 }
MACRUM 0:7e86fd056d40 116
MACRUM 0:7e86fd056d40 117 pc.printf("\n");
MACRUM 0:7e86fd056d40 118 for (address = 0; address < 0x100; address++) {
MACRUM 0:7e86fd056d40 119 write(address, (uint8_t)address);
MACRUM 0:7e86fd056d40 120 }
MACRUM 0:7e86fd056d40 121 for (address = 0; address < 0x100; address += 16) {
MACRUM 0:7e86fd056d40 122 read(address, buf, 16);
MACRUM 0:7e86fd056d40 123 pc.printf("%08X : ", address);
MACRUM 0:7e86fd056d40 124 for (int i = 0; i < 16; i++) {
MACRUM 0:7e86fd056d40 125 pc.printf("%02X ", buf[i]);
MACRUM 0:7e86fd056d40 126 }
MACRUM 0:7e86fd056d40 127 pc.printf("\n");
MACRUM 0:7e86fd056d40 128 }
MACRUM 0:7e86fd056d40 129
MACRUM 0:7e86fd056d40 130 while(1) {
MACRUM 0:7e86fd056d40 131 myled = 1;
MACRUM 0:7e86fd056d40 132 wait(0.2);
MACRUM 0:7e86fd056d40 133 myled = 0;
MACRUM 0:7e86fd056d40 134 wait(0.2);
MACRUM 0:7e86fd056d40 135 }
MACRUM 0:7e86fd056d40 136 }