最近在看原子大哥24C02的IIC实验例程,看到有个“检查AT24CXX是否正常”的函数有几个问题想请教一下,原函数如下:
//检查AT24CXX是否正常
//这里用了24XX的最后一个地址(255)来存储标志字.
//如果用其他24C系列,这个地址要修改
//返回1:检测失败
//返回0:检测成功
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(255);//避免每次开机都写AT24CXX
if(temp==0X55)return 0;
else//排除第一次初始化的情况
{
AT24CXX_WriteOneByte(255,0X55);
temp=AT24CXX_ReadOneByte(255);
if(temp==0X55)return 0;
}
return 1;
}
1、这个检查函数是一定要有的么?如果没有这个函数会怎么样呢?
2、为什么要“避免每次开机都写AT24XX”呢?换句话说,如果没有避免这个,用久了会怎么样呢?
3、这里面的判断了两次temp==0X55,0X55是什么?有什么用的呢?
4、我现在是改写了这个函数,用来检测AT24C16的,请原子大哥和各位高手帮我检查下对不对,十分感谢:
//检查AT24CXX是否正常
//这里用了24XX的最后一个地址(255)来存储标志字.
//如果用其他24C系列,这个地址要修改
//返回1:检测失败
//返回0:检测成功
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(2047);//避免每次开机都写AT24CXX
if(temp==0X55)return 0;
else//排除第一次初始化的情况
{
AT24CXX_WriteOneByte(2047,0X55);
temp=AT24CXX_ReadOneByte(2047);
if(temp==0X55)return 0;
}
return 1;
}
其实我就是把255改成了2047,其他还需要改么?
不过我下下去了还是检查不到AT24C16~~应该还有地方要改的吧?
5、谢谢原子大哥和各位高手了~~ |