AR93C56A EEPROM IC support for mbed platform.
AT93C56A.cpp@1:37c4eb41af9c, 2015-07-20 (annotated)
- Committer:
- akhilpanayam
- Date:
- Mon Jul 20 08:25:30 2015 +0000
- Revision:
- 1:37c4eb41af9c
- Parent:
- 0:34cce085d32e
* Removed comments.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
akhilpanayam | 0:34cce085d32e | 1 | #include "AT93C56A.h" |
akhilpanayam | 0:34cce085d32e | 2 | #include "mbed.h" |
akhilpanayam | 0:34cce085d32e | 3 | |
akhilpanayam | 0:34cce085d32e | 4 | AT93C56A::AT93C56A(PinName eecs,PinName eeck,PinName eedi,PinName eedo): _eecs(eecs),_eeck(eeck),_eedi(eedi),_eedo(eedo){ |
akhilpanayam | 0:34cce085d32e | 5 | _eecs=0; // Active High State |
akhilpanayam | 0:34cce085d32e | 6 | _eeck=0; |
akhilpanayam | 0:34cce085d32e | 7 | }; |
akhilpanayam | 0:34cce085d32e | 8 | |
akhilpanayam | 0:34cce085d32e | 9 | void AT93C56A::vSend(unsigned short usCommand) |
akhilpanayam | 0:34cce085d32e | 10 | { |
akhilpanayam | 0:34cce085d32e | 11 | signed char i=10; |
akhilpanayam | 0:34cce085d32e | 12 | _eedi=1; //SB |
akhilpanayam | 0:34cce085d32e | 13 | _eecs=1; // Chip Select High |
akhilpanayam | 0:34cce085d32e | 14 | wait_us(1); // SB Clock Generation |
akhilpanayam | 0:34cce085d32e | 15 | _eeck=1; |
akhilpanayam | 0:34cce085d32e | 16 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 17 | _eeck=0; |
akhilpanayam | 0:34cce085d32e | 18 | while(i>=0) |
akhilpanayam | 0:34cce085d32e | 19 | { |
akhilpanayam | 0:34cce085d32e | 20 | _eedi = (usCommand>>i)&0x01; |
akhilpanayam | 0:34cce085d32e | 21 | i--; |
akhilpanayam | 0:34cce085d32e | 22 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 23 | _eeck=1; |
akhilpanayam | 0:34cce085d32e | 24 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 25 | _eeck=0; |
akhilpanayam | 0:34cce085d32e | 26 | } |
akhilpanayam | 0:34cce085d32e | 27 | } |
akhilpanayam | 0:34cce085d32e | 28 | void AT93C56A::vWriteEnable() |
akhilpanayam | 0:34cce085d32e | 29 | { |
akhilpanayam | 0:34cce085d32e | 30 | vSend(EE_EWEN); |
akhilpanayam | 0:34cce085d32e | 31 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 32 | _eecs=0; //Chip Select Low |
akhilpanayam | 0:34cce085d32e | 33 | } |
akhilpanayam | 0:34cce085d32e | 34 | void AT93C56A::vWriteDisable() |
akhilpanayam | 0:34cce085d32e | 35 | { |
akhilpanayam | 0:34cce085d32e | 36 | vSend(EE_EWDS); |
akhilpanayam | 0:34cce085d32e | 37 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 38 | _eecs=0; //Chip Select Low |
akhilpanayam | 0:34cce085d32e | 39 | } |
akhilpanayam | 0:34cce085d32e | 40 | void AT93C56A::vErase(unsigned short usAddr) |
akhilpanayam | 0:34cce085d32e | 41 | { |
akhilpanayam | 0:34cce085d32e | 42 | vSend(EE_ERASE|usAddr); |
akhilpanayam | 0:34cce085d32e | 43 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 44 | _eecs=0; |
akhilpanayam | 0:34cce085d32e | 45 | /** wait busy flag clear */ |
akhilpanayam | 0:34cce085d32e | 46 | wait_us(1); // tcs > 250ns @2.7V |
akhilpanayam | 0:34cce085d32e | 47 | _eecs=1; |
akhilpanayam | 0:34cce085d32e | 48 | wait_us(1); // tsv < 250ns @2.7V |
akhilpanayam | 0:34cce085d32e | 49 | while(_eedo==0); // 0.1ms < twp < 10ms |
akhilpanayam | 0:34cce085d32e | 50 | _eecs=0; |
akhilpanayam | 0:34cce085d32e | 51 | } |
akhilpanayam | 0:34cce085d32e | 52 | void AT93C56A::vWrite(unsigned short usAddr, unsigned char ucData) |
akhilpanayam | 0:34cce085d32e | 53 | { |
akhilpanayam | 0:34cce085d32e | 54 | signed char i=7; |
akhilpanayam | 0:34cce085d32e | 55 | vSend(EE_WRITE|usAddr); |
akhilpanayam | 0:34cce085d32e | 56 | for(i=7;i>=0;i--) |
akhilpanayam | 0:34cce085d32e | 57 | { |
akhilpanayam | 0:34cce085d32e | 58 | _eedi = (int)( (ucData>>i)&0x0001 ); |
akhilpanayam | 0:34cce085d32e | 59 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 60 | _eeck=1; |
akhilpanayam | 0:34cce085d32e | 61 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 62 | _eeck=0; |
akhilpanayam | 0:34cce085d32e | 63 | } |
akhilpanayam | 0:34cce085d32e | 64 | _eecs=0; |
akhilpanayam | 0:34cce085d32e | 65 | /** wait busy flag clear */ |
akhilpanayam | 0:34cce085d32e | 66 | wait_us(1); // tcs > 250ns @2.7V |
akhilpanayam | 0:34cce085d32e | 67 | _eecs=1; |
akhilpanayam | 0:34cce085d32e | 68 | wait_us(1); // tsv < 250ns @2.7V |
akhilpanayam | 0:34cce085d32e | 69 | while(_eedo==0); // 0.1ms < twp < 10ms |
akhilpanayam | 0:34cce085d32e | 70 | _eecs=0; |
akhilpanayam | 0:34cce085d32e | 71 | } |
akhilpanayam | 0:34cce085d32e | 72 | unsigned char AT93C56A::ucRead(unsigned short usAddr) |
akhilpanayam | 0:34cce085d32e | 73 | { |
akhilpanayam | 0:34cce085d32e | 74 | unsigned char data=0; |
akhilpanayam | 0:34cce085d32e | 75 | signed char i=7; |
akhilpanayam | 0:34cce085d32e | 76 | |
akhilpanayam | 0:34cce085d32e | 77 | vSend(EE_READ|usAddr); |
akhilpanayam | 0:34cce085d32e | 78 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 79 | |
akhilpanayam | 0:34cce085d32e | 80 | for(i=7;i>=0;i--) |
akhilpanayam | 0:34cce085d32e | 81 | { |
akhilpanayam | 0:34cce085d32e | 82 | _eeck=1; |
akhilpanayam | 0:34cce085d32e | 83 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 84 | _eeck=0; |
akhilpanayam | 0:34cce085d32e | 85 | data = data | (_eedo<<i); |
akhilpanayam | 0:34cce085d32e | 86 | wait_us(1); |
akhilpanayam | 0:34cce085d32e | 87 | } |
akhilpanayam | 0:34cce085d32e | 88 | _eecs=0; |
akhilpanayam | 0:34cce085d32e | 89 | |
akhilpanayam | 0:34cce085d32e | 90 | return data; |
akhilpanayam | 0:34cce085d32e | 91 | } |