EEPROMのライブラリ

Dependents:   Hybrid_IZU2021_MAIN_OS5 Hybrid_IZU2021_POST_PROCESS Hybrid_IZU2021_MAIN

Revision:
0:2b9b9c1e98d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PQ_EEPROM.cpp	Tue Dec 15 15:33:33 2020 +0000
@@ -0,0 +1,46 @@
+#include "mbed.h"
+#include "PQ_EEPROM.h"
+
+EEPROM::EEPROM(I2C &i2c)
+{
+    _i2c = &i2c;
+    _i2c -> frequency(400000);
+}
+
+void EEPROM::write(int addr, char *data, int size)
+{
+    char B0 = (addr >> 16) & 0x01;
+    char A0 = (addr >> 17) & 0x01;
+    char A1 = (addr >> 18) & 0x01;
+    _addr = 0b10100000 | B0 << 3 | A1 << 2 | A0 << 1;
+    
+    if(size > 128){
+        size = 128;
+    }
+    cmd[0] = (addr >> 8) & 0xFF;
+    cmd[1] = addr & 0xFF;
+    for(int i = 0; i < size; i++){
+        cmd[2 + i] = data[i];
+    }
+    _i2c -> write(_addr, cmd, 2 + size);
+    
+    wait_ms(3);
+}
+
+void EEPROM::read(int addr, char *data, int size)
+{   
+    char B0 = (addr >> 16) & 0x01;
+    char A0 = (addr >> 17) & 0x01;
+    char A1 = (addr >> 18) & 0x01;
+    _addr = 0b10100000 | B0 << 3 | A1 << 2 | A0 << 1;
+    
+    cmd[0] = (addr >> 8) & 0xFF;
+    cmd[1] = addr & 0xFF;
+    
+    _i2c -> write(_addr, cmd, 2);
+    _i2c -> read(_addr, buff, size);
+    
+    for(int i = 0; i < size; i++){
+        data[i] = buff[i];
+    }
+}
\ No newline at end of file