8051闪存未写入芯片

时间:2017-05-03 21:15:07

标签: c flash memory 8051 flash-memory

我正在使用8051微控制器从闪存中读取,写入和擦除。 附加编程操作的波形Waveform for Programming operations

以下是我为了将数据写入芯片而重新创建波形而编写的代码:

void quick_write_op(void)
{
    unsigned char i;

    char SFRPAGE_SAVE=SFRPAGE;
    SFRPAGE=CONFIG_PAGE;

    //test=1;
    Vpp_en=0; //8 volts is supplied to the board. Read/Write operations allowed

    //Wait at least 1us between Vpp high and CSn low
    for(i=0;i<2;i++){}

    //Set-Up program command
    P5=0x40;CSn=0;WEn=0;WEn=1;CSn=1;

    //Program Command (Latch Address & Data)
    P5=data_byte;CSn=0;WEn=0;WEn=1;CSn=1;

    //Wait at least 10us for programming
    for(i=0;i<23;i++){}

    //Program Verify Command
    P5=0xC0;CSn=0;WEn=0;WEn=1;CSn=1;

    //Wait at least 6us for program verify
    for(i=0;i<17;i++){}

    //Program Verification
    P5MDOUT=0x00; //Configured pins to open-drain
    CSn=0;OEn=0;
    OEn=1;CSn=1;

    //Resets the command register 
    P5MDOUT=0xFF;
    P5=0x00;CSn=0;WEn=0;WEn=1;CSn=1;

    Vpp_en=1; //8 volts is now removed
    //test=0;

    SFRPAGE=SFRPAGE_SAVE;
}

我将假设这段代码非常简单,因为它有一张图片可以详细说明我应该做什么。如果由于某种原因很难遵循,那么请告诉我,我将通过添加代码,图像等来澄清。

我不相信在任何地方都存在时序问题,因为我已经使用逻辑分析仪检查过。当我调用write命令时,我想写一个0x55来寻址0x00000,我应该在地址0x55看到0x00000。相反,我正在读回一个空地址0xFF。因此,在读入正确的数据之前,永远陷入WRITE_LOOP。当然,我可能会被自己的偏见所蒙蔽,所以如果我能得到额外的眼睛和建议,那么我会非常感激。谢谢大家。

0 个答案:

没有答案