DS198X和DS199X芯片的原理及应用

2006-05-07 15:49:35来源: 国外电子元器件

DS189X、DS199X芯片是美国DALLAS公司生产的接触式存储器,封装在不锈钢外壳中,外形如钮扣式电池,也叫iBUTTON器件。它在内置的ROM存储器内存放有互不重复的64比特特征码,可用于识别各个iBUTTON器件,该特征码被厂家在生产过程中固化在芯片内。另外,芯片内还有可改写数据的存贮区。

DS198X系列芯片内含最大为64k比特EPROM,而DS199X系列芯片则内含最大为64k比特的非易失性RAM即NVRAM。其电气连接少到仅两条线:一条地线和一条数据线,采用其特有的一线协议进行数据传输,工作所需的电源可以从数据线上“偷”,也可以从内置的锂电池(对于DS199X系列芯片)中获得。数据采用循环冗余码检错,信息传输可靠。IBUTTON器件在用于网络协议分层的环境下工作时,该器件适用于工业现场及各种恶劣的环境,可以代替IC卡、磁卡、加密卡等用于鉴别身份、有价证券、看门狗等方面,并比它们更易接口、电路设计更加简单、携带方便、性能稳定。

1 一线协议

iBUTTON是自定时的硅器件,其内部的定时逻辑电路能测量和产生各种宽度的脉冲,数据传输按位同步和半双工进行。数据和命令码逐位发出,接收到后再构成字节,发出时总是低位先出。所有的操作均是由主机开始启动的,iBUTTON只能作为辅机来响应相应的动作。主机与辅机的同步是从主机产生下降沿开始的,在下降沿过后的一段时间内,根据数据的传输方向,主机或辅机采样数据线上的电压并获得一比特的信息。每一位数据传输所需要的时间为一个时间隙。每一位数据都分别单独定时,即使通信中出现停顿也不会有错误。在iBUTTON与主机连接后的几微秒的时间内,芯片将立即发出一负脉冲把数据线拉低,以告诉主机它在线上正等待接受命令,这个负脉冲叫做存在脉冲。主机也可以发位脉冲来请求iBUTTON送出存在脉冲,以检测线上有无iBUTTON器件。

2 工作时序和硬件接口

DS198X和DS199X型iBUTTON器件采用CMOS工艺,其I/O口工作在开漏状态下,因而耗电少,尤其是器件处于睡眠状态时,其漏电流极小,iBUTTON器件和主机接口非常方便。当主机不动作时应由上拉电阻保持数据线为高电平,可以采用如图1所 示的电路与iBUTTON的两条线相连。工作电压VPULLUPo 2.8V~6V,之所以要高于2.8V,是因为要给内部的储能电容充电,当数据线为低电平时,由电容为器件提供能源。

在这样的一线系统中,数据0、1用不同宽度的负脉冲波来表示,主机发出一位数据或命令过程称作写时序,写一位数据的有效时间为tSLOT,如图2所示。写1信号是宽度为tLOS1的负脉冲,写0信号是宽度为tLOW0的负脉冲。写脉冲过后,主机释放数据线,由电阻把数据线拉高,再经过一段恢复时间tREC就可以进行下一位操作。IBUTTON通常在主机产生下降沿后的30μs采样数据线。若采得为低电平,则为写0信号;若采得为高电平,则为写1信号。每一位数据传输的时间有效时隙tSLOT加恢复时间tREC。

要读iBUTTON中的数据,主机必须先产生读时隙,读时隙看上去很象写1时隙,如图3所示。当主机发出一负脉冲tLOWR开始读时序后,iBUTTON就送出数据,送0时把数据线拉低,送1时使数据线保持高。因主机产生下降沿过tDRV的时间,主机采样数据线,若采到低电平则读0;若采到高电平则读1。主机采样后过tRELEASE时间;iBUTTON才释放数据线,而后数据线上的电平回到VPULLUP。

IBUTTOn在进行每一项操作前,主机需先发一个复位脉冲,以便使iBUTTON内部初始化并为开始某项操作做准备。复位脉冲tRSTL一般较宽,至少为8个有效时隙(480μs)。当iBUTTON检测到主机发来的复位脉冲时,数据线在等待tPDH的时间后回到高电平并回复一个宽度为tPDL的存在脉冲,主机存在检测的时间间隔的tPDL。主机检测到存在脉冲后,就可以进入高一层即网络层的操作了。

3 iBUTTON的结构和原理

DS199X、DS198X系列iBUTTON器件内除具有控制、定时逻辑外,还有ROM和数据存储器。DS199X的数据存储器是NVRAM,DS198X的数据存储器是EPROM。ROM由64比特的空间构成,最低 8比特是家族号,代表器件的功能和容量;中间48比特是序列号;最高8比特是一字节的CRC校验码。

ROM的64比特值在生产时就固化进去了,该值对所有器件彼比互相独立,全球唯一,ROM的内容等效于网络节点地址。对ROM的操作一般在网络层进行,ROM操作完成后,就进入传输层,即对数据存储器进行操作。

对ROM的操作命令有搜索ROM、匹配ROM、读ROM和跳过ROM等,各个命令代码均为一字节,分别为F0H、55H、33H和CCH。

匹配ROM命令代码为55H,用于多个iBUTTON器件并联在总线时寻找某个器件,ROM的内容等效为这个器件的地址。主机发出匹配ROM命令后,要再发出64比特的欲寻找的ROM内容(用64个时间隙)才能完成这一操作。主机每发出一位数据后,各个iBUTTON就将该数据与其ROM中相应位的数据比较,若相等则准备继续检查下一位,若不相等则处于睡眠状态,直到64位的内容都比较过,并将找到的那个器件激活准备接受下个命令为止;那些ROM内容不匹配的iBUTTON器件将处于睡眠状态直到下一个复位脉冲来到这一过程,这相当于通信网中的寻址。

读ROM命令代码为33H,用于识别器件。主机发出这个命令后,必须产生64个读时隙。随着每一读时隙的发出,iBUTTON将送出ROM的内容,最低位先送。当有几个器件连在总线上时,读ROM操作就不能得到正确的CRC校验值,这时,必须用搜索ROM命令,以确定ROM的内容。

搜索ROM命令代码为F0H。虽然主机不知道各个器件的序列号,但可有延缓命令在众多在线器件中一个个地搜索出每一个器件的ROM序列号。主机发出这个命令后,各个iBUTTON送出最低位数据,再用一个时隙的时间送出最低位数据的补码。主机根据在这两个时隙中采样的数据判断出线上器件的ROM最低位数在哪些可能,例如主机判断出有1,然后发出1,那些ROM最低位不为1的iBUTTON器件即处于睡眠状态,而最低位为1的iBUTTON再送出次低位的数据,然后用同样的方法再判别次低位数据,依此类推下去,就搜索出ROM中所有的内容,这一过程相当于局域网中网桥发出一则广播消息以获得各个网卡地址的过程。如果对ROM的内容不感兴趣(在仅有一个器件在线上的场合),可以忽略ROM的内容。跳过ROM命令代码而直接转入CCH,主机发出该命令后器件立即达到传输层,开始对数据存储单元RAM进行操作。

DS198X系列与DS199X系列对读数据存储单元的操作是相同的,而对写数据存储单元的操作则有所不同,限于篇幅,本文只介绍DS199X系列的器件。DS199X系列iBUTTON中RAM是非易失性RAM(即NVRAM),内置有锂电池,掉电时可自动保护数据,数据存放期可长达十年之久。RAM中有一32字节的捕捉板作为暂存单元,并有1至255页的数据区(每而32字节的空间)。两个8位地址寄存器TA1、TA2用来装载欲写数据的目标地址或欲读数据的源地址;三个过程状态寄存器E/S充当字节计数器和传输状态寄存器,利用它可以鉴别数据的完整性。对RAM的操作命令有写捕捉板(代码为0FH)、读捕捉板(代码为AAH)和拷贝捕捉板三个过程,其代码为55H;而读存储器时,代码为F0H,各个命令代码均为一字节。

主机在读其中的数据时,先发同一字节的读RAM命令F0H,然后送出源地址代码,再产生读时隙,随着每一个读时隙的发出,主机将得到每一位被寻址的数据,按先送字节低位数据的规则获得数据,一个完整的字节送出后,iBUTTON自动增加地址。IBUTTON中数据的读出是按位连接进行的,不受页分界的限制,这样可方便地整个存储空间,读多少数据完全由主机决定。主机往RAM写数据时,要先把数据写到捕捉板,再从捕捉板读出以验证其正确性,最后再把捕捉板中的数据拷贝到指定的存储单元。所以写RAM的操作应包括写捕捉板、读捕捉板和拷贝捕捉板这三个过程,写数据通常以整页为单位进行操作。IBUTTON的工作过程如图5所示。

4 应用举例

笔者已将DS198X和DS199X方便地运用在考勤、计费、安保系统中,其接口电路非常简单,只需两个电阻和一个普通的二极管(如图6所示),也不需要专门的开发装置,iBUTTON器件放在探笔头上,点接触一下即可完成数据的交换。主机采用简单、通用的MSC-51单片机,P1.0端口作为写iBOTTON的数据线,P1.1端口作为读iBOTTON数据线。单片机时钟频率为12MHz,一个机器周期恰好为1μs。若总线上只有一个iBUTTON器件就不需对其ROM进行操作了,跳过ROM,可直接读其数据存储单元0210H中开始的20个数据并将其存放到单片机30H开始的数据单元中。完成该任务的读RAM区子程序READ-RAM如下:

READ-RAM:

PUSH A ;保护累加器

PUSH B

MOV R0,#30H ;R0指向数据缓冲区单元首址30H

SETB P1.0 ;主机开始送复位脉冲

MOV B,#250 ;延迟500μs

DJNZ B,$

CLR P1.0 ;主机释放数据线

MOV B。#110 ;延迟20μs

DJNZ B,$

MOV B,#120 ;延迟500μs

WAIT-LOW:JNB P1.1,PRESENT ;检测数据线是否为低电平

DJNZ B,WAIT-LOW;数据线为高电平,继续检测

MOV 50H,#0EEH;在500μS内没有回复信号,50H单元放无回复信号,标志0EEH,退出

POP B

POP A

READ-RAM-RET

RET

PRESENT:DJNZ B,$ ;有回复信号,延迟等完

MOV A,#0CCh; 发“过ROM”命令

CALL WRITE

MOV A,#0F0H ;发“读RAM”命令

CALL WRITE

MOV A,#10H;发出读数据区的低8位地址10H

CALL WRITE

MOV A,#02H;发出读数据区的高8位地址02H

CALL WRITE

CALL READ-DATA ;读iBUTTON中0210H单元开始的20个数据

POP B

POP A

RET

下面为写一字节子程序WRITE,利用它可将待写的字节在累加器A中。

WRITE:MOV R7,#8 ;R7计写过的比特,8比特为一字节

NEXT-BITW:RRC A ;将累加器A的最低位移到进位位中

SETB P1.0 :主机写脉冲开始

MOV B,#50 ;设写脉冲宽TSLOT最宽为100μs

NOP ;延迟4μs

NOP

JNC WAIT-2;进位位为0,负脉冲宽度TLOW0为100μs

CLRB P1.0 ;进位位为1,主机立即释放数据线

WAIT-2:DJNZ B,$

CLR P1.0

NOP ;延迟TREC

NOP

DJNZ R7,NEXT-BITW ;未写满8位,继续写下一位

RET

以下是读iBUTTON数据子程序READ读出20个字节存放到30H开始的单元中。

READ-DATA:MOV R7,#8;R7计读的比特,8比特为一字节

MOV R6,#20 ;R7计要读出的字节数

NEXT-BITR:SETB P1.0 ;主机产生读脉冲的下降沿

MOV B,#2 ;延迟4μS

DJNZ B,$

CLR P1.0 ;主机释放数据线

MOV B,#40;过80μS主机采样数据线

DJNZ B,$

READ-0:CLR C;先清进位位

JNB P1.1,WAIT-3;若P1.1为零则读到0

SETB C;若P1.1为1则读到1,置进位位

WAIT-3;RRC R3;将读到的一位存入R3寄存器的最低位

DJNZ R7,NEXT-BITR;未读满8位,继续读

MOV @R0,R3 ;已读满8位,存入主机的数据缓冲区

INC R0 ;缓冲区指针加一

MOV R7,#8 ;R7计读的比特,8比特为一字节

DJNZ R6,NEXT-BITB ;没读到20个字节,继续读

RET ;已读到20个字节,返回

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/memory/200605/1559.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved