第11章单片机与I2C总线芯片的接口 重点:2C通信协议、常见芯片的使用 难点:I2C通信协议 学时:4 11.1℃总线的基本概念 1.C总线概述 IC(Inter-Integrated Circuit)总线是由PHILIPS公司开发的2线式串行 总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用 的一种总线标准。它是同步通信的一种特殊形式,具有口线少,控制方式 简单,器件封装小,通信速率高等优点,被列入世界性的工业标准。现在 有许多外围器件与微控制器的接口采用℃串行总线。 2C总线协议定义如下: (1)只有在总线非忙时才被允许进行数据传送。 (2)在数据传送时,当时钟线为高电平,数据线必须为固定状态,不 允许有跳变。因为时钟线为高电平时,数据线的任何电平变化将被当作总 线的启动或停止条件。 2.C总线的电气特性与结构 I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接 收数据。采用2C总线的器件均并联在总线上,每个器件内部都有2C接 口电路,用于实现与2C总线的连接,连接方式如图所示
一般具有I2C总线的器件其SDA和SCL引脚都是漏极开路(或集电极 开路)输出结构。因此实际使用时,SDA和SCL信号线都必须要加上拉电 阻Rp。上拉电阻一般取值3一1OK2。这种开漏结构使得当总线空闲时,这 两条信号线都保持高电平,几乎不消耗电流,电气兼容性好,上拉电阻接 5V电源就能与5V逻辑器件接口,上拉电阻接3V电源又能与3V逻辑器件 接口。因为是开漏结构,所以不同器件的SDA与SDA之间、SCL与SCL 之间可以直接相连,不需要额外的转换电路。 3.2C总线数据传输时序 SDA- SCL- 开始 结 (2)I2C总线上的数据传输格式 I2C总线上的数据传输必须遵循总线规范。主CPU发出起始信号表明 一次数据传送的开始,其后为寻址字节,寻址字节由高7位地址和一位方 向位组成,方向位表明主CPU与从器件之间的数据传送方向,该位为“0” 时表明CPU对从器件进行写操作,为“1”时是读操作。寻址字节后是按 指定地址读、写操作的数据字节与应答位。主CPU发出寻址信号后,地址 与自己相符的从器件便会产生一个应答信号。数据字节的后面也跟随一个 应答信号,应答信号在第9个时钟位上出现。当从器件输出低电平时为应 答信号,输出高平为非应答信号,如图所示。 主u时特L 从越件数甜输出
SDA线上的数据在时钟信号SCL高位时必须稳定。数据线上高低状态 只有当SCL线的时钟信号为低电平时才可变换,如图所示。 D 数据稳定 数稳定 数据变化 (3)I2C总线的数据传送时序 2C总线在起始位后的首字节决定哪个被控器被主控器选择。当主控器 输出一个地址时,系统中的每一器件都将起始位后的前七位地址和自己的 地址进行比较,如果相同,该器件认为自己被主控器寻址。该器件是作为 被控接收器还是被控发送器则取决于第8位(R/W位)。2C总线数据传输 时序如图11.5所示。 SDA- nao@e@四o29ea四f 一地址字节一十一数据字节…一 4.器件的寻址字节 在2C总线标准中,寻址字节由7位地址和1位方向位组成,从器件 的地址完全由引脚电平和器件类型决定,即上述的器件地址(高4位D7D4) 和引脚地址(低3位D3D1)。I2C总线中的外围芯片的器件地址由各厂家 按统一的标准制定,表为常用2C总线芯片的器件地址和引脚地址。 种类 器件地脚地 AT24C EEPROM 1010 A2A1 AT24C EEPROM 1010 A2A1 PCF85 实时时钟 1010 A0 PCF85 O扩展 0100 A2AI
PCF85 AD、DA 1001 A2A1 AD741 温度传感器 1001 A2A1 LM75 湿度传感器 PCF85 安时时钟 1010 A0 LED取动 0111 PCF85 LCD驭动 011 A0 X24C2E2PROM+看门豹1010 无 11.2虚拟I2C总线软件包 由于2C总线提供了较完善的总线协议、简单的串行连接方式,并提 供了总线操作的状态处理软件包,因而得到了广泛的应用。一些先进的微 处理器,特别是具有SOC特征的片上系统一般都将2C接口作为标准外设 接口,这就大大减轻了系统的设计复杂度和难度。对于一些不带标准2C接 口的微处理器,可以采用普通O口来模拟2C总线。北京航天航空大学的 何立民教授和周立功单片机公司都提出了虚拟2C总线软件包,只需两根 普通VO口线就可随时扩展I2C总线外围器件,大大方便了程序设计和编程 11.2.1虚拟12C总线汇编软件包 此软件包是周立功单片机公司提出的,用在单主2C总线上,硬件接 口是SDA,SCL,使用MCU的IVO口来模拟SDA、SCL总线。设计有/无 子地址的子程序是根据2C器件的特点,目的在于将地址和数据彻底分开。 软件包的函数如下。 IRDBYTE (无子地址)读单字节数据 (现行地址读) IWRBYTE (无子地址)写单字节数据 (现行地址写) IRDNBYTE(有子地址)读N字节数据 IWRNBYTE (有子地址)写N字节数据 (1)现行地址读/写即专指无子地址的器件,不给定子地址的读/写操
作。 (2)平台占用内部资源:R0,R1,R2,R3,ACC,Cy。 (3)使用前须定义变量:SLA器件从地址,SUBA器件子地址, NUMBYTE读/写的字节数,位变量ACK。 (4)使用前须定义常量:SDA、SCL总线位,MTD发送数据缓冲 区首址,MRD接收数据缓冲区首址。 (5)※子程序出口参数ACK为0时表示从器件无应答。 11.2.2虚拟2C总线C51程序软件包 此软件包用在单主方式下的I2C总线,硬件接口是SDA、SCL,使用 MCU的IVO口作SDA、SCL。软件包函数: (1)bit ISendStr(uchar sla,uchar suba,uchar*s,uchar no)(有子地 址)读N字节数据: (2)bit IRevStr((uchar sla,uchar suba,uchar*s,uchar no)(有子地 址)写N字节数据: ①、每一个函数都有返回值,当返回值为1时表示操作成功,否则操 作失败: ②、参数说明:sla为器件从地址,suba为器件子地址,*s数据接收 /发送区指针,o接收/发送字节数: ③、现行地址读/写:有子地址器件,不给定子地址的读/写操作: ④、设计有/无子地址子程序是根据2C器件的特点,把地址和数据彻 底分开: ⑤、使用时只要把2C.c复制到用户程序相应的目录,然后在用户主程 序开头加入#include即可以使用上面的函数
软件包中有两点需要注意的是: (1)I2C总线SDA、SCL定义为MCU的P3.4、P3.5: (2)MCU的标准时钟Fosc的SDA、SCL 以及NopO的个数进行修改。软件包函数如下: /水水家水水家水水*米水*水水*水*水水米水*家水水家水*水水米水米**宋水水家水*家水水*水浓家水米水水*水水宗水*水 功能说明:本模拟I2C软件包包含了I2C操作的底层函数,包括发送 数据及接收数据,应答位发送,并提供了几个直接面对器件的操作函数。 注意:函数是采用软件延时的方法产生脉冲,如果采用高频率晶振时 要作适当修改。(木软件包是1us机器周期,即晶振频率要小于12MHZ, 总线时序符合2C标准模式。 11.3I2C总线E2PROM芯片AT24C×× 基于I2C总线的E2PROM芯片很多,它们集成度高,体积小,占用IO 口线少,寿命长,不易被改写,适合与单片机连接。下面就以AT24C××系 列为例来说明它们的使用方法。 1.串行E2PROM芯片AT24C××系列概述 AT24C×系列是美国ATMEL公司生产的低功耗CMOS串行E2PROM, 支持I2C总线数据传输协议。该系列包含AT24C01、AT24C02、AT24C04、 AT24C08、AT24C16、AT24C32、AT24C64、AT24C128、AT24C256和 AT24C512等10种芯片,容量分别为1、2、4、8、16、32、64、128、256 和512K位,具有工作电压宽(1.8一6V)、擦写次数多(大于10000次)
写入速度快(小于10ms)等特点。它们在系统中始终作为从器件。表给出 了美国Atmel公司生产的I2C总线AT24C×系列串行E2PROM 号 工作 AT24C01 128×8 4 8 1.8 AT24C02 256×8 8 8,141.8 AT24C04 512×8 16 8.141.8 AT24C08 1K×8 16 8141.8 AT24C16 2K×8 16 8141.8 AT24C32 4K8 32 8.141.8 AT24C64 8K×8 32 8.14 1.8 AT24C128 16水×864 8.14 1.8 AT24C256 32K×8 64 8 1.8 AT24C512 64K×8 8 1.8 2.AT24C×的特点和引脚功能 AT24C××系列的工作电流约为3mA,主要特性如下: (1)具有页写功能,AT24C01的页缓冲区为4字节,AT240C2为8 字节等: (2)可擦写次数>100000次: (3)数据保存周期:100年: (4)8脚DIP或SOIC封装。 AT2401的管脚排列如图所示,各管脚的功能如下: AovcC Al WP SDA (1)A0、A1、A2:器件地址选择线,用于多个器件级联时设置器件 地址,当这些脚悬空时默认值为0: (2)SDA:串行数据线,用于器件所有数据的发送或接收:
(3)SCL:串行时钟线,用于产生器件所有数据发送或接收的时钟: (4)WP(EN):写保护端,当该端口为高电平时,不可对存储器写操 作: (5)VCC:电源正,取值范围为1.8一6V; (6)VSS:电源地。 3.存储器结构与寻址 AT24C××系列E2PROM操作时有两种寻址方式:芯片寻址和片内子地 址寻址。 (1)芯片寻址:AT24C××系列E2PROM采用I2C总线,I2C总线上可 以挂接多个接口器件,在2C总线上的每一个器件应有唯一的器件地址 按2C总线规则,器件地址为7位二进制数,它与1位数据方向位构成一 个器件寻址字节。AT24C×系列的芯片地址为1010,其地址控制字格式为 “10I0A2A1A0R/W”。其中A2A1A0可编程地址选择位。A2、A1、A0引 脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器 件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作。 (2)片内子地址寻址:对于E2PROM的片内地址,AT24C01和AT24C02 由于芯片容量可用一个字节表示,故读写某个单元前,先向E2PROM写入 一个字节的器件地址,再写入一个字节的片内地址。而AT24C04、AT24C08 和AT24C16分别需要9位、10位和11位的片内地址,所以AT24C04把器 件地址中的D1(A0)作为片内地址的最高位,AT24C08把器件地址中的 D2D1(A1A0)作为片内地址的最高两位,AT24C16把器件地址中的D3D2D1 (A2A1A0)作为片内地址的最高3位。凡在系统中把器件的引脚地址用作 片内地址后,该引脚在电路中不得作悬空处理。AT24C32、AT24C64
AT24C128、AT24C128、AT24C256和AT24C512的片内地址采用两个字节。 4.AT24C×的操作时序 AT24C×作为器件的从节点,当主器件以主发送方式对其进行操作时, 即实现了AT24C×输入,主器件以主接收方式对AT24C××进行操作时,即 实现AT24C××的输出,而不需要专门的写信号控制线,其信号时序如所示。 CPU对E2PROM进行写操作前,先发送该器件的7位地址码和写方 向位“0”,发送完后释放SDA线并在SCL线上产生第9个时钟信号。被 选中的存储器在确认是自己的地址后,在SDA线上产生一个应答信号作为 响应,CPU收到应答信号后就可以传送数据了。传送数据时,CPU首先发 送一个字节的被写入器件的存储区首地址,收到存储器的应答后,CPU就 逐个发送各数据字节。 CPU对E2PROM进行读操作前,先发送该器件的7位地址码和写方 向位“0”(伪写),发送完后释放SDA线并在SCL线上产生第9个时钟 信号。被选中的存储器在确认是自己的地址后,在SDA线上产生一个应 答信号作为响应。然后再发一个字节的要读出器件的存储区的首地址,收 到应答信号后,CPU要重复发送一次起始信号,并发出器件地址和读方向 位“1”,收到从器件应答后就可以读出数据字节,每读出一个字节,CPU 都要回复应答信号。当最后一个字节数据读完后,CPU应返回以“非应答
(高电平),并发出终止信号以结束读出操作。 5.AT24C×与单片机的接口 AT24C01与MCS-51单片机的接口电路如图所示。单片机的P3.4端与 I2C器件SDA端连接,P3.5端与I2C器件SCL端连接,由于SDA和SCL 引脚都是开漏结构,所以要接上拉电阻,三个地址端A2、A1、A0接地, 片选WP接单片机的P1.0口。 VCC MCS-5 AT24C01 P3 5 WP VSSH 软件设计相对简单,首先要把I2C.c复制到用户程序相应的目录,然后 在用户主程序开头加入tinclude即可以使用内部的函数。对 E2PROM的读写操作分别调用IRevStr(uchar sla,uchar suba,uchar*s,uchar no)和ISendStr(uchar sla,uchar suba,uchar*s,uchar no)函数。 11.4I2C总线IVO扩展芯片PCF8574 1.概述 PCF8574是PHILIPS公司推出的带I2C总线接口的CMOS型IVO扩展 芯片,包含一个8位准双向口和一个I2C总线接口。PCF8574电流消耗很 低,且口输出锁存具有大电流驱动能力,可直接驱动LED。它还带有一条 中断引脚T,可与MCU的中断逻辑相连。通过T发送中断信号,远端IVO 口不必经过I2C总线通信就可通知MCU是否有数据从端口输入。 PCF8574和PCF8574A的唯一区别在于器件地址不同。其特性为:操作电 压2.5~6.0V,开漏中断输出,【V0口输出锁存,通过3个硬件地址引脚可寻