IIC操作读写Eeprom程序(模拟IO操作AT24C02)

本文介绍调试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的。

以上完结。

本人新建了个QQ群,如想进一步沟通可添加:947187213。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值