密码访问器件X76F100在单片机系统中的应用
扫描二维码
随时随地手机看文章
X76F100是一种密码访问安全监控器件,内部含有1个112×8位的保密数据阵列,对该阵列的访问由2个64位的读写密码来控制,密码与数据通过I2C总线接口完成输入输出。正常情况下,X76F1000提供最少为10万次的擦写期限和最少100年的数据保存使用。
1 器件的特点
*可编程64位读写密码保护;
*重试计数寄存器允许8次密码试验,然后阵列清零;
*32位对复位的响应(RST输入);
*8字节页写方式;
*最大1 MHz时钟速率;
*I2C总线接口;
*宽电压(3.0~5.5V)低功耗CMOS;
*10万次擦写和100年数据保存;
*多种(8脚PDIP、SOIC、MSOP、智能卡)外形封装。
2 封装与引脚说明
图1是X76F100的各种封装形式。
引脚功能如下:
(1)串行时钟SCL。串行时钟输入端用业控制所有的数据输入和输出器件。
(2)串行数据SDA。SDA是一个漏极开路的串行数据输入/输出引脚。
(3)片选CS。CS为低电平时,X76F100处于工作方式;否则,处于等待方式。
(4)复位RS。RST是器件的复位脚。当RST被触发为高电平为CS为低电平时,X76F100将输出标准的32位“复位同步响应”数据。
(5)电源Vcc,地Vss。在器件上应施加3.0~5.5V的工作电压。
3 器件的读写时序
3.1 I2C总线协议
X76F100支持I2C二线制总线协议。数据发送以字节为单位,高位在前,低位在后,且在所有应用中X76F100都被作为从机。总线协议约定如下:
开始条件-当SCL为高电平时,SDA由高电平到低电平的跳变。
停止条件-当SCL为高电平时,SDA由低电平到高电平的跳变。
数据改变-SDA线上数据的状态只有在SCL为低电平时才能改变。
应 答ACK-用来表示数据传送成功的软件约定。发送器件在发送1个字节的8位以后,将释放总线,在额外的第九个时钟周期,接收器将SDA线接至低电平,以应 答它接收到了8位数据。此时SDA的高电平被认为是一个NO-ACK(数据无效)。I2C的通信时序等详细技术规范可参看有关手册。
3.2 命令代码
如表1所列,X76F100一共有5种操作,分别由不同的命令代码来选择。器件操作时,命令代码必须跟随在起始信号后发出。
表1 命令代码
命令代码功 能
100S3S2S1S00页写
100S3S2S1S01页读
1111110改变写密码
11111110改变读密码
010101密码间询
对其他的非法命令代码器件将用NO-ACK作为响应,然后回到等待方式。页面读与写命令中的S3S2S1S0为页面地址,代表14个8字节的页中的一个。对阵列的读或写总是从页的第一个地址开始。读操作可以不限定地继续,而写操作一次必须是全部8个字节。
3.3 页写与页读
页 写或页读时,应让CS和RST均保持低电平,其工作流程如图2所示。写命令或读命令控制字节中包括所要写入的页地址,随后紧跟8字节的写操作或读操作密 码。密码是否正确应通过一个密码问询(起始信号+01010101)来判断,ACK回答表示密码正确,NO-ACK回答则表示则输入的密码有误。 X76F100内部包含一个重试计数器,对任何不正确的密码重试计数器都将计数加1。当计数到8次溢出时,器件的存储器区和两个密码会自动清除为0(就像 刚出厂一样)。如果在重试计数器溢出以前收到一个正确的密码,则重试计数器复位并允许访问器件。
密码正确时,写操作 要求传送8个字节的数据,在最后字节传送以后发出一个停止条件。这个条件启动非易失性写周期,数据从页的第一个地址开始写入。如果传送少于或多个8个字 节,则写周期不会被启动,页中的数据将保持不变。在数据写入时(约10ms),器件对新的命令将不予应答(回答NO-ACK)。
如果是读操作则必须从页的第一个地址开始,但一次读出的字节数可任意。读到最后一页时,器件将自动转回到第一页继续。在读完最后一个字节后,主机可不作ACK确认而直接发出结束信号,至此,此次读操作完成。
4 密码的修改
器件从工厂中运出时所有的密码都等于“0”,使用前应对其作必要的修改,另外,用户也有可能需要更改已知的密码。它们可通过在正常的页面写操作过程中送一个“改变读密码”或“改变写密码”命令来实现。
图 3是修改密码流程图。送出“改变读密码”或“改变写密码”命令后,应将现在的密码(如出厂时的全0)发出,然后进行密码问询。得到一个有效的密码应答响应 ACK后,再传送一个全部8字节的新的密码即可。用户可在2 ms内,用一个数据应答轮询命令来判断新密码的写操作是否已经启动,一个ACK表明写操作未能成功启动,而NO-ACK应答则表明密码正在写入;另外,用 户也可用一个重复的密码应答轮询命令来检查新的密码是否已被正确的写入。一个ACK应答(通常10ms后)表示新的密码已有效。
X76F100中的密码可以修改,但无论如何都无法将其读出。
5 应用编程举例
只要符合X76F100的数据通信规范,微控制器与其接口就不会有问题。下面给出的是AT89C51对X76F100进行写操作的例程。读操作或修改密码的程序可照此编写。稍加修改,该程序也可移植到其他微控制器与X76F100的接口通信中。
;将40H单元开始的8个数据写入X76F100的第二页。写
;密码在70H开始的8个单元中
;
;***AT89C51与X76F100接口***
SCL EQU P3.2
SDA EQU P3.3
CS EQU P3.4
;***起始条件与结束条件***
START:SETB SDA ;起始条件
SETB SCL
CLR SDA
CLR SCL
RET
STOP:CLR SCL ;结束条件
CLR SDA
SETB SCL
SETB SDA
RET
;***发送一个字节到X76F100中,发送数据在A中,返
;回的应答在进们中***
WBYTE:MOV R7,#8
WBYTE1:RLC A
MOV SDA,C ;发送一位
SETB SCL
CLR SCL
DJNZ R7,WBYTE1
SETB SCL
MOV C,SDA ;读应答ACK信号
CLR SCL
RET
;***主程序***
MAIN: CLR CS
MOV R5,#8 ;置密码重试次数
MAIN0:LCALL START ;发起始条件
MOV A,#100001000B ;写控制字
LCALL WBYTE ;发送写控制字
JNC MAIN0 ;NO-ACK,重来
MOV R6,#8
MOV R0,#70H ;8字节密码首址
MAIN1:MOV A,@R0
LCALL WBYTE ;发送8位密码
JNC MAIN0
INC R0
DJNZ R6,MAIN1
MOV A,#55H
LCALL WTYBE ;密码问询
JNC ERROR ;密码有误,转错误处理
MOV R6,#8 ;密码正确
MOV R0,#40H ;发送8字节数据
MAIN2:MOV A,@R0
LCALL WBYTE
JNC MAIN0
INC R0
DJNZ R6,MAIN2
LCALL STOP ;发停止条件,启动写操作
SETB CS
MAIN3:SJMP MAIN3 ;其他程序省略
ERROR:DJNZ R5,MAIN0
ERROR1:SJMP EPPOR1 ;出错处理程序省略
结束语
X76F100 主要应用在电子货币、身份识别、考勤管理等方面。在IC卡的应用过程中,电路及编程设计都要考虑因插卡而造成的电路短路、接触抖动等干扰因素。上述编程实 例没有考虑X76F100因故障造成NO-ACK,程序进入死循环的问题。实际应用编程时,应注意解决。