24c02h24c08和24c02读写区别h有什么区别

FM24C02与AT24C02这两个储存器主要区别是什么,在使用控制方面有无区别,请给详解,谢谢_百度知道
FM24C02与AT24C02这两个储存器主要区别是什么,在使用控制方面有无区别,请给详解,谢谢
我有更好的答案
就是几十万几百万次。还有就是FM系列的比AT系列的要贵一些首先是他们的厂家不一样,电路和原理一样.FM24CXX是没有次数限制的,简单说就是不会因为软件问题而不能工作.AT24XX是有使用次数的
采纳率:29%
厂家不一样,电路和原理一样.FM24CXX是没有次数限制的,简单说就是不会因为软件问题而不能工作.AT24XX是有使用次数的,就是几十万几百万次.
24C02 是I2C总线器件,是EEPROM(即停电后数据不丢失的可电擦写的ROM)。它有256*8位的存储容量 256个字节 1024个位
为您推荐:
其他类似问题
您可能关注的内容
at24c02的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。24c02用在什么地方?具体作用?_百度知道
24c02用在什么地方?具体作用?
我有更好的答案
SDA为二线串行接口,符合I2C总线协议。在一般单片机系统中,24C02 数据受到干扰的情况是很少的,但是随着单片机抗干扰性能的变差,以及恶劣工业环境中单片机系统的应用,一些智能单片机控制系统相继出现24C02数据被冲掉的问题,并总结了一套保护24C02数据安全的软硬件设计方法,数据掉电不挥发等特点,在仪器仪表及工业自动化控制中得到大量的应用。随着世界上各公司对该器件的开发,市场上推出了许多牌号的24C02器件,若没有交叉出错现象则可以选用。 3,发现一种ATMEL(激光印字)以及XICOR牌号的24C02具有全面的符合I2C总线协议的功能,只要WP保护功能正常就可以了,这只要断开WP与CPU连线且保持高电平,再试一下系统数据读写功能是否正常就可以了,而且随着单片机的牌号以及24C02的牌号不同而出现不同程度的干扰现象。以前通过简单的器件之间替换比较,发现不同牌号的24C02其抗干扰性能是不一样的,于是就认定24C02器件存在&质量&好坏的问题。后来在一次偶然的机会里,发现有些24C02的WP引脚并不起到保护作用,体积小。A0,A1,检查相应的数据存取功能,甚至还有一些冒牌的24C02器件,这样就使批量生产的单片机控制系统的质量出现时好时坏的问题,那么就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,也就是说将 WP引脚与CPU输出引脚断开并保持高电平的情况下,CPU仍然能够对24C02中的数据进行修改写入!在惊讶之余,笔者收集了许多不同牌号的24C02 进行试验。 46450.jpg 2. 24C02器件的选用 无论是智能仪器仪表还是单片机工业控制系统都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字。 1. 不同牌号24C02的性能区别 24C02与单片机的接口非常简单,除了基本的读写功能外,还对地址功能以及WP引脚保护功能进行了全面的检测,可以采用抽样试验决定取舍;对于有2片24C02以上的系统,必须严格检查其器件寻址功能,这可以轮流拨下其中一片24C02器件,而有些牌号24C02要么没有WP引脚保护功能,要么没有器件地址功能(即2 片24C02不能共用一个I2C总线)。笔者经过大量的设计实践和试验摸索找出了24C02在应用中之所以出现数据被冲掉的原因。一般来说,同种牌号的24C02器件性能是一样的,A2为器件地址线,WP为写保护引脚,如图1所示串行E2PROM是基于I2C-BUS 的存储器件。而这一点对软件抗干扰技术也是至关重要的,因此必须选用可靠的24C02器件作为数据储存单元。 对于只用一片24C02器件的系统,因为不需要分辨不同的地址,有些甚至两种功能均无。所以说一些同样功能型号的电子器件在兼容性上往往会带来意想不到的问题,值得引起注意,SCL,由于其具有接口方便,遵循二线制协议
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。  从今天早上开始看AT24C02的手册,凭着有些撮的英语水平,24页的资料,愣是啃了半天,上午的时光就过去了。
  AT24C02是一款EEPROM芯片,IIC接口,就是两条线:SDA与SCL;不过对于单单操纵这款芯片而言,没有设计到IIC总线协议之中所谓的仲裁。因而,大体看下了芯片手册,心中就知道大概怎么操作了。
  另外,24C02的2K是指2Kbit。一般的话,存储器都用字节来衡量,所以其实24c02只有256byte。是不是比较小?这256byte又分成了32pages,每页有8byte。
  现在来看看该如何编写代码,首先得知道起始与停止条件
& & & & & & & & & & & &
所谓起始条件:在SCL高电平期间,SDA的一个下降沿;
所谓停止条件:在SCL高电平期间,SDA的一个上升沿;
当然起始和停止条件与普通的位传送是不同的,位传送的时序如图所示
可以看到,在SCL的高电平期间,SDA是不允许变化的;而只有在SCL的电平期间,SDA才能够出现变化;
当传输完1字节之后,可能需要有一个应答信号。说到这儿,就需要明白几个概念:发送器、接受器、主器件、从器件。
发送器:在总线上发送数据的器件。
接受器:在总线上接受数据的器件。
主器件:控制信息交互的器件,产生SCL时钟信息,产生起始与停止条件。
从器件:受从器件控制的器件。
那这儿的应答信号,就是总线上的接受器每接受到一个字节后产生的应答。如图所示:
需要注意的是,在等待应答信号之前,需要将SDA置高,即释放掉总线。
24c02写的方式有两种:字节写、页写(就是连续写多个字节)。
掌握了字节写,对于页写就容易的多了。
字节写的时序如图所示:
字节写的时序:首先是起始条件(由MCU产生),接着单片机向总线上传送器件地址,总线上地址相同的器件会有一个ACK(即应答信息),然后向器件写入字地址(告诉24c02想把信息写在那个地址,24c02刚好有256个字节,8bit的字地址信息刚好表示),同样会有一个应答信息,紧接着需要写入需要传送的数据(8位),同理会有一个应答信息。最后,需要主器件产生一个停止条件。Ok,写字节就结束了,是不是很简单,页写只不过是在这一步没有发送停止条件,而是接着发数据,这个时候24c02会知道你要写下一个字节,它会自动的加地址。
再来看看如何读取,读取有三种方式:当前地址读、随机读(我得承认这个名字不是太好)、顺序读。
当前地址读取是指你可以读取到芯片内部地址计数器(最近一次操作留下的值)加上1的地址上的值。看清楚是加上1地址上的值,不过不太明白有何用处。
接下来的随机读取跟是让我迷惑(刚看手册时候),随机的意思不就是产生一个无脑的地址,然后去读取,这样的话,读取有什么意义?不过我想错了,你可以看看时序图:
看到了,先发写命令了,也传送了字地址,然后没有发写的内容。转而,重新开始发起始条件、器件地址(这次最后一位是读),然后再接受总线传送来的数据,此后主控器作为接受方,不用发应答信号,直接发一个停止条件,就ok了。
所以要想指定一个地址,就可以用随机读这个方法。不过随机读说法不太形象,改为指定地址读跟容易理解。
顺序读跟页写是对应的,只是在随机读或当前地址读后面接着接受数据。
写了三页,貌似不是很长。那就贴上代码,来充长。
个人喜欢写一个头文件,然后,再写一个c文件。
头文件部分:
#ifndef __hal_24c02_h__
#define __hal_24c02_h__
#include"reg52.h"
#include"hal.h"
#include"datatype.h"
#include"delay.h"
sbit scl=P3^7;//IIC时钟线
sbit sda=P3^6;//IIC数据线
#define SCL scl
#define SDA sda
//起始条件,SCL高电平时候,SDA的一个下降沿
#define HAL_24C02_START() {SDA=1;SCL=1;SDA=0;}
//停止条件,SCL高电平时候,SDA的一个上升沿
#define HAL_24C02_STOP() {SDA=0;SCL=1;SDA=1;}
#define HAL_24C02_BYTE_ADDR(addr) hal_24c02_send_char(addr)
#define HAL_24C02_ACK() hal_24c02_acknowledge(0)
void hal_24c02_init();
void hal_24c02_send_char(uchar val);
uchar hal_24c02_receive_char();
void hal_24c02_search_device(bit a2,bit a1,bit a0,bit rw);
void hal_24c02_acknowledge(bit mcu);
//学会使用以下两个函数即可
//需要注意写完之后,等待5ms之后,再去读取
void hal_24c02_byte_write(bit a2,bit a1,bit a0,uchar byte_addr,uchar byte_data);
uchar hal_24c02_byte_read(bit a2,bit a1,bit a0,uchar byte_addr);
C文件部分:
#include"hal_24c02.h"
//初始化,需将时钟线和数据线拉高
void hal_24c02_init()
&&&&&&&& SCL=1;
&&&&&&&& SDA=1;
//IIC协议要求从高位开始传送,传送1字节
void hal_24c02_send_char(uchar val)
&&&&&&&& SCL=0;//此时,SCL被拉低,才允许SDA变化
&&&&&&&& for(i=0;i&8;i++)
&&&&&&&& {
&&&&&&&&&&&&&&&&&& &if(val&(0x80&&i))
&&&&&&&&&&&&&&&&&& &&&&&&& SDA=1;
&&&&&&&&&&&&&&&&&& &else
&&&&&&&&&&&&&&&&&& &&&&&&& SDA=0;
&&&&&&&&&&&&&&&&&& SCL=1;//拉高SCL,不允许SDA变化
&&&&&&&&&&&&&&&&&& delay_ms(1);
&&&&&&&&&&&&&&&&&& SCL=0;//拉低SCL,开始下1bit传送
&&&&&&&& }
&&&&&&&& //不包括应答脉冲,此时,SCL被拉低,SDA未被释放
&&&&&&&& SDA=1;//释放数据线
&&&&&&&& //SCL处于低电平;SDA处于高电平
uchar hal_24c02_receive_char()
&&&&&&&& &//SCL低电平 SDA高电平
&&&&&&&& &uchar tmp=0,i;
&&&&&&&& &for(i=0;i&8;i++)
&&&&&&&& &{
&&&&&&&& &&&&&&& SCL=1;
&&&&&&&&&&&&&&&&&& if(SDA)
&&&&&&&&&&&&&&&&&&&&&&&&&&& tmp=tmp|(0x80&&i);
&&&&&&&&&&&&&&&&&& SCL=0;
&&&&&&&& &}
&&&&&&&& &
&&&&&&&& &//SCL低电平 SDA高电平
//a2、a1、a0:表示器件地址
//rw:1 代表读操作;0 代表写操作
void hal_24c02_search_device(bit a2,bit a1,bit a0,bit rw)
&&&&&&&& tmp=0xa0|(a2?0x08:0x00)|(a1?0x04:0x00)|(a0?0x02:0x00)|
&&&&&&&& hal_24c02_send_char(tmp);
//参数mcu=1,表示由主机主动产生应答信号,此时还需要将SDA拉低
//参数mcu=0,表示非主机参数应答信号,此时主机只需要产生SCL脉冲
//返回1:表示有应答;0:无应答
void hal_24c02_acknowledge(bit mcu)
&&&&&&&& //SCL处于低电平;SDA处于高电平
&&&&&&&& if(mcu)&&&&& SDA=0;//产生1应答信号
&&&&&&&& SCL=1;
&&&&&&&& delay_ms(1);
&&&&&&&& while(SDA);//等待应答
&&&&&&&& SCL=0;
&&&&&&&& if(mcu)&&&&& SDA=1;//释放总线
&&&&&&&& //SCL处于低电平;SDA处于高电平
//参数a2,a1,a0:器件地址
//参数byte_addr:字节地址
//参数byte_data:需要写的数据
void hal_24c02_byte_write(bit a2,bit a1,bit a0,uchar byte_addr,uchar byte_data)
&&&&&&&& &HAL_24C02_START()
&&&&&&&& &hal_24c02_search_device(a2,a1,a0,0);
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &HAL_24C02_BYTE_ADDR(byte_addr);
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &hal_24c02_send_char(byte_data);
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &HAL_24C02_STOP()
//参数a2 a1 a0为器件地址;
//参数byte_char为需要读取的字节地址
//返回一个uchar型
uchar hal_24c02_byte_read(bit a2,bit a1,bit a0,uchar byte_addr)
&&&&&&&& &uchar val=0;
&&&&&&&& &HAL_24C02_START()
&&&&&&&& &hal_24c02_search_device(a2,a1,a0,0);//伪写
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &HAL_24C02_BYTE_ADDR(byte_addr);//伪写的目的,就是为了传送地址
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &HAL_24C02_START();
&&&&&&&& &hal_24c02_search_device(a2,a1,a0,1);//真读
&&&&&&&& &HAL_24C02_ACK();
&&&&&&&& &val=hal_24c02_receive_char();
&&&&&&&& &//NO ACK
&&&&&&&& &HAL_24C02_STOP()
&&&&&&&& &
阅读(...) 评论()24C02_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
串行E2PROM是基于I2C-BUS 的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。随着世界上各公司对该器件的开发,市场上推出了许多牌号的24C02器件,甚至还有一些冒牌的24C02器件,这样就使批量生产的控制系统的质量出现时好时坏的问题。笔者经过大量的设计实践和试验摸索找出了24C02在应用中之所以出现数据被冲掉的原因,并总结了一套保护24C02数据安全的软硬件设计方法。
24C02主要应用:
1. 不同牌号24C02的性能区别
24C02与的接口非常简单,如下图所示。
E0,E1,E2为器件,WP为,SCL,SDA为二线,符合I2C总线协议。在一般单片机系统中,24C02 数据受到干扰的情况是很少的,但是随着单片机抗干扰性能的变差,以及恶劣工业环境中单片机系统的应用,一些智能单片机控制系统相继出现24C02数据被冲掉的问题,而且随着单片机的牌号以及24C02的牌号不同而出现不同程度的干扰现象。以前通过简单的器件之间替换比较,发现不同牌号的24C02其抗干扰性能是不一样的,于是就认定24C02器件存在&质量&好坏的问题。后来在一次偶然的机会里,发现有些24C02的WP并不起到保护作用,也就是说将 WP引脚与CPU输出引脚断开并保持高电平的情况下,CPU仍然能够对24C02中的数据进行修改写入!在惊讶之余,笔者收集了许多不同牌号的24C02 进行试验,除了基本的读写功能外,还对地址功能以及WP引脚保护功能进行了全面的检测,发现一种ATMEL(激光印字)以及XICOR牌号的24C02具有全面的符合总线协议的功能,而有些牌号24C02要么没有WP引脚保护功能,要么没有器件地址功能(即2 片24C02不能共用一个I2C总线),有些甚至两种功能均无。所以说一些同样功能型号的电子器件在兼容性上往往会带来意想不到的问题,值得引起注意。
2. 24C02器件的选用
无论是智能仪器仪表还是都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字,这时就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,因此必须选用可靠的24C02器件作为数据储存单元。
对于只用一片24C02器件的系统,因为不需要分辨不同的地址,只要WP保护功能正常就可以了,这只要断开WP与CPU连线且保持高电平,再试一下系统数据读写功能是否正常就可以了。而这一点对软件抗干扰技术也是至关重要的。一般来说,同种牌号的24C02器件性能是一样的,可以采用抽样试验决定取舍;对于有2片24C02以上的系统,必须严格检查其器件寻址功能,这可以轮流拨下其中一片24C02器件,检查相应的数据存取功能,若没有交叉出错现象则可以选用。
3. 提高24C02数据安全的软件措施
(1)建议数据以十进制BCD码方式存入24C02,这样可以提高有效数据的冗余度,即24C02中的其有效数据为0-9,大于9则为无效数据。这样,在数据写入24C02之前就可以插入校验子程序,对预备写入的数据进行检查,若该RAM数据已经受到干扰,其值大多数应落在大于9的范围内(可能性百分比系数为246/256),故此当数据大于9时就禁止执行写入24C02的子程序,以免错误数据写入24C02,而对正常需要修改的参数无影响。
(2) 24C02中数据保持冗余度后,还可以对读出数据进行检查,若为大于9的非正常数据,说明24C02中数据已经受到干扰,此干扰值是绝对不能用的,对于特定的系统可以采取不同的方法,比如带温度控制的培养箱等系统,如其温控范围为0~50℃,则数据出错后,读入值可能变成200℃或更高值,这是非常危险的,针对这种情况可以将设定值硬性规定为某一个安全值比如25℃,因为不知道原先设置的参数值,这也是无可奈何的事情。
(3)对写入24C02设置软件口令,口令符合可以执行写入,否则拒绝写入。具体做法是:设置写口令寄存器EPSW,按正常CPU执行程序的脉络,找出所有的数据写入24C02前的必经之路,比如,一般下在按下后经过一些数据处理,最终将要保存的参数写入24C02,这时可以在键扫描子程序里,当有键输入时,对写口令寄存器EPSW置数5AH,然后在写24C02子程序中紧跟指令CLR WP后插入检查口令语句,判断EPSW值若为5AH,则允许继续执行,否则立即返回,不许执行写入数据。当正确执行完写入24C02后需对EPSW 清0,并且在主程序适当的地方加上EPSW清0指令,反复冗余执行。这样程序受到干扰时,EPSW多数为0,即使EPSW数受到干扰时,也很少有机会刚好等于5AH,使错误数据非正常写入24C02的机会大大减少。
数据写入24C02子程序插入口令形式:
WRIT: CLR WP
MOV R1, #EPSW
MOV A, @R1
CJNE A, #5AH,WERR
数据写入24C02操作部分:
WERR: SETB WP
MOV R1, #EPSW
MOV @R1, #0
其编程顺序刻参考下面程序流程图
4.保护24C02数据的硬件措施
抗干扰硬件连接典型电路
在某些干扰特别严重的场合,24C02数据还是有可能被冲掉,最彻底的方法是利用硬件来干预写入数据过程。一般情况下,是将WP与CPU引脚断开,而与连接起来,功能键没按下时,WP保持高电平,只有功能键按下时,WP才是低电平,允许写操作。当然,这样一来对于某些过程量需要程控存入 24C02时就办不到了,这也是利用功能键同步保护24C02数据的一种不方便之处。
如果写入24C02的数据跟2 个按键有关,则可以用二极管隔离,采用如图2的形式。
这样两键本身互不影响,而任一键按下都能使WP变低,使数据写入操作有效,对于多键关联,依此类推多放几个二极管隔离就可以了。
以上所述的软硬件措施在具体的中可以灵活应用,硬件联锁保护比较彻底,但是单独通过程序修改24C02中的某些数据就不可能了;比较灵活,可以随时对控制过程中处理的数据存入24C02,以达到掉电保存的目的。在笔者设计的智能光照箱单片机控制系统中,由于日光灯起动和压缩机起动及关断时的电源高频干扰,系统的温度设定值及时间设定值曾经经常发生变化,采用上述软硬件并用的措施后系统运行稳定可靠,再也没有发生设定数据被冲掉的现象。
6、重要补充(郭天祥教授)
在使用了N多个厂家24c02后发现:很多厂家的的Twr时间不一样,这样会导致有些开发工程师上带来麻烦,顺便说下Twr时间是上一次写记忆到下一次写记忆的间隔时间,英文资料里要求24c02内部写数据最大时间为10ms,也就是说在软件设计时,应该把2次写记忆时间间隔控制在大于Twr时间即间隔大于10ms,这样就不会有问题了,不同的芯片Twr时间相差很大,ATMEL24C02为标准的芯片Twr实际在2ms左右,其他杂牌24C02芯片Twr实际时间一般都在4ms以上,所以建议各位工程师设计时Twr时间一定要控制在大于Twr时间,否则即使会在批量时暴露问题,所以在选用24C02芯片时,这项功能也可以检测下,Twr时间越小越好,也就是说24C02内部写数据速度更快。
24C02特点:
1.宽范围的工作电压1.8v~5.5v
2.低电压技术:
1mA典型工作电流
1uA典型待机电流
3.组织结构
4.2线,完全兼容I2C总线
5.施密特触发输入噪声抑制
6.硬件数据
7.内部与周期(最大5ms)
8.自动递增地址
9.可按照写
10.esd保护大于2.5kV
11.高可靠性:
--擦写寿命:100万次 数据保持时间:100年
12.无铅工艺,符合RoHS标准
24C02应用领域:
—智能仪器仪表
—工业控制
—家用电器
—计算机 、笔记本电脑
—汽车电子
—通信设备
最大额定参数:
清除历史记录关闭24cm02b和24c02n有区别吗_百度知道
24cm02b和24c02n有区别吗
我有更好的答案
但是所有的24C02功能都是一样的,都是1kbit的EEPROM存储器生产24C02的厂家很多,N这个后缀字母在不同厂家的产品名称中可能代表不同的封装形式
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 24c02h 的文章

 

随机推荐