欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

24c02读写(iic总线)

程序员文章站 2022-03-02 14:45:31
24C02简介24c02地址介绍24C02是一个2K位串行CMOS 的EEPROM,内部含有256个8位字节。与 400KHz I2C 总线兼容 1.8 到 6.0 伏工作电压范围 低功耗 CMOS 技术 写保护功能 当 WP 为高电平时进入写保护状态 页写缓冲器 自定时擦写周期 1,000,000 编程/擦除周期 可保存数据 100 年 8 脚 DIP SOIC 或 TSSOP 封装 const u8 TEXT_Buffer[]={"Elite STM32 IIC TEST"}...

24C02简介
24c02地址介绍

24C02得工作原理。
1、24C02是2Kbits 意思是有2048bit,换算成字节是256Byte,也就是说最多可以存储255个字节的数据;
2、ATMEl24C02(应该其他厂家的24C02也是这样子吧。。。)有32页,每页可以存放8个字节;
3、24C02有两种工作模式:
(1)、字节写入模式:结合技术文档我认为该模式是这样工作的:首先是可以再任意的地址(0x00~0xFF)写入一个字节,也可以在某一地址连续的写入N字节,而且不需要翻页,从技术手册得知,答题时说字节写入模式下,页指针根写入数据的多少来自动增加实现翻页功能,不用自己在程序里边实现;
(2)、页写入模式:页写入模式下,手册上写着,一页可以存8字节,当存储的数据大于8时,则会覆盖先前保存的数据,例如,有16个数据 uchar data[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},从24C02的0x00地址开始存放,当存完一页(8个)时,第9个数据会保存在0x00,覆盖掉开始保存的1,后边的数据一次类推,这样的现象叫做“翻转”,如果想写完一页后将剩余的数据保存在下一页,页指针需要自己来设定。
我觉着,字节写入模式相对更简单些。
转自

24C02是一个2K位串行CMOS 的EEPROM,内部含有256个8位字节。
与 400KHz I2C 总线兼容 
1.8 到 6.0 伏工作电压范围 
低功耗 CMOS 技术 
写保护功能 当 WP 为高电平时进入写保护状态 
页写缓冲器 
自定时擦写周期 
1,000,000 编程/擦除周期 
可保存数据 100 年 
8 脚 DIP SOIC 或 TSSOP 封装 

24c02读写(iic总线)

const u8 TEXT_Buffer[]={"Elite STM32 IIC TEST"};
	u8 datatemp[SIZE];
AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);//将数据数组写入24c02

AT24CXX_Read(0,datatemp,SIZE);//读24c02存入datatemp
//在AT24CXX里面的指定地址开始写入指定个数的数据
//WriteAddr :开始写入的地址 对24c02为0~255
//pBuffer   :数据数组首地址
//NumToWrite:要写入数据的个数
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
	while(NumToWrite--)
	{
		AT24CXX_WriteOneByte(WriteAddr,*pBuffer);//将pBuffer的一个字节写进入WriteAddr
		WriteAddr++;
		pBuffer++;
	}
}



写入过程

发送器件地址(0XA0)
发送要写入24C02的内存地址
发送要写入的数据
发送器件地址的格式

24c02读写(iic总线)
高四位1010是24Cxx系列的固定器件地址
接下来是A2、A1、A0是根据器件连接来决定(AT24c02对应的为E2,E1,E0)
我们的原理图都接地所以是000。
R/W为是选择读还是写,1的时候是读,0的时候是写。所以写的地址为0xA0。

iic读写时序
该链接有详细讲解时序,结合如下代码


//在AT24CXX指定地址写入一个数据
//WriteAddr  :写入数据的目的地址    
//DataToWrite:要写入的数据
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{				   	  	    																 
    IIC_Start();  
	if(EE_TYPE>AT24C16)
	{
		IIC_Send_Byte(0XA0);	    //发送写命令
		IIC_Wait_Ack();
		IIC_Send_Byte(WriteAddr>>8);//发送高地址
 	}else
	{
		IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据 
	}	 
	IIC_Wait_Ack();	   
    IIC_Send_Byte(WriteAddr%256);   //发送低地址
	IIC_Wait_Ack(); 	 										  		   
	IIC_Send_Byte(DataToWrite);     //发送字节							   
	IIC_Wait_Ack();  		    	   
    IIC_Stop();//产生一个停止条件 
	delay_ms(10);	 
}

本文地址:https://blog.csdn.net/yunddun/article/details/108568580

相关标签: stm32学习总结