目录
四、检查AT24CXX是否正常:u8 AT24CXX_Check(void)
五、在 AT24CXX 里面的指定地址开始写入长度为 Len 的数据
六、在 AT24CXX 里面的指定地址开始读出长度为 Len 的数据
七、在 AT24CXX 里面的指定地址开始写入指定个数的数据
八、在 AT24CXX 里面的指定地址开始读出指定个数的数据
一、24C02 简介
设备地址:
在IIC开始时,首先由主机设备向从机设备发送其从机设备地址,选择与哪个从机设备进行通讯,24C02作为从机时,地址前四位为1010,转为16进制后为A,后三位在硬件中全部拉低为低电平,用0表示;第八位为读/写选择位,0表示写入,1表示读取;用16进制表示为0xA0或者0xA1;
写入时序图:
读取时序图:
二、在 AT24CXX 指定地址写入一个数据:
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
函数源码:
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
}
else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址 0XA0,写数据
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10); //EEPROM 写入过程比较慢,需等待一点时间,再写下一次
}
其中:
形参 u16 WriteAddr 表示写入数据的目的地址;
形参 u8 DataToWrite 表示要写入的数据;
根据24C02的写入时序编写程序,操作步骤如下:
(1)发送开始START信号
(2)发送器件器件地址0XA0,最后一位为0,表示由主机发送数据,从机接收数据;
(3)从机检测到主机发送的地址与自己的地址相同时发送一个应答信号ACK;
(4)发送待操作的字节地址
(5)等待一个ACK信号;
(6)发送字节数据;
(7)等待一个ACK信号;
(8)产生一个停止信号,I2C停止;
代码中,首先对设备型号进行了判断,当存储单元大于256个字节的时候,存储地址分两次发送:第一次把地址向左移8位—WriteAddr>>8,发送地址的高8位;第二次将地址与256取余—WriteAddr%256,得到的余数即为低八位的地址(可以随便取两个大于256的数验证一下)。
如果设备的存储单元小于256个字节,按照步骤直接发送地址与256的余数(等于地址本身&#x