4-GPIO controlled EEPROM AT93C46
Diff: EEPROM_AT93C46.cpp
- Revision:
- 0:9cc1d5ebe758
diff -r 000000000000 -r 9cc1d5ebe758 EEPROM_AT93C46.cpp --- /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