stc12c5a32s2的eeprom 64个扇区,而每个扇区在写入新数据前需要将其他位置的数据取出,在擦除,在写入,
于是我便将其中一个扇区当做一个缓存扇区,用来写入数据时,将其他数据保存,写入完成之后,在写回原来的扇区。目前的问题是根据这样的思路写的代码,机器死机了,我是配合一块屏幕做的,运行到这个函数时,机器怎么操作也不能运行了。
希望解答一下。
void cmd1b53()
{
uchar temp[8]={0};
uchar i = 0;
for(i=0;i<8;i++)
{
temp[i] = RBuf[4+i];
}
//擦除缓存扇区
IapEraseSector(0x4400);
//将原扇区 除了工作密钥的位置拷贝至缓存扇区
for(i = 0;i<(RBuf[3]-1)*8;i++)
{
IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
}
for(i = RBuf[3]*8;i<512;i++)
{
IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
}
//擦除原扇区
IapEraseSector(0+((RBuf[2]-1)*0x200));
//将解密后的工作密钥写入至目标扇区的目标区域
DES_FUN(temp,datt,workkey,0);
for(i = 0;i<8;i++)
{
IapProgramByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200)),datt[i]);
}
//打印
for(i = 0;i<8;i++)
{
SendByte(IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
}
//写回原扇区
for(i = 0;i<(RBuf[3]-1)*8;i++)
{
IapProgramByte(i+((RBuf[2]-1)*0x200),IapReadByte(0x4400));
}
for(i = RBuf[3]*8;i<512;i++)
{
IapProgramByte(i+((RBuf[2]-1)*0x200),IapReadByte(0x4400));
}
} |