本文介绍调试Eeprom,需使用IIC协议。所以阅读本文的前提是已经了解IIC协议。
一、Eeprom介绍:
Eeprom,也就是Rom,简单理解为数据存储器件,数据在掉电时不会丢失。达到保存参数、记录等目的。
此次我所AT24C02芯片:容量大小2048Bit,也就是256个Byte;地址从0x00~0xFF;可支持100万次写入;24C02自己把数据从缓存写入到内存中最大不超过5Ms。
二、原理图绘制介绍:
A0-A2,共3个脚,对应IIC器件地址的3Bit。通过上、下拉可组合出8种状态,在IIC总线上最多可挂8个设备。
设备地址:高4位固定0xA,以上原理图A0~A2全接地。所以器件地址为:0b1010000x。x为IIC读/写位。读为1,写为0。
WP为写保护位,拉高保护(不能读写操作);拉低可读写操作。
三、软件操作
软件重启:
①在IIC Start后;②SDA拉高,SCL送9个周期信号;③IIC Start;④IIC Stop。
void reset24C02(void)
{
uint8_t cnt;
I2C_Start();
I2cSclClr();
I2cSdaSet();
I2cDelay(0);
for(cnt = 0; cnt < 9; cnt++)
{
I2cSclSet();
I2cDelay(0);
I2cSclClr();
I2cDelay(0);
}
I2C_Start();
I2C_Stop();
}
实际使用波形如下。
字节写入:
按照如下程序中备注的步骤操作
UINT8 write24C02_Byte(uint8_t addr, UINT8 data)
{
UINT8 Ack;
I2C_Start(); //Step 1 IIC Start
I2C_WriteByte(0xA0); //Step 2 Write Device Addr and Write Flag
Ack = IIC_Wait_Ack(100); //Step 2.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
I2C_WriteByte(addr); //Step 3 Write Title Write Addr
Ack = IIC_Wait_Ack(100); //Step 3.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
I2C_WriteByte(data); //Step 4 Write Data
Ack = IIC_Wait_Ack(100); //Step 4.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
I2C_Stop(); //Step 5 IIC Stop
return 1;
}
字节读出:
按照如下程序中备注的步骤操作
UINT8 read24C02_Byte(uint8_t addr)
{
UINT8 Ack;
UINT8 readData;
I2C_Start(); //Step 1 IIC Start
I2C_WriteByte(0xA0); //Step 2 Write Device Addr and Write Flag
Ack = IIC_Wait_Ack(100); //Step 2.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
I2C_WriteByte(addr); //Step 3 Write Title Read Addr
Ack = IIC_Wait_Ack(100); //Step 3.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
I2C_Start(); //Step 4 IIC Start
I2C_WriteByte(0xA1); //Step 5 Write Device Addr and Read Flag
Ack = IIC_Wait_Ack(100); //Step 5.1 Wite Ack
while(!Ack)
{
I2C_Stop();
return IICERR_NACK;
}
readData = I2C_ReadByte(0); //Step 6 read Data,and Send Nak
I2C_Stop(); //Step 7 IIC Stop
return readData;
}
四、注意事项:
1、操作速度不能过快
由于在写数据时,24C08都是先将数据写到缓存中,然后再写入内容中,所以如果操作过快,将会出现24C08出现IIC不应答情况。(按资料说的,最大的间隔时间是5Ms)
而且如果刚写完后继续进行读操作,也会出现IIC不应答现象。
2、在连续写操作时,需要注意地址只是会在低3Bit增加。
连续写操作,最多只能写8Byte。如果超过8Byte,写地址将会折回,并覆盖之前所写的内容。
比如说写的地址是0x0,那么连续写8字节数据地址将会是:0,1,2,3,4,5,6,7.
但是当写的地址是0x4,那么连续写8字节数据地址将会是:4,5,6,7,0,1,2,3。因为只增加低3Bit。所以遇到此情况,需分2次写,先写4,5,6,7的,再写8,9,10,11的。
以上完结。