4-GPIO controlled EEPROM AT93C46

Revision:
0:9cc1d5ebe758
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM_AT93C46.cpp	Fri May 09 02:17:12 2014 +0000
@@ -0,0 +1,82 @@
+#include "EEPROM_AT93C46.h"
+#include "mbed.h"
+
+EEPROM_AT93C46::EEPROM_AT93C46(PinName eecs,PinName eeck,PinName eedi,PinName eedo): _eecs(eecs),_eeck(eeck),_eedi(eedi),_eedo(eedo){
+    _eecs=0;     // active is Hi
+    _eeck=0;
+};
+
+void EEPROM_AT93C46::send(char data){
+    signed char i=7;
+    _eedi=1;
+    _eecs=1;     // fall is in function
+    wait_us(1);
+    _eeck=1;
+    wait_us(1);
+    _eeck=0;
+    while(i>=0){
+        _eedi = (data>>i)&0x01;
+        i--;
+        wait_us(1);
+        _eeck=1;
+        wait_us(1);
+        _eeck=0;
+    }
+}
+
+unsigned short EEPROM_AT93C46::read(char addr){
+    unsigned short data=0;
+    signed char i=15;
+   send(EE_READ|addr);
+    wait_us(1);
+    for(i=15;i>=0;i--){
+        _eeck=1;
+        wait_us(1);
+        _eeck=0;
+        data = data | (_eedo<<i);
+        wait_us(1);
+    }
+    _eecs=0;
+    return data;
+}
+
+void EEPROM_AT93C46::write_enable(){
+    send(EE_EWEN);
+    wait_us(1);
+    _eecs=0;
+}
+
+void EEPROM_AT93C46::write_disable(){
+    send(EE_EWDS);
+    wait_us(1);
+    _eecs=0;
+}
+void EEPROM_AT93C46::erase(char addr){
+    send(EE_ERASE|addr);
+    wait_us(1);
+    _eecs=0;
+/** wait busy flag clear */
+    wait_us(1);     // tcs > 250ns @2.7V
+    _eecs=1;
+    wait_us(1);     // tsv < 250ns @2.7V
+    while(_eedo==0); // 0.1ms < twp < 10ms 
+    _eecs=0;
+}
+void EEPROM_AT93C46::write(char addr,unsigned short data){
+    signed char i=15;
+    send(EE_WRITE|addr);
+    for(i=15;i>=0;i--){
+        _eedi = (int)( (data>>i)&0x0001 );
+        wait_us(1);
+        _eeck=1;
+        wait_us(1);
+        _eeck=0;
+    }
+    _eecs=0;
+/** wait busy flag clear */
+    wait_us(1);     // tcs > 250ns @2.7V
+    _eecs=1;
+    wait_us(1);     // tsv < 250ns @2.7V
+    while(_eedo==0); // 0.1ms < twp < 10ms 
+    _eecs=0;
+}
\ No newline at end of file