AT24C02引脚图
引脚功能
A2-A0:用于IIC地址选择,其地址组成是A7 A6 A5 A4 A3 A2 A1 A0 W/R,其中A7-A3固定为1010,通常情况下 A2-A0都接地,所以写地址为0xA0 读地址为0xA1;
WP:写保护引脚,接高电平无法写入,默认情况都接低电平(本来就是EEPROM为的就是读写方便,用flash芯片可以关注一下写保护);
SCL/SDA:分别为IIC的时钟线和数据线;
VCC:支持1.8至5.5V(非常人性化)。
其他
AT24C02能够存储256字节的数据,而且支持最快400KHz的IIC读写速度。
代码
// 函数功能 :初始化AT24C02(引脚、时钟)
void AT24C02_Init(void)
{
//DEV_IIC_Init(0x00,400000); //已经在OLED.C初始化完成
}
//函数功能 : 往AT24C02的一个地址写入一个数据
void AT24C02_Write(unsigned char addr,unsigned char dat)
{
IIC_SendData(AT24C02_ADDR, addr, dat);
}
// 函数功能 :读取AT24C02的一个地址的一个数据
void AT24C02_Read(unsigned char addr,unsigned char *dat)
{
*dat = IIC_ReadData(AT24C02_ADDR, addr);
}
//函数功能 : 往AT24C02的一个地址写入多个数据
void AT24C02_WriteDatas(unsigned char addr,unsigned char *dat,unsigned char len)
{
IIC_SendDatas(AT24C02_ADDR, addr, dat, len);
}
// 函数功能 :读取AT24C02的多个数据
void AT24C02_ReadDatas(unsigned char addr, unsigned char *dat, unsigned char len)
{
IIC_ReadDatas(AT24C02_ADDR, addr, dat, len);
}
下面补充一下 IIC的读写函数
void IIC_SendData(uint8_t dev_addr, uint8_t reg_addr, uint8_t data)
{
IIC_Start();
IIC_Send_Byte(dev_addr&0xfe);
if(IIC_Wait_Ack()) return;//发送失败
IIC_Send_Byte(reg_addr);
if(IIC_Wait_Ack()) return;//发送失败
IIC_Send_Byte(data);
if(IIC_Wait_Ack()) return;//发送失败
IIC_Stop();
}
uint8_t IIC_ReadData(uint8_t dev_addr, uint8_t reg_addr)
{
uint8_t data;
IIC_Start();
IIC_Send_Byte(dev_addr&0xfe);
if(IIC_Wait_Ack()) return 0xff;//发送失败
IIC_Send_Byte(reg_addr);
if(IIC_Wait_Ack()) return 0xff;//发送失败
IIC_Start();
IIC_Send_Byte(dev_addr|0x01);
if(IIC_Wait_Ack()) return 0xff;//发送失败
data = IIC_Read_Byte(1);
IIC_Stop();
return data;
}