我正在使用8051微控制器从闪存中读取,写入和擦除。 附加编程操作的波形
以下是我为了将数据写入芯片而重新创建波形而编写的代码:
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
。当然,我可能会被自己的偏见所蒙蔽,所以如果我能得到额外的眼睛和建议,那么我会非常感激。谢谢大家。