介绍:AT24C02/04/08/16/32/64内含带电可擦除,断电不丢失的存储器E2PROM、
通讯接口:I2C总线
一、字节写:将数据写入E2PROM中的字地址中。(连续写的周期为5ms)
数据帧时序图:
字节写
页写
器件地址:由硬件设计连接组成(如图:由E0、E1、E2决定器件地址,由于都接地,所以地址为0XA0)。
ACK:为(发送 / 接受)应答
字地址:根据数据手册不同。
代码(字节写):
#define AT24C02_ADDRESS 0XA0
/**
* @brief AT24C02 写入一个字节
* @param WordAddress写入字节的地址
* @param Data 写入的数据
* @retval 无
**/
void AT24C02_WritByte(unsigned char WordAddress,Data)
{
I2C_Start(); //起始条件
I2C_SendByte(AT24C02_ADDRESS); //写入器件地址
I2C_ReceiveAck(); //接受应答
I2C_SendByte(WordAddress); //写入字地址
I2C_ReceiveAck(); //接受应答
I2C_SendByte(Data); //写入数据
I2C_ReceiveAck(); //接受应答
I2C_Stop(); //终止条件
}
二、字节读:将E2PROM字地址的数据读取出来。(期间地址中读/写位(最低位)置1)
数据帧时序图:
当前地址读
随机读
顺序读
代码(随机读):
#define AT24C02_ADDRESS 0XA0
/**
* @brief AT24C02 读取一个字节
* @param WordAddress读出字节的地址
* @retval Data 读出的数据
**/
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{
unsigned char Data;
I2C_Start(); //起始条件
I2C_SendByte(AT24C02_ADDRESS); //发送期间地址
I2C_ReceiveAck(); //接受应答
I2C_SendByte(WordAddress); //发送字地址(写入地址)
I2C_ReceiveAck(); //接受应答
I2C_Start(); //起始条件
I2C_SendByte(AT24C02_ADDRESS|0X01); //发送器件地址命令(读取地址,末尾置1)
I2C_ReceiveAck(); //接受应答
Data=I2C_ReceiveByte(); //读取数据
I2C_SendAck(1); //发送应答
I2C_Stop(); //终止条件
return Data;
}