新闻详情

X25043/45 E2 PROM及其与51系列微处理器的接口方法

日期:2019-12-15 14:26
浏览次数:895
摘要:
康为水泥阀
在前面的一编文章里我们介绍了一款以8031单片机做的配料系统,其中用到到了X25043,在网上我查到一编介绍这种芯片的文章,供大家参考,谢谢原作者!
摘要:X25043/45E2PROM芯片的特点及主要功能,描述了其引脚定义、工作原理、操作指令、存储阵列读时序和写时序。介绍它与51系列微处理器的几种接口方法,并给出应用电路和相应程序。
    关键词:可编程 写使能 51系列微处理器接口方法
随着测量技术的发展和微处理器的广泛应用,系统的电路越来越复杂,系统的可靠性问题也越来越突出,因此看门狗、工作电压监控和存储器差不多在每一系统中都被采用。Xicor公司提供的X25043/45 E2PROM芯片,把看门狗定时器、工作电压监控和E2PROM三种功能组合在一个封装内,并采用三线总线工作的串行外设接口(SPI)和软件协议,降低了系统成本,提高了系统的工作可靠性,非常适合于需现场修改数据的场合,可广泛应用于仪器仪表、工业自动控制等领域。但在应用中,对存储阵列的读写、看门狗定时器的设置则需通过芯片要求的指令来完成。
1X25043/45的主要特点和引脚定义
X25043/45的主工特点如下:
(1)可编程的看门狗定时器,通过指令可选择看门狗定时时间;(2)工作电压监测,并产生复位信号;(3)读写时钟速率可达1MHz;(4)518×8位串行E2PROM;(5)数据块锁定功能和处内偶然性的写保护功能,保护存储数据;(6)CMOS器件,低功耗;(7)擦写次数*少10万次,*少100年的数据保存期。

   
X25043/45的引脚排列如图1所示,引脚功能说明见表1。

表1 X25043/45的引脚说明
引脚号引脚名说    明
1CS芯片选择输入端
2SO串行数据输出端
3WP写保护输入端
4Vss电源地端
5SI串行数据输入端
6SCK串行时钟输入端
7RES/RES复位信号输出端。X25043输出低电平,X25045输出高电平。
8Vcc正电源输入端
2工作原理及操作指令
X25043/45内含一个8位指令寄存器,传送指令、数据和地址时按8位串行数据格式进行,且均以*高有效位在先的方式传送。其指令见表2。SI线上输入的数据在SCK上升沿被锁存,芯片内的数据在SCK下降沿输出至SO线上。时钟SCK允许操作过程中停止并在其后恢复。

表2 X25043/45指令集(A8为地址的*高位)

指令名指令格式

说    明

 
WREN0000 0110允许写操作,设置写使能锁存器。
WRDI0000 0100禁止写操作,复位写使能锁存器。
RDSR0000 0101读状态寄存器。
WRSR0000 0001写状态寄存器。
READ0000 A8011从开始于所选地址(A8)的存储器阵列中读数据。
WRITE0000 A8010将数据写入开始于所选地址(A8)的存储器阵列中。

 

在读存储阵列时,将CS拉至低电平,发送SCK时钟脉冲,通过SI线发送含*高位地址A8的READ指令,然后发送8位地址,选定的存储单元中的数据被送到SO线上。每个数据被送出后,芯片内的地址计数器自动加1,指向下一存储单元;若继续提供SCK脉冲,可读出下一存储单元数据。当地址计数器达到$1FFH时,自动翻转至$000H单元,直至CS为高电平,终止读操作。SO线不输出数据时,呈高阻状态。其时序如图2所示。读状态寄存器时,片选后发送RDSR指令,状态寄存器的内容在发送RDSR指令的第8个SCK脉冲的下降沿被送出到SO线上。
在写操作之前,必须置位“写使能”。在字节、页或状态寄存器写周期完成后和上电情况下,“写使能”自动复位,WP为低电平,“写使能”可被复位。“写使能”复位时,不能对芯片进行写操作。因此必须置WP为高电平,将片选CS置低电平,向芯片发出WREN指令,接着再将片选CS置位,以置位“写使能”。若不将CS置位而继续进行写操作,则写操作无效。*少一个SCK周期后,重新将CS置低电平以进行写操作。写存储阵列时,发送含*高位地址位A8的WRITE指令后,送8位地址,再送数据写入芯片。在CS一直为低电平的情况下,可以连续送写同一页地址的4个字节数据。超过4个字节数据,芯片将自动从本南的**个地址重新写入,因此必须在第24、32、40、48个SCK周期后,置位CS;写状态字时,发送WRSR后送更新的状态寄存器内容。

    X25043/45可提供电源监控和编程看门狗定时器,给系统的时间内没有访问X25043/45,即CS为低电平,则X25043/45将产生复位信号输出。芯片通过其供电电源Vcc来实现电源监控。当Vcc低于规定值时,产生复位信号输出,对于5V工作芯片,其值为4.25~4.5V。当Vcc低于4.25~4.5V时,上电后自动产生复位信号,信号宽度*小可达100ms。
发送WREN、WRDI和RDSR指令时,不必发送地址或数据。RDSR、WRSR指令分别用于读、写X25043/45内的状态寄存器。状态寄存器的格式如下:
DB7DB6DB5DB4DB3DB2DB1DB0
××WD1WD0BL1BL0WELWIP
注:×是随意位
WD1、WD0是看门狗定时位,为非易失性位,其组合表征的时间见表3。
康为水泥阀
表3 WD1和WD0组合表征的时间
WD1WD0看门狗定时典型值
001.4s
01600ms
10200ms
11看门狗功能无效
BL1、BL0是存储器块保护位,为非易失性位,其组合表征的保护存储器阵列范围见表4。选定保护的块,用户只能读而不能写。

表4 BL1和BL0组合表征的保护存储器范围
BL1BL0初保护的阵列地址
00无保护阵列
01$180H~$1FFH
10$100H~$1FFH
11000H~$1FFH
WEL是“写使能”锁存器状态位,只读位。为1,“写使能”置位;为0,“写使能”复位。
WIP是表征芯片写操作忙位,只读位。为1,写操作正在进行;为0,无写操作。

3 X25043/45与5系列微处理器接口
由于51系列微处理器无SPI接口,因此必须通过移位方式来实现通讯。X25043与51系列微处理器接口时,一般不能通过CPU的P2口进行片选,只有在P2口为位控方式工作时才允许。51系列CPU的P2口工作于地址总线方式时,其输出是脉冲形式,地址送出后,呈高电平。因此在对X25045操作时,不能保证片选持续有效,也就不能对其进行任何操作。为此片选CS只能是位控方式连接,一般与CPU的P1或P3口相连接。
图3是一款典型接口电路。R1是复位输出的上拉电阻,上拉电阻是必需的。微处理器U1为89C52,U2为X25045,提供高电平复位信号。从图3中可以看出,X25045必须用4根线与CPU接口。
在系统接口复杂时,典型接口方式将浪费宝贵的CPU口资源;进行口扩展时,既增加成本,又减低了可靠性,不能体现X25045的优点。在系统设计时,设计人员往往都力求*精简*可靠的*小系统方案,而较复杂的系统几乎用满所有CPU口线。
图4和图5两款电路相对图3有一定改进,经济实用,均能可靠地运行。图4所示电路是一种总线接口方式。但对X25045操作时,P2口不能选择其它任何器件。若总线其它器件均以低电平选择有效时,必须选将P2口置高电平,即:MOVP2,#0FH。这款电路在对X25043/45操作时,系统的中断操作中不能有数据输入输出操作。若有数据输入输出操作,必须先关中断,否则将出现逻辑混乱,甚至烧毁CPU和X25043/45。在访问X25043/45的优先级低于中断操作的*上等时,也就是说,在访问X25045时系统还必须响应中断。如有URT串口工作时,则不能使用该款电路。

    对于图5电路,虽然只减少了一根口线,但巧妙地利用X25043/45的读操作是在SCK的上升沿、写操作是在SCK的下降沿、而SO线在无输出时呈高阻状态这一特性,将SO线和SI短接,把四线接口改为三线接口。笔者多次将图5的接口方法应用于仪器开发,将X25043/45用于口令、校准参数等的存储,均取得满意的效果,系统结构简单,并且一直稳定工作。由于它带有电源监控、上电复位和看门狗电路,所以在实际应用中,可大大减少系统的设计,提高工作可靠性。
以上三款电路的编程方法基本相同。对于图5所示的电路,在对X25045操作前,先要禁止所有中断,将P2口全部置高电平,才能读写X25045。三厌电路读写X25045时,程序唯壹的差别是在定义赋值CS、SI、SCK、SO上。对于图5,将SI、SO的定义赋值相同。据图5接口方式编有如下范围程序,该程序提供了所有X25045的命令。
源程序:
CS BIT P1.0;P1.0作片选
SI BIT P1.2P1.2作串作输入
SO BIT P1.2;P1.2作串行输出
SCK BIT P1.3;P1.3作串行时钟
WREN_INST EQU 06H;写锁存指令
WRDI_INST EQU 04H;读锁存指令
WRST_INST EQU 01H;写状态寄存器指令
RDSR_INST EQU 05H;读状态寄存器指令
WRITE_INST EQU 02H;写存储阵列指令
READ_INST EQU 03H;读存储阵列指令
BYTE_ADDR EQU 55H;字节操作方式存储器地址
BYTE_DATA EQU 0EAH;写操作数据
PAGE_ADDR EQU 1F0H;页操作方式存储器地址
PAGE_DATA1 EQU 99H;写入页的**个数据字节
PAGE_DATA2 EQU 0AAH;写入页的第二个数据字节
PAGE_DATA3 EQU 0CCH;写入页的第三个数据字节
STATUS_REG EQU 10H;状态寄存器
MAX_POLL EQU 99H;写忙(WIP)查询*大循环数
STACK_TOP EQU 060H;堆栈指针
初始化子程序:
INSTALL:MOVSP,#STACK_TOP
CLR EA
CLR A
SETB CS
CLR SI
SETB SO
CLR SCK
RET
复位看门狗子程序:
RES_DOG:CLRCS
SETB CS
RET
写操作忙标志查询子程序:
WIP_POLL:MOVR1,#MAX_POLL
WIP_POLL1:LCALLRS_C
JNBACC.0,WIP_POLL2
DJNZR1,WIP_POLL1
WIP_POLL2:RET
复位“写使能”子程序:
WD_C:CLRSCK
CLR CS
MOVA,#WRDI_INST
LCALLOUTBYT
CLR SCK
SETB CS
RET
置位“写使能”子程序:
WE_C:CLRSCK
CLR CS
MOVA,#WREN_INST
LCALLOUTBYT
CLR SCK
SETB CS
RET
写状态寄存器子程序:
WS_C:CLRSCK
CLR CS
MOVA,#WRSR_INST
LCALLOUTBYT
MOVA,#STATUS_REG
LCALLOUTBYT
CLR SCK
SETB CS
LCALLWIP_POLL
RET康为水泥阀
读状态寄存器子程序:
RS_C: CLRSCK
CLR CS
MOVA,#RDSR_INST
LCALLOUTBYT
LCALLINBYT
CLR SCK
SETB CS
RET
单字节数据写入子程序:
BYTE_W:MOVDPTR,#BYTE_ADDR
CLR SCK
CLR CS
MOVA,#WRITE_INST
MOVB,DPH
MOVC,B.0
MOVACC.3,C
LCALLOUTBYT
MOVA,DPL
LCALLOUTBYT
MOVA,#BYTE_DATA
LCALLOUTBYT
CLR SCK
SETB CS
LCALLWIP_POLL
RET
单字节数据读出子程序:
BYTE_R:MOVDPTR,#BYTE_ADDR
CLR SCK
CLR CS
MOVA,#READ_INST
MOVB,DPH
MOVC,B.0
MOVACC.3,C
LCALLOUTBYT
MOVA,DPL
LCALLOUTBYT
LCALLINBYT
MOV R6,A
CLR SCK
SETB CS
RET
连续3字节数据写入子程序:
PAGE_W:MOVDPTR,#PAGE_ADDR
CLR SCK
CLR CS
MOVA,#WRITE_INST
MOVB,DPH
MOVC,B.C
MOVACC.3,C
LCALLOUTBYT
MOVA,DPL
LCALLOUTBYT
MOVA,#PAGE_DATA1
LCALLOUTBYT
MOVA,#PAGE_DATA2
LCALLOUTBYT
MOVA,#PAGE_DATA3
LCALLOUTBYT
CLR SCK
SETB CS
LCALLWIP_POLL
RET
连续2字节读取子程序:
SEQU_R:MOVDPTR,#PAGE_ADDR
CLR SCK
CLR CS
MOVA,#READ_INST
MOVB,DPH
MOVC,B.0
MOVACC.3,C
LCALLOUTBYT
MOVA,DPL
LCALLOUTBYT
LCALLINBYT
MOV R2,A
LCALLINBYT
MOV R3,A
LCALLINBYT
MOV R4,A
CLR SCK
SETB CS
RET
字节读出子程序:
OUTBYT:MOVR0,#08
OUTBYT1:CLRSCK
RLC A
MOV SI,C
SETB SCK
DJNZR0,OUTBYT1
CLR SI
RET
字节写入子程序:
INBYT:MOVR0,#08
INBYT1:SETBSCK
CLR SCK
MOV C,SO
RLC A
DJNZR0,INBYT1
RET 康为水泥阀