Fujitsu MB85RSxx serial FRAM test program
Dependencies: mbed MB85RSxx_SPI
Connectivity
| MB82RSxx pin | mbed LPC1114FN28 pin | mbed LPC1768 pin | Arudino 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 |
Diff: main.cpp
- Revision:
- 1:bdf8b378dbc9
- Parent:
- 0:20b32d13a758
- Child:
- 3:3e6b31527e0e
diff -r 20b32d13a758 -r bdf8b378dbc9 main.cpp
--- 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);
}
}
+
Toyomasa Watarai
Fujitsu SPI FRAM MB85RSxx