This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

c51:

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,