e2prom程序

合集下载

24c02读写

24c02读写

AT24C02串行E2PROM的读写I2C总线是一种用于IC器件之间连接的二线制总线。

它通过SDA (串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。

1.I2C总线的基本结构采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。

CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。

I2C总线接口电路结构如图1所示。

2.双向传输的接口特性传统的单片机串行接口的发送和接收一般都各用一条线,如MCS51系列的TXD和RXD,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。

当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。

主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。

I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。

在总线上,既没有中心机,也没有优先机。

总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。

SDA和SCL均为双向I/O线,通过上拉电阻接正电源。

当总线空闲时,两根线都是高电平。

连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。

I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。

3.I2C总线上的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。

SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。

彩电的E2PROM存储器数据丢失维修方法

彩电的E2PROM存储器数据丢失维修方法

(一)彩电的E2PROM存储器数据丢失维修方法数码家电的普及,家电维修人员又面临“软件”故障的维修问题。

在家电中,“软件”故障以存储着整机重要信息的E2PROM、EPROM损坏或数据丢失为甚,如I2C总线彩电的E2PROM存储器数据丢失,VCD、DVD机的EPROM块损坏,等等。

解决这些问题的方法主要有以下几种:(1)更换空白芯片,然后进行初始化操作;(2)进入“维修状态”,调整恢复数据;(3)向厂家购买烧录好的芯片;(4)自己烧录、复制芯片。

现总结这些方法并分析它们的优缺点,不妥之处望同行指正。

一、更换空白芯片,然后进行初始化操作:所谓对存储器的初始化操作,就是将CPU的ROM中存储的数据重新写如新存储器中。

I2C总线彩电中CPU型号众多,性能各异,有的ROM中存储着完整的控制数据,有的ROM中存储的控制数据不全,所以进行数据的初始化后,对于有些彩电非常有效,但对于很多彩电会出现光栅畸变、彩色失真、不能存台、功能丢失等现象,有的机型甚至不能开机,建议大家在对所修机器的CPU功能不清楚之前,谨慎执行数据的初始化操作。

优点:不需要数据清单,操作简便;缺点:运气不好,可能造成更大的麻烦。

二、进入“维修状态”,调整恢复数据:进入“维修状态”调整恢复数据是一种比较经典的维修方法,要求维修人员掌握各种彩电进入“维修状态”的正确“密码”和数据清单,并且领会各个调整项的含义。

《家电维修》等报刊杂志公布很多这方面宝贵的资料,维修人员应积极收集整理。

另外,向厂家的技术部门咨询和通过国际互联网登陆厂家网站查询也是当今获得维修资料的有效途径。

在维修中,只要掌握了所修机型的进入“密码”和数据清单,进行数据调整将非常容易,但调整时还需注意:(1)调整前记录所要调整的项目名称和原始数据,以便调整失败后复原;(2)调整时要做到目的明确,有的放矢,不要进入维修状态后,不分项目,盲目调整;(3)在没有完全资料和必须改变彩电功能时,慎对模式或选项数据进行调整。

大容量串行E2PROM AT24C512的应用

大容量串行E2PROM AT24C512的应用
1 1 AT2 C 1 . 4 5 2的 引脚 及 功 能
AT2 C 1 4 5 2引脚 排 列如 图 1所示 . A ,A1 O :地址 选择输 入 端. AT 4 5 2可 以连接 4个 芯片 ,通过 A0 2C 1 、A1 的组
A ^ O


W P
合 来选 择哪 一个 芯片 , 、A1可 以悬空 ,悬 空时 表示 为 0 A0 . N C S L C SA D S DA:双 向串行 数据 输 入输 出端 . 通 过 此 引脚 可 使 E P ROM 与单 片机 间进 行 0 。 串行数 据交 换.S DA端 为 开漏输 出 引脚. 图lA2c1引脚排列 T452
9 2
辽MS 4 0与 AT2 C l P3 4 5 2的硬 件接 口示 意图. MS 4 0系列单 P3 片机是 美 国德州仪 器 1 9 9 6年 开始 推 向市 场 的一种 1 6位超低 功 耗 、具有
精简 指令集 ( I C 的混 合 信 号 处理 器 ( xd Sg a P oes r .它 具 RS ) Mie in l r cso ) 有处理 能力强 、运算 速度 快 、超低 功耗 、片 内资源 丰富 、开发环 境方 便 高效等 特点 ,同时 MS 4 0系 列微 控 制 器 允 许 用户 使 用 标 准 C语 言 进 P3 行程 序编程 ,并提 供 高效 的 C语 言 编译 环 境 ,配之 以支 持 对具 有 仿 真
关 键 词 :A 4 52 单 片机 ; 数据 存 储 系 统 T2 C 1 ; 中 图分 类 号 :T 3 3 P 3 文献 标 识码 :A
文 章 编 号 :10 —5 8 (0 10 —0 9 —0 08 6821)4 0 1 2
1 A 2C 1 T 4 5 2简 介

eeprom

eeprom

#include “eeprom.h”
在eeprom.h中,ICCAVR提供了两个通用的对E2PROM操作的函数和宏:
void EEPROMReadBytes(int addr,void *ptr,int size);
void EEPROMWriteBytes(int addr,void *ptr,int size);
*系统电源刚上电后,系统时钟尚未稳定,程序已开始对E2PROM进行操作;
*程序正在对E2PROM操作时系统突然掉电时;
*程序正在对E2PROM操作时突然被中断打断,造成对E2PROM操作时序的破坏;
*软件跑飞。
其实有些情况将不可避免的造成对E2PROM数据的破坏,如当程序在向E2PROM中写入一个long型的数据(4个字节)时,刚刚写入1个字节系统突然断电,造成后3个字节无法写入,使得整个数据没有完整写入,便破坏了E2PROM中的数据。这种情况就是使用外挂的E2PROM芯片也是无法避免的,只能通过硬件上增加电源掉电预检测电路配合软件解决。
#define EEPROM_READ(addr,dst) EEPROMReadBytes(addr,&dst,sizeof(dst))
#define EEPROM_WRITE(addr,dst) EEPROMWriteBytes(addr,&dst,sizeof(dst))
在程序中可以直接使用上面定义的函数读写E2PROM:
EEPROM_WRITE((int)eeFrame,ramFrame); //将结构ramFrame中数据写入eeFrame中
}
源程序编译后,E2PROM中初始化数据将生成扩展名为.eep文件,该文件应当同程序代码文件.hex一起下载写入到芯片中。既.eep文件的内容是E2PROM的初始化数据。

SPI总线操作E2PROM(本例为25AA020A)实例——浅影

SPI总线操作E2PROM(本例为25AA020A)实例——浅影
break; cs=1; } cs=1; } //-----------------------------------------uchar spi_read(uchar addr) { uchar var; cs=0; spi_write_byte(0x03);//instruction,00000011,A8=0; spi_write_byte(addr);//lower address byte var=spi_read_byte(); cs=1; return var;
sck=0; if((spi_bValue&0x800;
spi_bValue=(spi_bValue<<1); sck=1; } } 读出一个字节: uchar spi_read_byte() { uchar no,spi_bValue=0; cs=0; for(no=0;no<8;no++) { sck=0; spi_bValue=(spi_bValue<<1); sck=1; if(date_out==1)
} //-----------------------------------------void main() {
spi_write(0x01,0xaa); P1=spi_read(0x01); delay_ms(1000); spi_write(0x02,0xbb); P1=spi_read(0x02); while(1); } //------------------------------------------
想特别提一下的是下面的一段程序:
while(1) { cs=0; spi_write_byte(0x05);//读取存储器的状态 state=spi_read_byte(); if((state&0x01)==0)//如果读出的最低位为 1 则表示存储器还在存储,此时单片机 等待,知道存储完毕 break; cs=1; }

进入工厂菜单调屏参_清E2PROM操作说明书_3_

进入工厂菜单调屏参_清E2PROM操作说明书_3_

进入工厂菜单调屏参,清E2PROM操作说明书
一、 怎么进入工厂调节屏参:
1、按“菜单+9527”进入工厂区,如图1:
(不同板卡进入工厂区的方式不同,以实际情况为主)
图1 图2
2、用导航键选择到“OTHER OPTION”项,然后按“OK”键确定,此时会进入屏参调节菜单,如图2。

调节屏参时只需要选择“TI MODE、SWAP PORT”两项即可。

(可以根究实际情况选择)
3、选择需要的项目后,只需按左、右导航键选定“OFF、ON”即
可。

二、 怎么清E2PROM:
1、按“菜单+9527”进入工厂区,如图1:
(不同板卡进入工厂区的方式不同,以实际情况为主)
2、用导航键选择到“E2P ADJUST”项,然后按“OK”键确定, 此时系统会自动进入复位状态。

(复位时可能会短时间内不能对其操
作,请稍等!复位时可能需要15秒左右,请您不要在此时断电,以免会出现不开机、未复原等异常现象。

3、在复位完成后,将AC电源断电,待板卡的遥控指示灯完全熄灭后,再接入AC电源,然后再开机。

注:有些板卡在复位后会自动开机,有些板卡会复位后待机,此都是正常现象;。

E2PROM在单片机系统中的应用

E2PROM在单片机系统中的应用摘要本文简要介绍E2PROM与8031单片机的接口与读写方法。

关键词并行E2PROM;串行E2PROM;8031单片机Application of E2PROM in the System of Chip MicroprocessorWANG YuegangJilin College of Electrification Jilin 132021AbstractThis article briefly introduces a Joint and reading method of chip microprocessor 8031 and E2PROMKeywords parallel E2PROM; Chip microprocessor 8031在智能仪表、控制装置、分布式监测系统等单片机应用开发装置中,常常要通过键盘等人机界面设定一些系统参数,而且希望再调点的情况下这些参数不会丢失,通常这些参数还需要随时修改,因此不能直接固化在程序块中,诸如此类问题都可以借助非易失存储器E2PROM来解决。

1 并行E2PROM的应用简介并行E2PROM如2816、2817与2716EPROM等管脚兼容,其电擦除电压为+5V,正常运行时可随时写入或读取,其中读取时间能完全满足一般存储器的要求,但写入时间较长需9ms~15ms其操作时序与2716等相同,应用简单,但接线复杂,价格较高。

共有28管脚。

2 串行E2PROM的简介串行E2PROM如microchip公司的24LC01等系列芯片,接口简单,价格低廉,体积小,故广泛应用于IC卡,掉电前参数保护等场合,是中小型系统中广泛采用的非易失电擦除存储器。

2.1窜行E2PROM与8031接口技术24LC01/02等均为8管脚DIP封装,如图1所示。

图中A2、A1、A0为芯片地址线,SDA为数据线,SCL为时钟输入线,WP 为写保护线。

E2PROM

; 文件名 VI2C_24A.INC
; 功能说明 本模拟I2C软件包包含了I2C操作的底层子程序 使用前要定义
;好SCL和SDA 在标准8051模式(12 Clock)下,对主频要求是不高于12MHz(即1个
;机器周期1us);若Fosc>12MHz 则要增加相应的NOP 指令数 (总线时序符合I2C标
NOP
CLR SCL ;钳住总线 准备发数据
NOP
RET
;结束总线子程序
STOP: CLR SDA
NOP
SETB SCL ;发送结束条件的时钟信号
在使用IRDNBYTE IWRNBYTE时可以使用16位子地址 使用16位子地址时 要在程序开
条件汇编符号SUBA16 然后还要定义一个变量是SUBA1 这样SUBA1 SUBA就构成了16位子
其中SUBA1为高8位 在用户程序开头定义$SET (SUBA16)即可使用16位子地址 若没有此定义
NOP
CLR SCL
NOP
NOP
RET
;发送非应答信号
MNACK: SETB SDA ;将SDA置1
NOP
NOP
WR0: CLR SDA ;发送0
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
;读取字节子程序
;读出的值在ACC
;每取一字节要发送一个应答/非应答信号
RDBYTE: MOV R0,#08H
RLP: SETB SDA
NOP
NOP
CLR SDA
NOP ;起始条件锁定时大于4us

单片机内部存储器E2PROM读写程序

第三扇区【2400H-->25FFH】
第四扇区【2600H-->27FFH】
第五扇区【2800H-->29FFH】
第六扇区【2A00H-->2BFFH】
第七扇区【2C00H-->2DFFH】
第八扇区【2E00H-->2FFFH】
每个扇区为512B * 8 = 2KB
----------------------------------------------------- */
#ifndef __C51E251E2PROM_H__
#include<intrins.h>
/*--------------定义ISP操作命令--------------------*/
#define RdCommand 0x01
#define PrgCommand 0x02
{
ISP_ADDRH = (uchar)(byte_addr >> 8);//获取地址
ISP_ADDRL = (uchar)(byte_addr & 0xfe00);
ISP_CMD = ISP_CMD & 0xf8; //清低3位
ISP_CMD = ISP_CMD | PrgCommand; //写命令2
ISP_trigger();//触发执行
ISPIAP_DIS();//关闭ISPIAP功能
}
//////////////////////写字节函数///////////////////
void Stc89c52rcE2prom_ByteWrite(uint byte_addr,uchar _data)
void ISPIAP_DIS()
{

一款实用的串行E2PROM读写软件——24CXX及93CXX(附该程序)

一款实用的串行E2PROM读写软件——24CXX及93CXX (附该程序)一个27k的小程序24cxx.exe,93CXX.exe这两款程序不大,功能却不逊色于某些大型软件,读写校样样都能,最大的优点就是速度奇快,完全可以作为量写的工具,界面也很简单,稍加熟悉便会使用。

1 界面的左上角是软件的名称及版本号:24CXX PROGRAMER VER1.0,93CXXPROGRAMER VER1.0;2 界面的右上角是被写芯片的名称和类型:Mfr:ATMEL Type:AT24C01A(缺省值)AT93C46(缺省值)。

3 中间大范围的部分是代码编辑缓冲区,可以将芯片中的内容先读入到该编辑区,重新编辑后再写回到芯片中去。

也可以将缓冲区中的内容以二进制文件的形式存放到硬盘上,或将硬盘上的二进制文件调入缓冲区,再写入到芯片中去。

4 中间靠右侧是弹出式菜单条,可用上下箭头选取菜单,再按回车键执行。

也可以按加亮的大写字母所代表的键进行相应的操作。

5 左下部是代码保存的二进制文件名输入区FileName。

6 中下部是芯片的起始地址StartAddr和结束地址EndAddr。

7 右下部是缓冲区代码的校验和Check Sum。

菜单功能介绍:1 芯片类型选择—Type,按T键弹出一个菜单,按数字键1~9可分别选择下列芯片:AT24C01A、AT24C02、AT24C04、AT24C08、AT24C16、AT24C32、AT24C64、AT24C128、AT24C256。

AT93C46、AT93C56、AT93C66、AT93C76、AT93C862 Read—读片,按R键可将芯片数据读入到缓冲区。

3 Auto—自动编程,按A键可自动完成写片、校验等一连串操作。

4 Blank check—空片检查,按B键可检查芯片是否为空片(FF)。

5 Erase—芯片擦除,按E键可擦除整个芯片,即将芯片写入全1(FF)。

6 Program—芯片编程,按P键可将缓冲区内容写入到芯片中去。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"reg52.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
void I2C_Delay10us();
void init();
void start();
void stop();
void respons();
void write_byte(uchar data1);
uchar read_byte();
void write_add(uchar address,uchar data3);
uchar read_add(uchar addr);
void delayms(uint z);
void delayus(uint j);
sbit SDA=P0^6;
sbit SCL=P0^7;
uchar num;
uchar code LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9
void init()
{
SDA=1;
delayus(10);
SCL=1;
delayus(10);
}
void start()
{
SDA = 1;
delayus(10);
SCL = 1;
delayus(10);//建立时间是I2C_SDA保持时间>4.7us
SDA = 0;
delayus(10);//保持时间是>4us
SCL = 0;
delayus(10);
}
void stop()
{
SDA = 0;
delayus(10);
SCL = 1;
delayus(10);//建立时间大于4.7us
SDA = 1;
delayus(10);
}
void respons()
{
uchar i;
SCL=1;
delayus(10);
while((SDA==1)&&(i<250))
{
i++;
}
SCL=0;
delayus(10);
}
void write_byte(uchar data1)
{
uchar i;
for(i=0;i<8;i++)
{
SCL=0;
data1<<=1;
delayus(10);
SDA=CY;
delayus(10);
SCL=1;
delayus(10);
SCL=0;
delayus(10);
}
SDA=1;
delayus(10);
SCL=1;
delayus(10);
}
uchar read_byte()
uchar i,data2;
SCL=0;
delayus(10);
SCL=1;
delayus(10);
for(i=0;i<8;i++)
{
SCL=1;
delayus(10);
data2=(data2<<1)|SDA;
delayus(10);
SCL=0;
delayus(10);
}
return data2;
}
void write_add(uchar address,uchar data3) {
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(data3);
respons();
stop();
}
uchar read_add(uchar addr)
{
uchar data4;
start();
write_byte(0xa0);
respons();
write_byte(addr);
respons();
start();
write_byte(0xa1);
respons();
data4=read_byte();
stop();
return data4;
}
void delayms(uint z) //毫秒延时{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delayus(uint j)
{
uchar x;
for(x=j;x>0;x--)
{
_nop_();
}
}
void main()
{
init();
write_add(2,9);
while(1)
{ num=read_add(2);
P2=~LED[3];
}
}。

相关文档
最新文档