I2C总线的EEPROM24C02按页操作

直接进入正题,我们先来分析一下,24C02的按页写时许与注意事项:

在这里插入图片描述

注意事项:首先你要确认你的24C02器件一次按页写入能够写多少个字节,这个建议去查看官方数据手册,这里为例的是一次只能读取8字节的24C02
页写操作的启动与单字节写一样是:启动总线-器件寻址-子器件寻址-写入数据-停止信号!当然应答信号不要忘记给哦,谁接收谁应答!!

在按页写之前要考虑好器件的内存空间和一次最多能够读取多少个字节,要不然可能会擦写掉你之前写入的数据,因为一旦发送的字节超出了范围,那么器件的地址计数器就会自动翻转.
简单来说类似于,你一次要写8个字节,现在你刚好在第253个字节的位置,那么当写到第256个字节时,后面的几个字节就会覆盖到第1个字节开始的地方。

按页写于单字节写的最大区别在于,写入数据的时序不同,单字节写入是写完一个字节之后就要主机停止信号,然后进行数据的擦写周期,看按页写的时许图可以知道,每次发送完一个字节之后只要跟一个应答就可以继续写入下一个字节,当写满8字节之后才需要停止信号进行数据的擦写。

按页写跟单字节写最大的优势在于速度很快,不需要不停的重启总线。

好了,下面是源代码,请各位客官欣赏。

/*********************************************************************
		函数名:E2WritePage();
		参数列表:第一个为I2C_Add器件地址,第二个addr器件子地址,第三个参数为数据数组,第四个参数为写入的字节数
		返回参数:0:写入失败,内存不够,1:正常写入
		功能:实现多字节写入器件
************************************************************************/
uchar E2WritePage(uchar I2C_Addr,uchar addr,uchar *buf,uint len)
{
	uint i;
	if(MAX_E2-addr<len)//判断现存内存是否足够,这里的MAX_E2是我定义的一个宏变量,值是255
		return 0;
		
		while(len>0){
			I2C_Start();//启动总线
			I2C_WriteByte((I2C_Addr<<1));
//			do{
//				i++;
//				I2C_Start();//启动总线
//						if(!(I2C_WriteByte((I2C_Addr<<1))))
//								break;
//				I2C_Stop();
//			}while(i<65536);
//			
			I2C_WriteByte((addr));//子器件寻址
			
			while(len>0){
				I2C_WriteByte(*buf++);//写入数据
				addr++;
				len--;
				//这个Page_bye也是我定义的一个宏变量,值是0x07,
				//用来是否写入够8字节了,够了就直接退出内循环,开始写下一页的数据,也就是翻页
				if(addr&Page_bye==0)
					break;
			}
			I2C_Stop();
			Delay10ms();
		}
	return 1;
}

延时函数的作用是防止在器件进行写周期的时候写入数据,因为器件在进行数据写入周期是不响应主机的任何写入数据操作的

我觉得还应该把I2C总线数据写入函数放出来给各种看看。

/I2C总线写入操作
bit I2C_WriteByte(uchar dat)
{
	uchar temp;
	bit ack;
	for(temp=0x80;temp!=0;temp>>=1)//1010 0000
	{//0000 0000
		if( (temp&dat) ==0)//检查当前为是0还是1
			SDA=0;
		else 
			SDA=1;
		
		I2C_delay();//延时至少4.7us后拉高时钟线
		SCL=1;
		I2C_delay();//延时保持拉高至少4us
		SCL=0;//保持拉高至少4us之后拉低
		}
		ack=I2C_Ack();//接收一个ACK
		return ack;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值