|
春风电源中eeprom存储校验比较简单,我把它改成crc校验 存储3份互相校验更正,但是遇到以下问题,请大家帮忙查看一下 我使用的eeprom是24c02
测试程序/******************************************************************************/
unsigned char temp=0
for(temp=0;temp<78;temp++)
{
EepromData[temp]=250;
}
EepromWriteBlock (&EepromData[0],(unsigned char *)0x00,78);
存储后,读取全部正确
/******************************************************************************/
改进程序
/******************************************************************************/
s8 num[8]; //这个是全局变量,存储用户设置的值
int shuchuA,shuchuV; //这个是输出的DA值0~4095
#define EepromPageSize 80 //页容量定义
#define EepromPage1Addr 0x00//将eeprom分成3份
#define EepromPage2Addr (EepromPage1Addr + EepromPageSize)
#define EepromPage3Addr (EepromPage2Addr + EepromPageSize)
void WriteEepromData (unsigned char M)
{
unsigned char temp=0;
EepromData[0+M*14] = num[0];
EepromData[1+M*14] = num[1];
EepromData[2+M*14] = num[2];
EepromData[3+M*14] = num[3];
EepromData[4+M*14] = num[4];
EepromData[5+M*14] = num[5];
EepromData[6+M*14] = num[6];
EepromData[7+M*14] = num[7];
EepromData[8+M*14] = 0;//备用
// EepromData[9+M*14] = shuchuV/256;//高8位
// EepromData[10+M*14] = shuchuV%256;//低8位
// EepromData[11+M*14] = shuchuA/256;//高8位
// EepromData[12+M*14] = shuchuA%256;//低8位
EepromData[13+M*14] = 0; //预留
EepromWriteBlock(&EepromData[M*14],(unsigned char *)EepromPage1Addr+M*14,14);
EepromWriteBlock(&EepromData[M*14],(unsigned char *)EepromPage2Addr+M*14,14);
EepromWriteBlock(&EepromData[M*14],(unsigned char *)EepromPage3Addr+M*14,14);
// CheckWriteCRC((unsigned char *)EepromPage1Addr,EepromPageSize);
// CheckWriteCRC((unsigned char *)EepromPage2Addr,EepromPageSize);
// CheckWriteCRC((unsigned char *)EepromPage3Addr,EepromPageSize);
}
/******************************************************************************/
上面的程序有注释部分 不要看
测试后发现,num[0]到num[7]中num[3],num[5]存储后读取错误,其他值正确
请大家看看原因,调试了今天了没头绪,大家帮忙看一下 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|