分类:
2009-04-11 16:57:30
(2)I2C总线简介
aaaaI2C总线(Inter IC BUS—集成电路芯片间的串行总线)是一种由Philips公司推出的两线式串行总线,用于连接微控制器及其外围设备,是近年来在微电子通信控制领域广泛采用的一种新型总线标准,能用于替代标准的并行总线。
aaaaI2C总线产生于80年代,它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。目前有很多半导体集成电路上都集成了I2C接口,很多外围器件如SRAM、EEPROM、I/O口、ADC/DAC等也提供I2C接口。即使无I2C总线接口的器件(如80C51),只要通过与具有I2C结构的I/O接口电路连接,也能成为I2C总线扩展器件。带有I2C接口的单片机有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。图6-34是I2C总线的外围扩展示意图。它给出了单片机应用系统中最常使用的I2C总线外围通用器件。
aaaa图6-34 I2C总线的外围扩展示意图
(3) I2C总线的性能特点
I2C总线的性能特点可体现为以下几方面:
aaaa这是I2C总线最主要的优点。由于接口就在组件上,因此I2C总线占用的空间非常小,减少了电路板的层数和电路连线,简化了芯片管脚的数量,并且不需要并行总线接口,因而降低了互联成本。
aaaaI2C总线的长度可达25英尺(7、8米),标准I2C总线传输速率可以到100Kbps,通过使用7位地址码,就能支持128个设备。加强型I2C总线用了10位地址码(能够支持1024个设备),快速模式传输速度达到400Kbps;高速模式传输速度最高有3.4Mbps。
2. I2C总线原理
(1)I2C总线的构成
aaaaI2C总线是由数据线SDA和时钟信号SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址。
aaaa在信息的传输过程中,I2C总线上并接的每一模块电路既可充当主控器(或被控器),又能作为发送器(或接收器)使用,这取决于它所要完成的功能。
aaaaCPU发出的控制信号分为地址码和控制量两部分,地址码用来选地址,即接通需要控制的电路,确定控制的种类,类似于电话的拨号;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
(2) I2C总线的信号类型
aaaaI2C总线在传送数据过程中共有三种信号类型,它们分别是:开始信号、结束信号和应答信号。
主控器与被控器之间应答信号的联系过程如下:
aaaa接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,可以判断为受控单元出现故障。
(3) I2C总线上一次典型的工作流程
(4) I2C总线的基本操作
aaaaI2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。参见图6-35。
图6-35 串行总线上的数据传送顺序
⑴从器件的控制地址
aaaa在起始条件之后,必须是从器件的控制地址,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位是片选,最后一位是读写位,当该位为1时表示读操作,为0时表示写操作。如图6-36 所示。
图6-36 从器件的地址配置SLA
⑵写操作
aaaa写操作分为字节写和页面写两种,在页面写方式下要根据芯片的一次装载的字节不同而有所不同。关于页面写的地址、应答和数据传送的时序参见图6-37。灰色部分由80C51发送,白色部分由24CXX发送。
说明:1.其中S表示开始信号,A是应答信号,P是停止信号。
2.SLAw是从器件的控制地址(最后一位为0,表示写操作);
3.SADR是要写入页面的首地址。
图6-37 页面写
⑶读操作
aaaa读操作有三种基本情况:当前地址读、随机读和顺序读。图6-38给出的是顺序读的时序图。
aaaa应当注意的是:最后一个读操作的第9个时钟周期没有应答信号。原因是为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。
说明:1.其中S表示开始信号,A是应答信号,P是停止信号。
2.SLAw是从器件的控制地址(最后一位为0,表示写操作);
3.SLAR是从器件的控制地址(最后一位为1,表示读操作);
4.SADR是读出单元的首地址。
aaaaaaaaaaaa图6-38 顺序读
3. I2C总线应用实例
(1) 常用I2C芯片简介
aaaa近年来,基于I2C总线的各种串行EEPROM的应用日益增多,如CATALYST公司生产的24CXX系列芯片就是一个典型代表。该系列产品主要有24C02、24C04、24C08、24C16和24C32,容量分别对应于2~32KB。它们一般具有并口EEPROM的特点,但以串行方式传送数据,一般仅占用2~4条I/O线,价格低廉。
图6-39 是DIP封装的24C02与80C51的接口方案。其中A0、A1、A2是芯片地址线,单片使用时接地;SCL是串行移位时钟端;SDA是串行数据或地址端,CPU通过SDA访问芯片;WP是写保护端,接高电平时芯片只能读。
(2) 应用实例—80C51对X24C04的单字节写操作
aaaaX24C04是XICOR公司的CMOS结构4096位(512Byte×8位)串行EEPROM,16字节页面写。与80C51单片机接口如图6-40所示。SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极开路输出“线或”(wire-Ored)连接,上拉电阻的选择可参考X24C04的数据手册。下面是通过I2C接口对X24C04进行单字节写操作的例程(设输入参数为A)。流程图及源程序如下:
MOV R7,#08H ;1字节8位
SENDA: CLR P3.2 ;
RLC A ;左移一位
MOV P3.3,C ;写一位
SETB P3.2
DJNZ R7,SENDA ;写完8个字节?
CLR P3.2 ;应答信号
SETB P3.3
SETB P3.2
RET
(3) 使用须知
aaaa在I2C总线的应用中应注意这样几个问题: