安防之家讯:特性
LPC2000系列微控制器具有一到两个标准的I2C接口,它具有如下特性:
可配置为主机、从机或主/从机;
可编程时钟可实现通讯速率控制;
主机从机之间双向数据 传输;
同时发送的主机之间进行仲裁,避免了总线数据的冲突。
I2C简介
I2C接口是Philips推出的一种串行总线方式,用于IC器件之间的通信。它通过SDA(串行数据线)和SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并通过软件寻址识别每个器件,而不需要片选线。
I2C接口的标准传输速率为100Kbit/s,最高传输速率可达400Kbit/s。
I2C简介——电气连接
I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻Rp。 I2C简介——总线时序
在数据传送过程中,必须确认数据传送的开始和结束,这通过起始和结束信号识别。
发送起始信号后传送的第一字节数据具有特别的意义,其中前七位为从机地址,最后一位为读写方向位(0表示写,1表示读)。
I2C总线数据传送时,每传送一个字节数据后都必须有应答信号(A)。主控器接收数据时,如果要结束通信时,将在停止位之前发送非应答信号( )。 LPC2000在I2C通信中可以配置为主控器也可以作为被控器,那么它就具有4种操作模式:主发送模式、主接收模式、从发送模式和从接收模式。 寄存器描述
I2C接口包含7个寄存器。
寄存器描述——I2C控制置位寄存器
I2CONSET寄存器用于置位I2C通信的相关标志位,该寄存器只能对某位置位,而不能清零,清零通过I2CONCLR寄存器完成。
SI:为I2C中断标志。
当进入25种可能的I2C状态中的任何一个后,该位置位。通常,I2C中断只在空闲的从器件中用于指示一个起始条件,或在一个空闲的主器件(如果它等待使用I2C总线)中指示一个停止条件。向I2CONCLR寄存器中的SIC位写入1使SI位清零。
STO:为停止标志。
当STO为1时,在主模式中,向I2C总线发送一个停止条件或在从模式中使总线从错误状态中恢复。当总线检测到停止条件时,STO自动清零。
在从模式中,置位STO位可从错误状态中恢复。这种情况下不向总线发送停止条件。硬件的表现就好像是接收到一个停止条件并切换到不可寻址的从接收模式。STO标志由硬件自动清零。
STA:为起始标志。
当STA=1时,I2C接口进入主模式并发送一个起始条件,如果已经处于主模式,则发送一个重复起始条件。
STA可在任何时候置位,当I2C接口处于可寻址的从模式时,STA也可以置位。
I2EN:为I2C接口使能。
当该位置位时,使能I2C接口。向I2CONCLR寄存器中的I2ENC位写入1将使I2EN位清零。当I2EN位为0时,I2C功能被禁止。
寄存器描述——I2C控制清零寄存器
I2CONCLR寄存器与I2CONSET寄存器的功能相反,它用于清零I2C通信的相关标志位,该寄存器只能对某位清零,而不能置位。
寄存器描述——I2C状态寄存器
I2STAT寄存器包含了I2C接口的状态代码,它是一个只读寄存器。一共有26种可能存在的状态代码。当代码为0xF8时,无可用的相关信息,SI位不会置位。所有其它25种状态代码都对应一个已定义的I2C状态。当进入其中一种状态时,SI位将置位。
I2C处理程序就是根据该寄存器反映的状态来进行相应的处理。
寄存器描述——I2C数据寄存器
I2DAT寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU可对其进行读写。该寄存器只能在SI置位时访问。在SI置位期间,I2DAT中的数据保持稳定。I2DAT中的数据移位总是从右至左进行:第一个发送的位是MSB(位7),在接收字节时,第一个接收到的位存放在I2DAT的MSB。
寄存器描述——I2C从地址寄存器
I2ADR寄存器只能在I2C设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR的LSB为通用调用位。当该位置位时,通用调用位(0x00)被识别(即可以对广播地址0x00作出响应)。
寄存器描述——I2C占空比寄存器
I2SCLH、I2SCLL寄存器用于控制I2C通信的波特率。其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的PCLK周期数。那么位频率(即总线速率)由下面的公式得出:
位频率 = Fpclk / (I2SCLH + I2SCLL)
使用I2C接口的注意要点
I2C接口的引脚为开漏输出,必须在I2C总线上接上拉电阻。通信速率越快,电阻值越小;
总线上各器件的地址不能冲突;
编程时需要仔细处理每个状态,注意各状态之间的转移关系。
I2C应用示例
LPC2000对于I2C通信的处理是基于状态标志进行的,不同的模式之间具有相通的分析方法,这里仅介绍常用的主发送和主接收模式。
I2C应用示例
——主模式设置
I2C应用示例
——主机发送
LPC2000在该模式下作为主控器,向从机发送数据。数据流向如下图所示:
主模式数据发送的时序格式 S:起始位,用于指示传输的开始。
从器件地址:第一字节的前七位包含接收器件的从地址,第8位表示为写操作。
A:每发送完一个字节数据,接收数据的器件就发送一个应答位
P:结束位,用于指示传输的结束。
主模式数据发送的时序格式
通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;
在起始信号发送结束后,SI置位。将从机地址和写操作位装入I2DAT,然后清零SI,将第一字节数据发出;
当从机地址和W位发送结束并收到应答位(A)后,SI位再次置位。此时将要发送的数据装入I2DAT,开始发送数据;
在数据正确发送后,SI置位。此时如果要结束本次操作,那么置位STO位,发送结束信号。
在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。 I2C应用示例
——主机接收
LPC2000在该模式下作为主控器,接收从机发出的数据。数据流向如下图所示:
主模式数据接收的时序格式 S:起始位,用于指示传输的开始。
从器件地址:第一字节的前七位包含接收器件的从地址,第8位为1,表示读操作。
A:每接收完一个字节数据,就发送一个应答位。在接收最后一个字节数据后,发送非应答位,通知从机停止发送数据。
每接收完一个字节数据,就发送一个应答位。在接收最后一个字节数据后,发送非应答位,通知从机停止发送数据。
P:结束位,用于指示传输的结束。
主模式数据接收的时序格式
通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;
在起始信号发送结束后,SI置位。将从机地址和读操作位装入I2DAT,然后清零SI,将第一字节数据发出;
当从机地址和R位发送结束并收到应答位(A)后,SI位再次置位。此时设置AA位,然后清零SI位,开始接收数据;
每接收到一字节数据,SI位再次置位,此时可以再次接收数据,或者置位STO结束总线。
主模式数据接收的时序格式
在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/