Toyomasa Watarai / FM25W256

Dependents:   Hello-FM25W256 Hello-FM25W256

Files at this revision

API Documentation at this revision

Comitter:
MACRUM
Date:
Fri Mar 04 15:49:51 2016 +0000
Child:
1:bb2b1e4bfb6e
Commit message:
Initial commit

Changed in this revision

FM25W256.cpp Show annotated file Show diff for this revision Revisions of this file
FM25W256.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FM25W256.cpp	Fri Mar 04 15:49:51 2016 +0000
@@ -0,0 +1,75 @@
+#include "mbed.h"
+#include "FM25W256.h"
+
+FM25W256::FM25W256(PinName mosi, PinName miso, PinName clk, PinName cs)
+    : _spi(mosi, miso, clk), _cs(cs)
+{
+    _spi.format(8, 0);
+    _spi.frequency(20000000);
+    _cs = 1;
+}
+
+FM25W256::FM25W256(SPI &spi, PinName cs)
+    : _spi(spi), _cs(cs) 
+{
+    _spi.format(8, 0);
+    _spi.frequency(20000000);
+    _cs = 1;
+
+}
+
+void FM25W256::write(uint16_t address, uint8_t data)
+{
+    _cs = 0;
+    _spi.write(CMD_WREN);
+    _cs = 1;
+
+    _cs = 0;
+    _spi.write(CMD_WRITE);
+    _spi.write(address >> 8);
+    _spi.write(address & 0xFF);
+    _spi.write(data);
+    _cs = 1;
+}
+
+void FM25W256::write(uint16_t address, uint8_t *data, uint16_t size)
+{
+    _cs = 0;
+    _spi.write(CMD_WREN);
+    _cs = 1;
+
+    _cs = 0;
+    _spi.write(CMD_WRITE);
+    _spi.write(address >> 8);
+    _spi.write(address & 0xFF);
+    while(size--) {
+        _spi.write(*data++);
+    }
+    _cs = 1;
+}
+
+uint8_t FM25W256::read(uint16_t address)
+{
+    uint8_t data;
+
+    _cs = 0;
+    _spi.write(CMD_READ);
+    _spi.write(address >> 8);
+    _spi.write(address & 0xFF);
+    data = _spi.write(0);
+    _cs = 1;
+
+    return data;
+}
+
+void FM25W256::read(uint16_t address, uint8_t *buf, uint16_t size)
+{
+    _cs = 0;
+    _spi.write(CMD_READ);
+    _spi.write(address >> 8);
+    _spi.write(address & 0xFF);
+    while (size--) {
+        *buf++ = _spi.write(0);
+    }
+    _cs = 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FM25W256.h	Fri Mar 04 15:49:51 2016 +0000
@@ -0,0 +1,27 @@
+#include "mbed.h"
+
+#ifndef __FM25W256_HEAD__
+#define __FM25W256_HEAD__
+
+#define CMD_WREN   0x06
+#define CMD_WRDI   0x04
+#define CMD_RDSR   0x05
+#define CMD_WRSR   0x01
+#define CMD_READ   0x03
+#define CMD_WRITE  0x02
+
+class FM25W256 {
+public:
+    FM25W256(PinName mosi, PinName miso, PinName clk, PinName cs);
+    FM25W256(SPI &spi, PinName cs);
+    void write(uint16_t address, uint8_t data);
+    void write(uint16_t address, uint8_t *data, uint16_t size);
+    uint8_t read(uint16_t address);
+    void read(uint16_t address, uint8_t *data, uint16_t size);
+
+protected:
+    SPI _spi;
+    DigitalOut _cs;
+};
+
+#endif