移植原子最新的IIC代码操作24C64芯片,读写校验始终失败,写入的是1 2 3 4 5 6....,读出的值每次都是0A,0A,FE这些,折腾了一天都整好。看原子的代码有句话我没看懂,
//初始化IIC接口
void AT24Cxx_Init(void)
{
AT24Cxx_PortInit();//IIC初始化
AT24CXX_Check();
}
//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址
//返回值 :读到的数据
uint8_t AT24CXX_ReadOneByte(uint16_t ReadAddr)
{
uint8_t temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//发送高地址
}
else
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
//IIC_Start(); 这里为为什么还要加个IIC起始信号
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
自己顶,根据手册时序一个一个校对,问题解决。
找到问题了,在读的环节出了问题,读完EEPROM之后,主机应该发应答非信号,但我发的是应答信号,然后停止总线传输。结果就出了这样的问题,但不明白为什么是这种数据错一半的现象
一周热门 更多>