《电子技术应用》
您所在的位置:首页 > 电源技术 > 业界动态 > CAT1025在I2C总线控制下的应用

CAT1025在I2C总线控制下的应用

2009-05-21
作者:单承刚

    摘 要:一种具有I2C串行总线的微控制器系统存储器和电源监控的完全解决方案。结合CAT1025芯片给出了LPC2103微控制器系统的电源监控复位电路,介绍了基于I2C总线的2Kb EEPROM存储器的读写过程,给出了相关应用程序流程图与部分软件程序。
    关键词:I2C总线;电源监控;CAT1025;EEPROM

 

    I2C BUS(Inter Integrated Circuit BUS)是NXP半导体公司推出的芯片间串行传输总线,它以2根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。该总线由1条串行时钟线SCL和1条串行数据线SDA组成,在同一组I2C总线上,可以挂接多个CPU及被控芯片,CPU 既可以作为主器件, 控制I2C总线的工作模式, 也可以作为从器件, 在其他CPU的控制下发送或接收数据[1]
1 LPC2103中的I2C总线接口
    LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,内部集成了两路高速I2C总线,与I2C总线接口有关的专用寄存器有:(1)I2CONSET控制置位寄存器。当向该寄存器写入1时,I2C控制寄存器中相应位置位,写0到I2C控制寄存器的相应位没有影响;(2)I2STAT状态寄存器。在I2C操作中,该寄存器提供详细的状态码使软件确定所需的下一步操作; (3)I2DAT数据寄存器。发送接收的数据都可从该寄存器写入或读取; (4)I2ADR从地址寄存器。包含从机模式下I2C接口操作的7位从地址; (5)I2SCLH占空比寄存器高半字和I2SCLL占空比寄存器低半字。分别用来确定I2C时钟的高时间和低时间; (6)I2CONCLR控制清零寄存器。当向该寄存器中的位写1时,I2C控制寄存器中相应位被清零。
1.1 I2C电气连接
    I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻Rp。总线速率越高,总线上拉电阻就越小,100Kb/s总线速率通常使用5.1 KΩ的上拉电阻[2],如图1 所示。

 


1.2 I2C总线时序
    I2C总线上每传输1个数据位必须产生1个时钟脉冲。SDA线上的数据必须在时钟线SCL的高电平期间保持稳定,数据线的电平状态只有在SCL线的时钟信号为低电平时才能改变,如图2所示。

 

 

    其中数据发送起始信号和停止信号较为特殊,在SCL为高电平时,SDA从高电平向低电平切换表示起始信号;在SCL为高电平时,SDA由低电平向高电平切换表示停止信号。起始和停止信号一般由主机产生。起始信号作为一次传送的开始,在起始信号后总线被认为处于忙状态。停止信号作为一次传送的结束,在停止信号的某段时间后,总线被认为再次处于空闲状态。重复起始信号既作为上次传送的结束,也作为下次传送的开始。如图3 所示[3]

 

 

    发送起始信号后传送的第1字节数据具有特别的意义,其中前7位为从机地址,最后1位为读写方向位(0表示写,1表示读)。结合本系统,为实现I2C总线方式下对CAT1025的读写,发送起始信号第1字节前7位为从器件CAT1025的地址,如图4所示。

 

 

    I2C总线数据传送时,每传送1个字节数据后都必须有应答信号(A)。主控器接收数据,如果要结束通信时,将在停止位之前发送非应答信号,如图5所示。

 

 

    LPC2103在I2C通信中可以配置为主控器也可以作为被控器,它具有4种操作模式:主发送模式、主接收模式、从发送模式和从接收模式。在本系统中为了实现对CAT1025内EEPROM存储器读写,采用了主发送模式和主接收模式。
2 与CAT1025的I2C总线配置
    CAT1025是基于微控制器系统的存储器和电源监控的完全解决方案。它利用低功耗CMOS技术将2Kb的串行EEPROM存储器和带掉电保护的系统电源监控电路集成在一起。存储器采用400 kHz的I2C总线接口。由于ARM芯片的高速、低功耗和低工作电压的工作特性,导致其噪声容限低,对电源纹波、瞬态响应性能、时钟源的稳定性和电源监控的可靠性等诸多方面有很高的要求。采用I2C接口的专用电源监控复位芯片CAT1025设计复位和I2C电路,保证了系统可靠性,其电路原理如图6所示[4-5]:

 

 

    CAT1025包含1个精确的Vcc监控测电路和2个开漏输出:RESET和。当Vcc低于复位阈值电压时,RESET引脚将变为高电平,将变为低电平。CAT1025还含有1个写保护输入(WP),如果WP连接高电平,则写操作被禁止。LPC2103的P0.2和P0.3口若工作在第二功能模式下为I2C 0路的时钟线和数据线,分别与CAT1025的SCL与SDA相连。Vcc电压监控电路提供了硬件数据保护功能,防止在Vcc降到低于复位阈值电压或上电时Vcc上升到复位阈值电压之前对存储器执行写操作。I2C总线对CAT1025进行读写操作的过程介绍如下。
2.1 I2C接口的配置
    图7 为I2C总线操作初始化流程图。

 

 

    使用LPC2103的I2C 0路总线实现对CAT1025的读写。设置P0.2和P0.3口工作在第二功能模式下:
    PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; /* P0.2:IICSCL, P0.3:IICSDA*/
    为了控制I2C通信的波特率,需要设置 I2SCLH、I2SCLL寄存器。其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的PCLK周期数。
    I2SCLH = (Fpclk / uiFi2c + 1)  / 2; /* 设定I2C时钟*/
    I2SCLL  = (Fpclk / uiFi2c) / 2;
    对I2CONCLR、I2CONSET寄存器进行设置,清零I2C通信的相关标志位,使能I2C接口功能。
    I2CONCLR = 0x2C;
    I2CONSET = 0x40;                                      /* 使能主I2C */
    I2C总线采用中断方式来检测每个字节的传送是否成功, 因此需要定义中断处理程序, 并且使能中断。设中断处理程序入口地址为IRQ_I2C, 则程序语句为:
    /*  设置I2C中断 */
    VICIntSelect = 0x00000000;  /* 设置所有通道为IRQ中断 */
    VICVectCntl0 = (0x20 | 0x09);  /* I2C通道分配最高优先级  */
    VICVectAddr0 = (int32)IRQ_I2C;/* 设置I2C中断向量 */
    VICIntEnable = 1 <<9;       /* 使能I2C中断 */
2.2 软件设计[6]
2.2.1 主模式下向CAT1025发送数据程序流程
    /* 从起始地址0x00写入10个数据 */
    I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, uiDataBuf, 10);
    I2C_WriteNByte实现了向CAT1025器件起始地址0x00处写入10个数据。ONE_BYTE_SUBA表示单字节地址,0x00表示从器件CAT1025起始地址,uiDataBuf表示写入数据缓冲区指针,10表示写入数据的个数。图8为写入过程程序流程图。

 


2.2.2 主模式下从CAT1025读取数据程序流程
    /* 读回刚才写入的数据 */
    I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x00, uiDataBuf, 10);
    I2C_ReadNByte实现了向CAT1025器件起始地址0x00处依次读入10个数据。ONE_BYTE_SUBA表示单字节地址,0x00表示从器件CAT1025起始地址,uiDataBuf,表示读入数据缓冲区指针,10表示要读入数据的个数。图9为读入过程程序流程图。

 


2.2.3 I2C中断处理过程
    对于硬件I2C接口,通常都使用中断的方式进行操作。当I2C的状态发生变化时,就会产生中断,因此,发生I2C中断时,必须要读取I2C状态寄存器,根据当前的状态采取相应的措施。 主模式下I2C总线读写操作步骤:
    (1)通过软件置位STA进入主发送、接收模式,I2C逻辑在总线空闲后即发送一个起始条件。
    (2)当发送完起始条件后,SI会置位,此时I2STAT中的状态代码为08H,该状态代码用于中断服务程序的处理。
    (3)把从地址和读写操作位装入I2DAT(数据寄存器),然后清零SI位,开始发送从地址和R/W位。
    (4)当从地址和R/W位已发送且接收到应答位之后,SI位再次置位,根据I2STAT寄存器中的状态码分别执行接收、发送数据动作。
    基于I2C总线的CAT1025存储器和电源解决方案已经广泛应用在各种微控制器系统中。本文给出的LPC2103微控制器系统的电源监控复位电路,保证了系统的高可靠性。利用I2C总线方式对CAT1025内2Kb EEPROM存储器进行读写准确性高、速度快,可以满足许多具有存储性能的系统掉电后数据不丢失的要求。
参考文献
[1] 广州周立功单片机发展有限公司.EasyARM2103教材.2007:172-190.
[2] 梁建华,肖伸平.基于S3C44B0X 的I2C 总线设计.微计算机信息,2006(5- 2): 143- 144.
[3] 范应辉,张雷,阳富民. 基于Linnx的I2C总线驱动研究与实现[J].计算机工程与设计,2007:28-16:3953-3956.
[4] 王立平,王新梅. Linux环境下基于I2C 总线的EEPROM 驱动程序.国外电子元器件,2007(1): 4-7.
[5] 姚亚峰, 陈建文, 黄载禄.嵌入式系统中EEPROM 接口及控制电路设计. 半导体技术,2007,32(4):328-331.
[6] 徐柳茂,黄永强,蒋念东,等.嵌入式Linux中I2C驱动程序的应用设计[J]. 国外电子元器件,2007(2): 21-25.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。