打印

求助一下eeprom读写的时候 死机问题。

[复制链接]
1571|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzcook|  楼主 | 2018-11-15 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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));
        }


}

相关帖子

沙发
cainiao518| | 2018-11-15 10:45 | 只看该作者
有用串口吗

使用特权

评论回复
板凳
chunyang| | 2018-11-15 12:17 | 只看该作者
FALSH的扇区擦除和写入均需要时间,需要足够延时,建议仔细看明白器件手册。

使用特权

评论回复
地板
chunyang| | 2018-11-15 12:20 | 只看该作者
缓冲扇区法需要注意缓冲扇区的擦写次数,只有内存不够时才不得以为之。如果操作频繁,无法满足产品设计寿命,要么选择内存足够的型号或扩展片外存储器,要么则在空余扇区足够时采用轮换使用的办法来延寿。

使用特权

评论回复
5
vrgood| | 2018-11-18 21:33 | 只看该作者
        for(i = RBuf[3]*8;i<512;i++)
        {
                IapProgramByte(i+((RBuf[2]-1)*0x200),IapReadByte(0x4400));
        }
***你定义的i 是uchar,永远到不了512,死循环在这里了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝