历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2019年08月13日 | 贰拾壹:EEPROM的操作

2019-08-13 来源:eefocus

EEPROM概述

电可擦除只读存储器 EEPROM 可以长期非易失地保存信息,又可以随时用电改写。EEPROM的种类很多,它们大致可以分为并行、串行、加密型3种。

  1. 并行 EEPROM:速度快,可做到高度集成。但是引脚多,使用不方便。

  2. 串行 EEPROM:引脚少,应用方便。但结构复杂,难以做到了高度集成,所以单片机一般容量不大。

  3. 加密型 EEPROM:可以对写入的数据进行加密,避免越权存取,保密功能强。但加密型EEPROM的操作步骤比较复杂,成本高。

这里写图片描述

通信时序

这里写图片描述
1.起停信号
时钟线保持高电平期间,数据线电平从高到低的跳变为I2C总线的起始信号。时钟线保持高电平期间,数据线电平从低到高的跳变为I2C总线的停止信号。
2.设备选址
主器件通过发送1个起始信号启动发送过程,然后发送它所需要寻址的从器件地址,8位从器件地址的高4位固定为1010,接下来的3位(A10,A9,A8)为器件的地址位。
3.应答信号
I2C总线传送数据时,每成功传送1Byte,接收器都必须产生1个应答信号,应答的器件在第9个时钟周期将SDA线拉低表示其已收到1个8位数据。

写操作

1.字节写
这里写图片描述

2.页写(一页,即16Byte,16个字节)
这里写图片描述

读操作

1.从当前地址读
这里写图片描述
2.随机地址读
这里写图片描述

实验

这里写图片描述
#代码

*   【课程22】 ****EEPROM的读写***********

*

*   【说  明】 ****使用CAT24WC16芯片,掉电数据非易失

*

*   【描  述】 ****往CAT24WC16芯片写入一个数据后,然后再从同一个

地址取出数据,看两个数据是否相等?

*

******************************************************************/


#include

#include


//---------常用的两个宏定义-------------- 

#define uint8 unsigned char

#define uint16  unsigned int



/*--24WC16功能引脚设置-----*/

sbit  WC16_SCL=P2^2;

sbit  WC16_SDA=P2^3;



/********************************************************

** 名称 :void DelayMS(uint16 dly)

** 功能 :毫秒级延时(24M的晶振)

** 入口参数 :dly

用户的延时参数   

** 出口参数 :无   

*********************************************************/

void DelayMS(uint16 dly)

{

uint16 x,y;

for(x=dly;x>0;x--)

for(y=247;y>0;y--);

}



/********************************************


功能:短延时函数,保持时钟的电平信号

*********************************************/

void nNop()

{

uint8 i;

for(i=0;i<15;i++);

}


/********************************************

函数名:IIC_Start()

功能:总线协议的起始信号

备注:Scl=1期间,数据线(Sda)电平从高到低的跳

变作为I2C 总线的起始信号

**********************************************/

void IIC_Start()

{    

WC16_SDA=1;

nNop();

WC16_SCL=1;

nNop();

WC16_SDA=0;

nNop();

WC16_SCL=0;

}


/********************************************

函数名:IIC_Stop()

功能:总线协议的停止信号 

备注:Scl=0期间,数据线(Sda)电平从低到高的跳

变作为I2C 总线的停止信  号        

**********************************************/

void IIC_Stop()

{

WC16_SDA=0;

nNop();

WC16_SCL=1;

nNop();

WC16_SDA=1;

nNop();

}



/********************************************

函数名:WC16Data_Write(uint8 temp)

功能:总线写数据.地址函数         

入口参数:temp 为要写的数据或地址    

**********************************************/

void WC16Data_Write(uint8 temp)

{

uint8 i;

WC16_SCL=0;

for(i=0;i<8;i++)

{

WC16_SDA=(bit)(temp&0x80);  //实现从高位到低位传递  

temp=temp<<1;

nNop();

WC16_SCL=1;

nNop();

WC16_SCL=0;

}

nNop();

WC16_SCL=1;

while(WC16_SDA);  //当WC16_SDA 为低时为 从机的应答信号 

nNop();

WC16_SCL=0;

}




/********************************************

函数名: WC16Data_Read(void)

功能:总线读数据函数      

出口参数:temp 为要读的数据  

**********************************************/


 WC16Data_Read(void)

{

uint8 i,temp=0;

for(i=0;i<8;i++)

{

WC16_SCL=0;

WC16_SDA=1;

nNop();

WC16_SCL=1;

nNop();

temp=(temp<<1)|WC16_SDA; //八次循环读出EEPROM中的数,放入temp变量中

}

WC16_SCL=0;

nNop();

WC16_SDA=1;   //读完数据后主机发给从机的非应答信号 

nNop();

WC16_SCL=1;

WC16_SCL=0;

return(temp);

}

/********************************************

函数名:WC16Data_Put(uint8 sla,uint8 slaaddr,uint8 Data) 

功能:按照总线协议,  单片机将数据写进rom指定地址

入口参数:uint8 sla

  uint8 slaaddr

    uint8 Data

出口参数:无

**************************************************/

WC16Data_Put(uint8 sla,uint8 slaaddr,uint8 Data)

{

IIC_Start();

WC16Data_Write(sla);  //sla为 从地址+R/W 

WC16Data_Write(slaaddr);// slaaddr为从地址

WC16Data_Write(Data);  //Data为要写的数据

IIC_Stop();

}



/********************************************

函数名:WC16Data_Rev(uint8 sla,uint8 slaaddr,uint8 Data) 

功能:按照总线协议,单片机在指定地址读数据

入口参数:uchar sla   

  uchar slaaddr

出口参数:无

**************************************************/

WC16Data_Rev(uint8 sla,uint8 slaaddr)

{

uint8 temp;

IIC_Start();

WC16Data_Write(sla);

WC16Data_Write(slaaddr);

IIC_Start();

WC16Data_Write(sla+1);

temp=WC16Data_Read();

IIC_Stop();

return(temp);

}


void  main()

{

uint8 temp=0;

WC16_SDA=1;   //对两功能引脚进行初始化

WC16_SCL=1;

WC16Data_Put(0xa0,0x00,0x55);

DelayMS(50); //此延时非常重要,数据写进EEPROM后要延迟一段时间才能进行读。

temp=WC16Data_Rev(0xa0,0x00);

while(1)

{

P0 = temp;

DelayMS(5000);

}

}


推荐阅读

史海拾趣

Corsair Electrical Connectors Inc公司的发展小趣事

在国内市场取得一定成绩后,Corsair开始将目光投向了更广阔的国际市场。公司积极参加国际电子展会,与海外客户建立联系,拓展销售渠道。同时,Corsair还根据不同国家和地区的市场需求,调整产品策略,提供定制化的解决方案。这些努力使得Corsair的产品逐渐走进了国际市场,公司的影响力也不断扩大。

ACCUTEK公司的发展小趣事

在发展过程中,ACCUTEK公司始终注重品牌建设和品质提升。公司投入大量资源用于品牌推广和市场宣传,提高了品牌知名度和美誉度。同时,公司还建立了严格的质量管理体系和售后服务体系,确保每一台出厂的设备都能达到客户的要求和期望。这些举措有效地提升了公司的市场竞争力,赢得了更多客户的信任和支持。

Curtis Electromusic Specialties Inc公司的发展小趣事

在全球化的大背景下,供应链管理对于企业的运营效率至关重要。CUI公司高度重视供应链的优化和管理,通过建立完善的采购、生产和销售体系,实现了原材料的稳定供应和产品的快速交付。此外,公司还积极引入先进的生产设备和信息化管理系统,提高了生产效率和产品质量,为公司的快速发展提供了有力保障。

ERA Transformers公司的发展小趣事

随着市场需求的不断增长,ERA Transformers公司面临着扩大生产规模的挑战。为了满足客户需求并保持市场竞争力,公司决定投资建设一个新的生产基地。经过精心规划和筹备,新的生产基地顺利建成并投入使用。这不仅大大提高了公司的生产能力,还进一步提升了产品质量和生产效率。新基地的建成标志着ERA Transformers公司在电子行业中的地位更加稳固。

Advanced Linear Devices公司的发展小趣事

在国内市场取得一定成功后,ERA Transformers公司开始将目光投向国际市场。为了打开国际市场,公司积极参加国际电子展会和交流活动,与多家国际知名企业建立了联系。通过深入了解国际市场需求和标准,公司对产品进行了针对性的改进和优化。经过一段时间的努力,ERA Transformers公司的产品成功打入了国际市场,并获得了良好的销售业绩和口碑。

Harris公司的发展小趣事

进入20世纪30年代,Hammond迎来了其发展历程中的一个重要转折点。在1930年代初,Hammond成为加拿大第一家生产两柱式机架和窄柜系列产品的公司,这些产品迅速获得了广播和通讯行业的青睐。这一创举不仅巩固了Hammond在业内的地位,还为其后续在电气、电子行业的全面发展铺平了道路。

问答坊 | AI 解惑

USB接口技术(一)

最近一段时间忙着毕业课题的设计,其中有一部分设计到USB通信,由于本人初次接触到USB底层硬件设计和软件的编写,同时现在USB通信的应用领域极其广泛,因此将一些关于USB通信的基本知识向大家介绍介绍,希望对大家有一定的帮助! USB总线协议 USBU ...…

查看全部问答>

UCF文件中时序约束的语法

UCF文件中时序约束的语法约束UCF文件,从Constrains Editor直接输入是最方便、最直接的添加约束的方法了。我总结了以下几种常用的语法: www.fpga-design.net( N3 ~6 l) B8 d4 D4 f FPGA设计网论坛 专业FPGA设计论坛\' u/ }9 P: ^5 i\' J2 z\" W9 ...…

查看全部问答>

请教 quartus 2

Error: JTAG Server can\'t access selected programming hardware 如题 什么原因啊? 请各位大侠赐教!…

查看全部问答>

如何在WINCE5.0上跑JAVA程序?

需要移植一个JVM吗?有现成的吗? 各位大侠帮忙给个思路。…

查看全部问答>

Build OS菜单及相应的下拉一系列菜单全部显灰色

我新装的Platform Builder5.0后.发现Build OS菜单及相应的下拉一系列菜单全部显灰色. 无法编译PB工程. 我重装了一遍PB5. 用另一个SN号安装后还是一样Build OS菜单及相应的下拉一系列菜单全部显灰色. 这是什么原因啊. 我以前从没碰见过. …

查看全部问答>

求助:CodeWarrior for ADS 1.2中编译出错

工程中,用ADS编译,出现了Errors: Could not find or load the file 襐IC.a?for target 褼ebugRel?for project 襱est1.mcp? Could not find or load the file 褻omm.a?for target 褼ebugRel?for project 襱est1.mcp? The following access p ...…

查看全部问答>

C# .NET 四年开发经验中高程->想转作嵌入式领域--困惑!!!!!!你有同感吗??

我是2003年大学毕业后一直在北京从事企业应用信息软件开发工作,目前年薪8万左右;算是有一定的工作 和开发设计经验了. 现在对工作的东西,重复工作很多;向系统构架师或是技术型管理人发展是一条可以选择的路. 但现在常常感觉在 .NET 应用开发领域 ...…

查看全部问答>

stm32 编写语音存储回放(WT588D芯片)

给个思路也好。。。。人笨没办法了…

查看全部问答>

毕业了,单片机学习开发板出手转让咯

毕业了,单片机学习开发板出手转让,要好好珍惜它哦。只有50元哦。                         …

查看全部问答>

超声波测距好的资料

超声波测距好的资料…

查看全部问答>