Akhil P
/
AT93C56AInterfacCode
The Sample program to interface AT93C56 EEPROM IC with STM32F103RB controller.
Revision 0:d6477e83445b, committed 2014-10-31
- Comitter:
- akhilpanayamparambil
- Date:
- Fri Oct 31 07:01:08 2014 +0000
- Commit message:
- Interface code for AT93C56A;
Changed in this revision
diff -r 000000000000 -r d6477e83445b main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 31 07:01:08 2014 +0000 @@ -0,0 +1,141 @@ +#include "mbed.h" + +#define EE_READ 0x400 // 10 XXXXXXXXX(A8-A0) +#define EE_WRITE 0x200 // 01 XXXXXXXXX(A8-A0) +#define EE_EWEN 0x1FF // 00 11XXXXXXX(X is DONT CARE) +#define EE_EWDS 0x000 // 00 00XXXXXXX(X is DONT CARE) +#define EE_ERASE 0x600 // 11 XXXXXXXXX(A8-A0) + +Serial device(PA_9, PA_10); // tx, rx +DigitalOut CS(PC_0); +DigitalOut CK(PB_13); +DigitalIn DI(PB_14); +DigitalOut DO(PB_15); + +void vSend(unsigned short usCommand) +{ + signed char i=10; + DO=1; //SB + CS=1; // Chip Select High + wait_us(1); // SB Clock Generation + CK=1; + wait_us(1); + CK=0; + while(i>=0) + { + DO = (usCommand>>i)&0x01; + i--; + wait_us(1); + CK=1; + wait_us(1); + CK=0; + } +} +void vWriteEnable() +{ + vSend(EE_EWEN); + wait_us(1); + CS=0; //Chip Select Low +} +void vWriteDisable() +{ + vSend(EE_EWDS); + wait_us(1); + CS=0; //Chip Select Low +} +void vErase(unsigned short usAddr) +{ + vSend(EE_ERASE|usAddr); + wait_us(1); + CS=0; +/** wait busy flag clear */ + wait_us(1); // tcs > 250ns @2.7V + CS=1; + wait_us(1); // tsv < 250ns @2.7V + while(DI==0); // 0.1ms < twp < 10ms + CS=0; +} +void vWrite(unsigned short usAddr, unsigned char ucData) +{ + signed char i=7; + vSend(EE_WRITE|usAddr); + for(i=7;i>=0;i--) + { + DO = (int)( (ucData>>i)&0x0001 ); + wait_us(1); + CK=1; + wait_us(1); + CK=0; + } + CS=0; +/** wait busy flag clear */ + wait_us(1); // tcs > 250ns @2.7V + CS=1; + wait_us(1); // tsv < 250ns @2.7V + while(DI==0); // 0.1ms < twp < 10ms + CS=0; +} +unsigned char ucRead(unsigned short usAddr) +{ + unsigned char data=0; + signed char i=7; + + vSend(EE_READ|usAddr); + wait_us(1); + + for(i=7;i>=0;i--) + { + CK=1; + wait_us(1); + CK=0; + data = data | (DI<<i); + wait_us(1); + } + CS=0; + + return data; +} +int main() +{ + unsigned char ucI=0; + + CS = 0; //default state for Chip Select and Clock + CK = 0; + + device.baud(19200); + device.printf("The Program demostrating the IC AT93C56 EEPROM \r\n"); + + device.printf("Going to Write Enable \r\n"); + vWriteEnable(); + + device.printf("Going to Erase Addr 0 \r\n"); + vErase(0); + device.printf("Going to Write Value AA to Addr 0 \r\n"); + vWrite(0,0xAA); + device.printf("Read Back Value %04X\r\n,",ucRead(0)); + + device.printf("Going to Erase Addr 1 \r\n"); + vErase(1); + device.printf("Going to Write Value BB to Addr 1 \r\n"); + vWrite(1,0xBB); + device.printf("Read Back Value %04X\r\n,",ucRead(1)); + + device.printf("Going to Erase Addr 2 \r\n"); + vErase(2); + device.printf("Going to Write Value CC to Addr 2 \r\n"); + vWrite(2,0xCC); + device.printf("Read Back Value %04X\r\n,",ucRead(2)); + + device.printf("Going to Write Disable \r\n"); + + vWriteDisable(); + + while(1) + { + for(ucI=0;ucI<64;ucI++) + { + device.printf("%04X ============== %d\r\n,",ucRead(ucI),ucI); + wait(0.5); + } + } +}
diff -r 000000000000 -r d6477e83445b mbed-rtos.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Oct 31 07:01:08 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#1be1070d822f
diff -r 000000000000 -r d6477e83445b mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Oct 31 07:01:08 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/031413cf7a89 \ No newline at end of file