4-GPIO controlled EEPROM AT93C46
EEPROM_AT93C46.cpp@2:bf02c4f42b15, 2014-05-09 (annotated)
- Committer:
- king33jp
- Date:
- Fri May 09 04:35:09 2014 +0000
- Revision:
- 2:bf02c4f42b15
- Parent:
- 0:9cc1d5ebe758
hoge
Who changed what in which revision?
User | Revision | Line number | New 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 | } |