I2C串行芯片X1288及其在电子电能表中的应用

最新更新时间:2014-05-18来源: 互联网关键字:I2C  X1288  电能表 手机看文章 扫描二维码
随时随地手机看文章

介绍了一种基于I2C总线接口的多功能串行芯片X1288的性能特点和工作原理,给出了X1288在电子电能表设计中的应用方法,同时给出了 X1288和AT89C52的连接电路。实际应用表明:X1288能简化电路设计并可提高硬件的工作效率。 关键词:X1288;I2C总线接口;电子电能表 1 引言 X1288是美国Xicor公司生产的一种集E2PROM、实时时钟、日历、CPU监控和两路报警于一体的多功能集成电路芯片。X1288的时钟采用一种价格低廉的32.768kHz晶振,具有百分秒、秒、分、时、日、月、年及星期信息,并可设定两个报警时间,其时钟和报警寄存器的双通道结构使得它能在读写数据时仍保持时钟的准确性。此外,X1288还可提供32k字节的E2PROM阵列,并具有电源和CPU监控功能。 X1288串行芯片一般采用I2C总线来实现与主控制器的数据交换。I2C是由Philips公司开发的一种用于内部IC控制的双向二线串行总线,通过该总线可很好地解决现代电子系统中众多IC之间,及IC与外界的通信需要,并可大大简化电路设计,提高硬件电路的工作效率。 2 X1288的引脚定义


X1288芯片具有16脚SOIC或14脚TSSOP小体积封装形式。图1为14脚TSSOP封装的引脚示意图,各引脚的定义如下: X1、X2:这两个引脚可分别用作片内振荡器的反相放大器的输入和输出端。应用时需外接一个32.768kHz的石英晶体,其作用是为系统时钟/振荡器提供时间基准。 RESET:复位信号输出端。当看门狗超时或电压跌落到固定的VTRIP门限时,此引脚将向主处理器发送一个低电平有效的漏极开路输出信号,以使电路系统快速复位。 SDA:串行数据端,为漏极开路输出的双向引脚,用于数据的输入输出。实际应用时需接上拉电阻,并应与其它漏极或集电极开路输出端线相或。该端的输入缓冲器总是处于激活状态,输出电路可通过一个斜率控制的下拉控制输出信号的下降时间。设计时通常把电路设计成400kHz的二线接口。 SCL:串行时钟端口。 PHZ/IRQ:可编程频率/中断输出端。当编程为频率输出时,该端接到内部振荡器的输出脚,以输出频率为32.768kHz、4096Hz或1Hz的信号,也可以无信号输出。当编程为中断输出时,该端可在报警发生时激活,以向主机请求中断。


VBACK:备用电源输入端。当VCC小于VBACK-0.2V时,电源控制电路将切换至VBACK供电;而当VCC超过VBACK时,又会自动切回VCC供电方式,图2所示是其电源控制过程示意图。 3 X1288的主要寄存器及其功能 X1228中的时钟/控制寄存器(CCR)位于从E2PROM阵列中分离出来的一个区域,地址位于[000]0h~[003]Fh之间。CCR一般被分成5段,可分别用于状态寄存器(1字节)、实时时钟(8字节)、控制寄存器(4字节)、报警寄存器1和报警寄存器0(各8字节)。 3.1 状态寄存器(SR) 状态寄存器是易失性的,其地址是003Fh。表1所列是其命令格式,各命令字的具体含义如下: 表1 状态寄存器(SR) 地址名称 7 6 5 4 3 2 1 0 缺省值 003Fh SR BAT AL1 AL0 0 0 RWEL WEL RTCF 01h BAT:后备电源标志位。当BAT为“1”时,表明器件在使用后备电源。 AL1、AL0:报警选择位。X1288中有两个报警寄存器,若其中的某一报警时间与实时时钟相同时,相应的AL1或AL0位将变为“1”;当读取SR的值后,该位又变为“0”。 RWEL:时钟/控制寄存器(CCR)写入控制位。对CCR进行写操作时,必须先使该位为“1”。 WEL:CCR和E2PROM的写入控制位。在对CCR和E2PROM进行写操作时,必须先使该位为“1”。同理,如果要写入时钟和控制寄存器,也必须先写“02h”至SR(使RWEL为“1”),再写“06h” (使WEL为“1”)。 RTCF:掉电标志位。当全部电源(包括VCC和VBACK)失效后,该位变为 “1”;而在系统再次上电后,如果要对RTC进行第一次有效写操作,则应首先将使该位为“0”。 需要说明的是,虽然SR中的第3、4位没有使用,但这些位必须置“0”。 图4 3.2 实时时钟(RTC) 实时时钟寄存器的地址0030h~0037h分别对应秒、分、时、日、月、年、星期和百分秒,并采用BCD码表示。通过启动一条读命令并确定相应的地址,即可读取时间信息。因为时钟是连续运行的,而每次读操作都需要一定的时间,这就有可能在读操作过程中使时间发生改变。本器件是由读命令将时间锁存在分立的锁存器中,因而可以避免读操作过程中时间发生变化。当一次读出并不是由读操作引起时,系统将发出报警。 可以通过向RTC寄存器中写入数据来设定时间和日期。通过一次不完全连续的写操作可避免改变当前时间,在RTC数据输入字节之前的ACK位时,时钟的下降沿会将当前的时间值装载到分立的缓冲器中,以使时钟继续运行。而此时新的串行输入数据将取代缓冲器的值。当有效的写操作结束后,系统产生停止位时,这个新值才被装载到RTC寄存器中。向RTC写入单个字节并不对其它字节的数据产生影响。 当X1288在VCC和VBACK都失效以后,即使再次上电后,其时钟也将停止增加,直到在时钟寄存器中进行至少一个字节的写操作以后。 读出和设定时钟应注意:百分秒寄存器(SSEC)是只读的;小时寄存器(HR)中的MIL位是12/24时制选择位“1”为24时制,“0”为12时制,H21位是AM/PM标志位“1”代表PM,“0”代表AM;星期中的七天只用三位(DY0~2)来计数,其值在0~6之间循环,数字所代表星期中的哪一天可由设计者决定,缺省值为0。 3.3 控制寄存器 表2所示是4个控制寄存器的命令字列表,其中的DTR是数字化微调寄存器,它的作用是调整每秒的计数值和ppm误差,以便在长时间内获得更好的计时精度。DTR2是符号位,“1”为正补偿,“0”为负补偿;DTR1、DTR0可分别提供10ppm、20ppm的补偿。由DTR0~DTR2三位可表示-30ppm~+30ppm的补偿范围。 表2 控制寄存器 地址名称 7 6 5 4 3 2 1 0 缺省值 0013h DTR 0 0 0 0 0 DTR2 DTR1 DTR0 00h 0012h ATR 0 0 ATR5 ATR4 ATR3 ATR2 ATR1 ATR0 00h 0011h INT IM AL1E AL0E FO1 FO0 只读只读只读 00h 0010h BL BP2 BP1 BP0 WD1 WD0 只读只读只读 00h ATR寄存器用来微调X1和X2之间的片内负载电容,其范围从+116ppm~-37ppm,具体电容值的大小可由下式计算: CART=[(ATR的十进制值)%26;#215;0.25]+11.0pF 实际上,数字和模拟结合起来的微调范围可高达+146ppm。BL中的BP2~BP0位是块保护位,这些位可用来决定对E2 PROM阵列中8个保护段的某些具体段提供写保护(参见表3所列);WD1、WD0用来设置看门狗时限。 表3 块保护位与E2PROM阵列保护区 BP2 BP1 BP0 被保护的地址阵列中被锁部分 0 0 0 无无 0 0 1 6000h~7FFFh 高端1/4 0 1 0 4000h~7FFFh 高端1/2 0 1 1 0000h~7FFFh 全阵列 1 0 0 0000h~007Fh 第一页 1 0 1 0000h~00FFh 第二页 1 1 0 0000h~01FFh 前四页 1 1 1 0000h~03FFh 前八页INT是中断控制和频率输出寄存器,其中AL1E和AL0E是报警中断信号(IRQ)的输出使能位,这两位分别结合SR中的AL1和AL0,可用来指示报警是否发生;IM是脉冲中断方式控制位,当报警条件匹配时,IRQ将输出一个单次脉冲,若IM设为“1”,则脉冲输出是周期性的;FO1和FO0是频率输出控制位,主要用于选择内部振荡器的三种分频输出之一并在PHZ端输出。 3.4 报警寄存器 X1288有两个报警寄存器,地址分别在0000h~0007h和0008h~000Fh,通过这两个报警寄存器可设置两个报警时间。报警寄存器的内容与RTC很类似,不同之处在于其最高位被设置为使能位,而取消了HR中的12/24时制控制位。使能位规定了哪些寄存器可用来与实时时钟寄存器作比较。通过设置EMOn位并结合其它使能位和特定的报警时间,用户可以建立在每年的同一时间(精确到秒)触发一次报警。用户可以通过轮询AL0和AL1软标志来确定一次报警的发生,或者使能IRQ输出作为一个硬件报警标志。当所有的使能位都被设置成“0”时,整个系统无报警。 4 I2C总线数据传送方式 X1288在应用时一般作为从器件通过串行I2C总线来实现与主控制器的通信。其中,SDA用来接收、发送数据;SCL用于接收产生的同步脉冲,当SCL为低时,SDA上的数据发生变化,为高时表明可以接收SDA上的数据。 I2C总线在SCL为高且SDA线上出现一个下降沿时启动;而在SCL为高且SDA线上出现一个上升沿时停止。启动和停止信号都由主控器产生,这样,总线上带有I2C接口的器件就能很容易地检测到这些信号。但对于不具备这种接口的单片机来说,为了能够准确地检测到这些信号,必须保证在总线的一个时钟周期内对SDA线至少进行两次采样。 I2C总线上的应答信号是用于表明数据传输成功的信号。当发送的设备发送了启动位和8位数据之后,在第9个SCL有效时,接收设备将使SDA为低以产生有效的应答信号,该信号可用来说明数据已成功接收。当接收设备发送了表明数据已成功接收的应答信号之后,发送设备可选择继续发送数据或发送停止位以结束发送,如发送设备没有收到接收设备的应答信号,则说明发送失败,此时应重发。 一般情况下,I2C总线上可同时接多个设备,每个器件都有唯一的地址。X1288有两个从设备地址(从地址的高4位):其中1010为访问E2PROM阵列;1101为访问CCR。从地址的3~1位为器件的选择位,它们规定为111,最低位R/W用于定义此操作是读或写。I2C总线上传送的每一个字节为8位,而启动一次I2C总线后传输的字节数可以是一个,也可以是多个。每传送一个字节后,都必须跟随一个应答位,并且先发送的数据位为最高位。在全部数据传送结束后主控制器发送终止信号。X1288有两种写操作方式,分别为单字节写或页面写。图4所示是对X1288完成一个字节的写操作时序,由图可见,写操作共由四个字节组成,其中包括一个从地址字节、一个要访问的地址字(2字节)、一个字节的操作数。采用页面写时,它将以和单字节写操作相同的方式启动,但在第一个字节传送之后不结束写周期,主机可发送多于63个字节到存储器阵列和多于7个字节到CCR。X1288有三种基本的读操作方式:当前地址读、随机读和序列读。


5 应用实例 在多用户电子电能表的设计中,X1288的实时时钟可保证系统时间的正确性,并为多费率的电价计量等提供准确的时间;当由于外部干扰而产生死循环时,单片机能自动复位;32k字节的E2PROM则可用于保证所有用户的电能累积值、预交电费余额和异常故障等重要数据的可靠保存和灵活更改;当系统掉电时,系统中的电源管理系统将会自动转为锂离子电池供电方式。 X1288与单片机的接线如图5所示, 由于AT89C52本身没有带I2C总线接口,设计中使用P1.6/ P1.7作为I2C总线接口的SCL/SDA。本电路为单主系统,单片机只对X1288进行读写操作,因此可通过对I2C总线典型信号的时序模拟编制应用程序。文献2中提供了一套I2C总线数据模拟传送的通用软件包,可方便地作为读写子程序来设计系统软件,其中包括基本的启动、停止、发送应答位、发送非应答位的子程序,同时还有应答位检查、发送一个字节数据、接收一个字节数据、发送n个字节数据和接收n个字节数据等子程序。 

6 结束语 X1288作为微处理器的外围器件,它把最基本的功能组合在了一起,因而具有较高的性价比,可大大降低电路板的空间和功耗,因此,是系统可靠运行的关键器件。

关键字:I2C  X1288  电能表 编辑:探路者 引用地址:I2C串行芯片X1288及其在电子电能表中的应用

上一篇:MCS-51系统中断优先级的软扩展
下一篇:ATmega103单片机在跳频系统数字信号处理中的应用

推荐阅读最新更新时间:2023-10-12 22:40

Linux下I2C总线EEPROM驱动程序设计方法
  1 引言   I2C (Inter-Integrated Circuit1 总线 是一种由Philips公司开发的2线式串行总线,用于连接微 控制器 及其外围设备。它是同步 通信 的一种特殊形式,具有 接口 线少、控制方式简单、器件封装形式小、通信速率较高等优点。在主从通信中,可有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。笔者在开发基于MPC8250的 嵌入式 Linux系统的过程中发现I2C总线在 嵌入式系统 中应用广泛,I2C总线控制器的类型比较多,对系统提供的操作接口差别也很大。与I2C总线相连的从设备主要有微控制器、EEPROM、实时 时钟 、A/D转换器等.MPC8250处理器正是通过内部的
[电源管理]
Linux下<font color='red'>I2C</font>总线EEPROM驱动程序设计方法
STM32通过I2C与BMP280通信
BMP280气压传感器(Digital Pressure sensor) 测试流程图: 项目中使用的是I2C通信,BMP280的作为slave的地址要确认好,它的地址根据硬件电路SDO接什么脚来决定: 1.BMP280的测试启动流程(注意它的datasheet中的status寄存器): (1)读取BMP280的id,其值等于0x58。 (2)把补偿寄存器的值都读出来。 (3)对BMP280进行reset。 (4)对BMP280的数据采集精度,模式。。。等进行配置。 (5)给点延时,等待数据采集完毕放入寄存器中。 (6)读取寄存器中的采集数据。 注意:BMP280对温度和气压的测量是通过一堆补偿数据然后根据自己的算法算
[单片机]
单片机 I2C 和 EEPROM 的综合编程
电视频道记忆功能,交通灯倒计时时间的设定,户外 LED 广告的记忆功能,都有可能用到 EEPROM 这类存储器件。这类器件的优势是存储的数据不仅可以改变,而且掉电后数据保存不丢失,因此大量应用在各种电子产品上。 我们这节课的例程,有点类似广告屏。上电后,1602 的第一行显示 EEPROM 从 0x20 地址开始的16个字符,第二行显示 EERPOM 从 0x40 开始的16个字符。我们可以通过 UART 串口通信来改变 EEPROM 内部的这个数据,并且同时也改变了 1602 显示的内容,下次上电的时候,直接会显示我们更新过的内容。 这个程序所有的相关内容,前面都已经讲过了。但是这个程序体现在了一个综合应用能力上。这个程序用到了
[单片机]
实用的单片机模拟I2C总线控制EEPROM读写程序
之前写的EEPROM程序虽然能够软仿成功,但烧到单片机里的时候却不能用,无疑是时序的问题,今天修正了时序,总算硬仿成功了。对照上次的程序可以发现就是添加了头函数: intrins.h ,这样就可以通过 _nop_() 指令较为准确的控制时序。 上次那个问题依然没有解决:就是接收缓冲区的数据是从readbuf 开始的,以这个程序为例: readbuf 中存放0x96 readbuf 中存放0x84 readbuf 中存放0xd5 readbuf 中存放0x63 readbuf 中存放0x7c readbuf 中存放0x8c 其实我是想把收到的数据存放在readbuf ~ 中的,我也不知道为
[单片机]
凌力尔特推出可热插拔的 I2C 隔离器
凌力尔特公司 (Linear Technology Corporation) 推出可热插拔的 I2C 隔离器 LTC4310,该器件提供两条 I2C 总线之间的双向通信,而两个 I2C 总线之间的地是相互隔离的。I2C 隔离传统上一直是用多达 4 个光耦合器以及特殊的缓冲器来实现,这是一种昂贵、解决方案尺寸大和相对复杂的方法。LTC4310 简化了 I2C 隔离,它通过对 SDA 和 SCL 信号编码并将其扩展到 4 个单向通道中,为通过隔离势垒发送做好准备,然后利用第二个 LTC4310 对其进行解码并重新组合,在完成所有这一切的同时还能保持 I2C 信号的完整性。LTC4310 允许利用一个以太网变压器来对 4 个数字发
[模拟电子]
凌力尔特推出可热插拔的 <font color='red'>I2C</font> 隔离器
i2c虚拟总线通用软件包
// ****************************************************************// //------------- 虚拟 i2c软件包头文件 iic.h -----------------------// //****************************************************************// sbit SDA=P1^7; //定义IIC数据线// sbit SCL=P1^6; //定义IIC时钟线// #define uchar unsigned char
[单片机]
STM32F1的I2C模块协议简介
I2C是一种多主从的串行通讯协议。STM32F1的I2C模块支持标速(最高100kHz)和高速(最高400kHz)两种工作模式。 一、I2C协议简介 标准的IIC接口有数据线SDA、时钟线SCL两条总线,只能工作于半双工模式,在设计中,对总线的负载电容有一定的要求,具体请查阅元件的技术手册确定。 IIC的通讯时序如图,通讯电平为正逻辑: ※数据发送的起始和终止信号为:SCL为高时, 起始:SDA下降沿 终止:SDA上升沿 ※当总线空闲时,SDA和SCL均为高电平,总线需要外接上拉电阻,阻值5-10k。 ※每次发送一字节(8bits)信号,MSB高位先发。 二、I2C通讯时序(使用时以具体被控芯片手册为准) 通讯时序(主机发
[单片机]
STM32F1的<font color='red'>I2C</font>模块协议简介
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved