Fujitsu MB85RCxx I2C FRAM test program
Dependencies: mbed MB85RCxx_I2C
Connectivity
| MB82RCxx pin | mbed LPC1114FN28 pin | mbed LPC1768 pin | Arudino 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.
Diff: main.cpp
- Revision:
- 1:e15a9be72b69
- Parent:
- 0:7e86fd056d40
diff -r 7e86fd056d40 -r e15a9be72b69 main.cpp
--- 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]);
Toyomasa Watarai
Fujitsu I2C FRAM MB85RCxx