基于蓝桥杯的单片机模块练习——AT24C02芯片

基于蓝桥杯的单片机模块练习——AT24C02芯片

相关知识点

1.特点
(1)8字节页面(1K、2K)、16字节页面(4K、8K、16K)写入模式
(2)允许部分页面写入
(3)自定时写入周期(最长5毫秒)
(4)100万个写入周期;数据保留时间:100年
(5)具有2K串行EEPROM:内部组织有32页,每页8字节,2K需要一个8位数据字地址用于随机字寻址。

2.详细描述
在这里插入图片描述
在这里插入图片描述
AT24C02提供256个8位字节的可擦除、可编程只读存储器。
<Pin 描述>
■串行时钟(SCL):SCL输入用于将正边沿时钟数据输入每个可编程只读存储器器件,将负边沿时钟数据输出每个器件。
■串行数据(SDA):SDA引脚是双向的,用于串行数据传输。该引脚是开漏驱动的,可以与任何数量的其他开漏或集电极开路器件进行“或”运算。
■设备/页面地址(A2、A1、A0):A2、A1和A0引脚是AT24C02的硬连线设备地址输入。单个总线系统上可以寻址多达八个1K/2K设备。
■写保护(WP):写保护引脚,可提供硬件数据保护。当连接到地(GND)时,写保护引脚允许正常读/写操作。当写保护引脚连接到VCC时,写保护功能将被启用。
3.设备操作
符合IIC通讯,具体详见IIC通讯协议一节
4.设备寻址
1K、2K、4K、8K和16K可编程只读存储器器件在启动条件后都需要一个8位器件地址字节,以使芯片能够进行读或写操作。
在这里插入图片描述
设备地址的第八位是读/写操作选择位。如果该位为高电平,则启动读操作;如果该位为低电平,则启动写操作。
比较设备地址后,可编程只读存储器将输出一个零。如果没有进行比较,芯片将返回待机状态。
5.写操作
1.字节写入
写操作要求在写入设备地址字和确认之后有一个8位数据字地址。收到该地址后,EEPROM将再次以零响应,然后在第一个8位数据字中计时。收到8位数据字后,EEPROM将输出一个零,寻址设备(如微控制器)必须以停止条件终止写序列。此时,EEPROM进入内部定时写入周期tWR,写入非易失性存储器。在写周期期间(最慢5ms),所有输入都被禁用,并且直到写操作完成,EEPROM才会响应。
在这里插入图片描述

/************************ 模式一 *************************
void write_24C02(unsigned char addr,unsigned char dat)
{
	IIC_Start();
	IIC_SendByte(SlaveAddrW);
	IIC_WaitAck();
  IIC_SendByte(addr);	
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
	
	
}
*********************************************************/

2.页写入
1K/2K可编程只读存储器能够进行8字节的页面写入,4K、8K和16K设备能够进行16字节的页面写入。页面写入的启动方式与字节写入相同,但微控制器不会在第一个数据字输入后发送停止条件。相反,在可擦可编程只读存储器确认收到第一个数据字后,微控制器可以再传输多达7个(1K/2K)或15个(4K,8K,16K)数据字。在接收到每个数据字后,可擦可编程只读存储器(EEPROM)将以零响应。微控制器必须以停止条件终止页面写入序列。
在这里插入图片描述

数据字地址低三(1K/2K)或四(4K,8K,16K)位在收到每个数据字后内部递增。较高的数据字地址位不递增,保留存储器页行位置。当内部生成的字地址到达页面边界时,下一个字节被放在同一页面的开头。所以如果超过8个(1K/2K)或16个(4K,8K,16K)数据字被传输到可编程只读存储器,数据字地址将“翻转”,先前的数据将被覆盖。

确认轮询:一旦内部定时写周期开始,并且EEPROM输入被禁用,就可以启动确认轮询。这包括发送一个起始条件,后跟设备地址字。读/写位代表所需的操作。只有当内部写周期完成时,EEPROM才会以零响应,允许读或写序列继续。
页写入时应当注意地址对齐的问题,即WORD ADDRESS%8 ==0

unsigned char _pWriteBuf[16] = {需要写入的数据};
///************************页写操作*************************
void Page_Write(unsigned char *_pWriteBuf, unsigned char Address, unsigned char Size)
{
	unsigned char i;
	for(i=0; i<Size; i++)
	{
		if((i == 0) || ((Address&0x07) == 0))
		{
			IIC_Stop();//如果没写完全部的数据,却占满了当前的页面,那么换页前需要给一个停止信号,来把已经写入的一页数据送入eeprom
			do {                       //用寻址操作查询当前是否可进行读写操作
        IIC_Start();
		    IIC_SendByte(SlaveAddrW);
        if (IIC_WaitAck() == 0) //应答则跳出循环,非应答则进行下一次查询
        {
            break;
        }
       IIC_Stop();/* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
    } while(1);
	IIC_SendByte(Address);	//只需要在写入第一个数据或者换页后才需要用户给一个写入地址。而在同一个一个页面的写入时,硬件会自己把该地址加一处理。
	IIC_WaitAck();
		}
  
	IIC_SendByte(_pWriteBuf[i]);
	IIC_WaitAck();
		
	Address++;
	
	}
	IIC_Stop();
	
}
//*********************************************************/

6.读操作
除了器件地址字中的读/写选择位设为1之外,读操作的启动方式与写操作相同。有三种读取操作:当前地址读取、随机地址读取和顺序读取。

1.当前地址读取
内部数据字地址计数器保持最后一次读或写操作期间访问的最后一个地址,递增1。只要芯片功率保持不变,该地址在两次操作之间保持有效。读取期间的地址“翻转”是从最后一个内存页的最后一个字节到第一个页面的第一个字节。(写期间的地址“翻转”是从当前页的最后一个字节到同一页的第一个字节。)
2.顺序读取

由于1.2.用的不多,此处不做详细说明,用到时自己查芯片手册
3.随机读取
随机读取需要一个“虚拟”字节写入序列来载入数据字地址。一旦器件地址字和数据字地址被输入,并由EEPROM确认,微控制器必须产生另一个启动条件。微控制器现在通过发送读/写选择位为高电平的器件地址来启动当前地址读取。电可擦可编程只读存储器确认设备地址,并连续输出数据字。微控制器不会以零响应,但会产生以下停止条件。
在这里插入图片描述

unsigned char read_24C02(unsigned char addr)
{
	unsigned char temp;
	IIC_Start();
	IIC_SendByte(SlaveAddrW);
	IIC_WaitAck();
  IIC_SendByte(addr);	
	IIC_WaitAck();
	IIC_Start();
	IIC_SendByte(SlaveAddrR);
	IIC_WaitAck();
	temp = IIC_RecByte();
	IIC_SendAck(1); 
	IIC_Stop();
	return temp;
}

注意

采用单字节写入方式来进行连续写操作时,必须要在每次写入后加一个5ms延时。

    write_24C02(0x01,dat1 + 1);
	Delay_1ms(5);
	write_24C02(0x03,dat2 + 1);
	Delay_1ms(5);//往AT24C02里面写数据必须加延时,否则写不进去数据,各种错误,。。。写一串数据延时5ms就可以了
	write_24C02(0x06,dat3 + 1);

比赛提供的IIC驱动需要做一些修改
(如果不进行此文件的修改可能会造成页写入的错误。导致超过一页之后的数据写入不进去,也就是说从第九个数据开始就写入不进去)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值