While trying to interface flash SST25VF512 with AT80c51, i find difficulty in Byte program mode of writing to flash.
This is the code i used, could somebody who has worked on this please help me out,
void main(void){ ce = 1; SCK = 0; TMOD = 0x20; TH1 = -3; // 9600 baud SCON = 0x50; TR1 = 1; TI = 1; addr = 0x00000012; Rd_ID = Read_ID(); Byte_Program(addr); void Byte_Program(unsigned long addr){ ce = 0; E_WRSR(); WREN(); Send_Byte(0x02); // Byte Program CMD Send_Byte(((addr & 0xFFFFFF) >> 16)); // sending 3 address bytes Send_Byte(((addr & 0xFFFF) >> 8)); Send_Byte(addr & 0xFF); Send_Byte(0x10); //send data SR_byte = Read_Status_Register(); while((SR_byte &0x01) != 0x00){ SR_byte = Read_Status_Register(); } ce = 1; } void E_WRSR(){ ce = 0; Send_Byte(0x50); // enable Status Reg ce = 1; ce = 0; Send_Byte(0x01); // select write to status register Send_Byte(0x00); // mode 0, ce = 1; } void WREN(){ ce = 0; Send_Byte(0x06);// to Write enable ce = 1; } unsigned char Get_Byte(){ unsigned char i=0, in=0, temp=0; for(i=0;i<8;i++){ in = (in << 1); temp = SO; SCK = 1; if (temp == 1){ in = in | 0x01; } SCK = 0; } return in; } void Send_Byte(unsigned char b_out){ for(i=0;i<8;i++){ if((b_out & 0x80) == 0x80) si = 1; else si = 0; SCK = 1; b_out = (b_out << 1); SCK = 0; } }
Thanks in advance,
So what do i do in this case, please tell me