STM32 IIC/EEPROM(AT24C256)代码与原理详解

一、基础知识

1EEPROM

        是指带电可擦可编程只读存储器。是一种掉电数据不丢失的存储芯片

2AT24C256

        ATMEL公司256kbit串行电可擦的可编程只读存储器

3硬件相关

        

        A0、A1:地址选择输入端。在串行总线结构中,可以连接4个AT24C256IC。用A0、 A1来区分各IC。A0、A1悬空时为0

        SCL:串行时钟输入。上升沿将SDA上的数据写入存储器,下降沿从存储器读出数 据送SDA上。

        SDA:双向串行数据输入输出口。用于存储器与单片机之间的数据交换。

        WP:写保护输入。此引脚与地相连时,允许写操作;与VCC相连时,所有的写存储 器操作被禁止。如果不连,芯片内部下拉到地。

 二代码实现

1写一个数据

        

        EEPROM 进入开始状态后,需要一个8位的地址字来选择芯片进行读写。设备地址 字由5位0、1组成的命令字和两位地址选择位A1、A0和一位读/写操作位构成。对 于 AT24C256,命令字为“10100”,同一串行总线上可以连接4个设备,由地址线 A1,A0加以区分。如只有一个AT24C256,A1,A0都取 0。最低位为1表示读操作

         向 AT24C256发送设备地址字并接到应答信号后,需要发送2个8位地址来选择 要写数据的地址,AT24C256接收到这个地址,应答一个零信号,然后根据时钟写8 位数据到AT24C256。存储器接收到数据后返回一个应答信号。写数据结束, AT24C256进入内部计时的写周期。在写循环过程中所有的输入都不能进行,直到 写结束,EEPROM才响应

我们得到代码:

void AT24C256_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{				   	  	    																 
    IIC_Start();  
	IIC_Send_Byte(0XA0);	    //发送写命令
	IIC_Wait_Ack();
    IIC_Send_Byte(WriteAddr>>8);//发送高地址 
	IIC_Wait_Ack();	   
    IIC_Send_Byte(WriteAddr%256);   //发送低地址
	IIC_Wait_Ack(); 	 										  		   
	IIC_Send_Byte(DataToWrite);     //发送字节							   
	IIC_Wait_Ack();  		    	   
    IIC_Stop();//产生一个停止条件 
	delay_ms(10);	 
}

  2写页

          写页 AT24C256 具有64字节作为一页的写页功能,可以一次性写入一页。写页 的初始化过程与写字节的方法基本相同。不同的是写入一个字节后,微控制器不 发停止状态命令,而是在应答信号后,接着输入63个字节。每一个字节接收到 后,EEPROM照样输出一个为零的应答信号。因为一页只有64个单元,所以数据字 的地址低6位接收到一个字节后会自动加1,高位地址不变,即页地址不变。当内 部产生的地址到页边界时,接下来的字节要放至该页的开始。如果发送至E2PROM 的数据超过 64字节,则最早写的字节将被覆盖。  

        

            

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 IIC/EEPROM(AT24C256)代码与原理详解

发表评论