4-GPIO controlled EEPROM AT93C46

Committer:
king33jp
Date:
Fri May 09 04:35:09 2014 +0000
Revision:
2:bf02c4f42b15
Parent:
0:9cc1d5ebe758
hoge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
king33jp 0:9cc1d5ebe758 1 #include "EEPROM_AT93C46.h"
king33jp 0:9cc1d5ebe758 2 #include "mbed.h"
king33jp 0:9cc1d5ebe758 3
king33jp 0:9cc1d5ebe758 4 EEPROM_AT93C46::EEPROM_AT93C46(PinName eecs,PinName eeck,PinName eedi,PinName eedo): _eecs(eecs),_eeck(eeck),_eedi(eedi),_eedo(eedo){
king33jp 0:9cc1d5ebe758 5 _eecs=0; // active is Hi
king33jp 0:9cc1d5ebe758 6 _eeck=0;
king33jp 0:9cc1d5ebe758 7 };
king33jp 0:9cc1d5ebe758 8
king33jp 0:9cc1d5ebe758 9 void EEPROM_AT93C46::send(char data){
king33jp 0:9cc1d5ebe758 10 signed char i=7;
king33jp 0:9cc1d5ebe758 11 _eedi=1;
king33jp 0:9cc1d5ebe758 12 _eecs=1; // fall is in function
king33jp 0:9cc1d5ebe758 13 wait_us(1);
king33jp 0:9cc1d5ebe758 14 _eeck=1;
king33jp 0:9cc1d5ebe758 15 wait_us(1);
king33jp 0:9cc1d5ebe758 16 _eeck=0;
king33jp 0:9cc1d5ebe758 17 while(i>=0){
king33jp 0:9cc1d5ebe758 18 _eedi = (data>>i)&0x01;
king33jp 0:9cc1d5ebe758 19 i--;
king33jp 0:9cc1d5ebe758 20 wait_us(1);
king33jp 0:9cc1d5ebe758 21 _eeck=1;
king33jp 0:9cc1d5ebe758 22 wait_us(1);
king33jp 0:9cc1d5ebe758 23 _eeck=0;
king33jp 0:9cc1d5ebe758 24 }
king33jp 0:9cc1d5ebe758 25 }
king33jp 0:9cc1d5ebe758 26
king33jp 0:9cc1d5ebe758 27 unsigned short EEPROM_AT93C46::read(char addr){
king33jp 0:9cc1d5ebe758 28 unsigned short data=0;
king33jp 0:9cc1d5ebe758 29 signed char i=15;
king33jp 0:9cc1d5ebe758 30 send(EE_READ|addr);
king33jp 0:9cc1d5ebe758 31 wait_us(1);
king33jp 0:9cc1d5ebe758 32 for(i=15;i>=0;i--){
king33jp 0:9cc1d5ebe758 33 _eeck=1;
king33jp 0:9cc1d5ebe758 34 wait_us(1);
king33jp 0:9cc1d5ebe758 35 _eeck=0;
king33jp 0:9cc1d5ebe758 36 data = data | (_eedo<<i);
king33jp 0:9cc1d5ebe758 37 wait_us(1);
king33jp 0:9cc1d5ebe758 38 }
king33jp 0:9cc1d5ebe758 39 _eecs=0;
king33jp 0:9cc1d5ebe758 40 return data;
king33jp 0:9cc1d5ebe758 41 }
king33jp 0:9cc1d5ebe758 42
king33jp 0:9cc1d5ebe758 43 void EEPROM_AT93C46::write_enable(){
king33jp 0:9cc1d5ebe758 44 send(EE_EWEN);
king33jp 0:9cc1d5ebe758 45 wait_us(1);
king33jp 0:9cc1d5ebe758 46 _eecs=0;
king33jp 0:9cc1d5ebe758 47 }
king33jp 0:9cc1d5ebe758 48
king33jp 0:9cc1d5ebe758 49 void EEPROM_AT93C46::write_disable(){
king33jp 0:9cc1d5ebe758 50 send(EE_EWDS);
king33jp 0:9cc1d5ebe758 51 wait_us(1);
king33jp 0:9cc1d5ebe758 52 _eecs=0;
king33jp 0:9cc1d5ebe758 53 }
king33jp 0:9cc1d5ebe758 54 void EEPROM_AT93C46::erase(char addr){
king33jp 0:9cc1d5ebe758 55 send(EE_ERASE|addr);
king33jp 0:9cc1d5ebe758 56 wait_us(1);
king33jp 0:9cc1d5ebe758 57 _eecs=0;
king33jp 0:9cc1d5ebe758 58 /** wait busy flag clear */
king33jp 0:9cc1d5ebe758 59 wait_us(1); // tcs > 250ns @2.7V
king33jp 0:9cc1d5ebe758 60 _eecs=1;
king33jp 0:9cc1d5ebe758 61 wait_us(1); // tsv < 250ns @2.7V
king33jp 0:9cc1d5ebe758 62 while(_eedo==0); // 0.1ms < twp < 10ms
king33jp 0:9cc1d5ebe758 63 _eecs=0;
king33jp 0:9cc1d5ebe758 64 }
king33jp 0:9cc1d5ebe758 65 void EEPROM_AT93C46::write(char addr,unsigned short data){
king33jp 0:9cc1d5ebe758 66 signed char i=15;
king33jp 0:9cc1d5ebe758 67 send(EE_WRITE|addr);
king33jp 0:9cc1d5ebe758 68 for(i=15;i>=0;i--){
king33jp 0:9cc1d5ebe758 69 _eedi = (int)( (data>>i)&0x0001 );
king33jp 0:9cc1d5ebe758 70 wait_us(1);
king33jp 0:9cc1d5ebe758 71 _eeck=1;
king33jp 0:9cc1d5ebe758 72 wait_us(1);
king33jp 0:9cc1d5ebe758 73 _eeck=0;
king33jp 0:9cc1d5ebe758 74 }
king33jp 0:9cc1d5ebe758 75 _eecs=0;
king33jp 0:9cc1d5ebe758 76 /** wait busy flag clear */
king33jp 0:9cc1d5ebe758 77 wait_us(1); // tcs > 250ns @2.7V
king33jp 0:9cc1d5ebe758 78 _eecs=1;
king33jp 0:9cc1d5ebe758 79 wait_us(1); // tsv < 250ns @2.7V
king33jp 0:9cc1d5ebe758 80 while(_eedo==0); // 0.1ms < twp < 10ms
king33jp 0:9cc1d5ebe758 81 _eecs=0;
king33jp 0:9cc1d5ebe758 82 }