4-GPIO controlled EEPROM AT93C46

EEPROM_AT93C46.cpp

Committer:
king33jp
Date:
2014-05-09
Revision:
2:bf02c4f42b15
Parent:
0:9cc1d5ebe758

File content as of revision 2:bf02c4f42b15:

#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;
}