I2C总线(Inter Integrated Circuit)是Philips公司推出的芯片间串行数据传输总线,采用两线制实现全双工同步数据传送。带I2C总线接口的器件越来越普遍,通过I2 C总线可以扩展串行E2PROM存储器、日历/时钟器件、A-D转换器、D-A转换器、I/O端口及显示驱动器构成的各种模块,也可以连接不带I2C总线接口的各类单片机或其他微处理器。
1.I2C总线结构及特点
I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据,可在主控器与被控器之间、主控器与主控器之间进行双向传输。各种主控和被控电路均并联挂接在总线上,每个电路和模块都有唯一的地址。在信息的传输过程中,I2C总线上挂接的每一模块电路既是主控器或被控器,又是发送器或接收器,这取决于模块所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。各控制电路虽然挂接在同一条总线上,却彼此独立,互不相关。I2C总线典型应用结构如图12-10所示。
图12-10 I2C总线结构
I2C总线数据传输速率在标准模式下最大可达100kbit/s,在快速模式下最大可达400kbit/s。总线的长度可长达25英尺,能够以最大10kbit/s的传输速率支持40个芯片。I2C总线采用器件地址硬件设置、软件寻址的方式进行寻址,不需要片选地址,电路接口简单,可以在总线上挂接多个接口器件。总线驱动能力受总线电容限制,无驱动扩展时总线的电容负载能力为400pF,能够带电拔插。I2C总线完全避免了外部器件扩展的片选信号寻址问题,器件扩展灵活、简单,占用单片机I/O接口少,在单片机应用系统的扩展中得到越来越广泛的应用及普及。
2.I2C总线特点
1)两线传输。在I2C总线系统中,可以将带有I2C总线接口的器件或模块并联挂接在I2 C总线上,挂接到I2C总线上的每个器件构成一个I2C总线节点,节点之间通过SDA和SCL相连。
2)多主竞争中的仲裁和同步。在I2C总线系统中,可以有多个主器件节点,每个主器件都可作为总线的主控制器。如果多个主器件节点在运行时要控制总线,则形成多主竞争状态,I2C总线系统可以保证多个器件节点在竞争总线时不会丢失数据,在总线竞争过程中进行总线控制权的仲裁和时钟同步,仲裁的结果是只运行其中一个主器件使之继续占用总线。多主竞争时的时钟同步和总线仲裁都利用硬件与标准软件模块自动完成,无须用户介入。
3)I2C总线传输数据时,采用状态码管理方式。对于总线数据传输时任何一种状态,在状态寄存器中都会出现相应的状态码,并且可以自动进入相应的状态处理程序中进行自动处理,无须用户介入。用户只需将Philips公司提供的标准状态处理程序装入程序存储器中即可。
4)系统中所有外围I2C总线器件或模块都采用器件地址与引脚地址相结合的方式进行编址。在I2C总线系统中,主器件对任何节点的寻址采用纯软件的寻址方法,避免了片选信号采用线选法或译码法带来的麻烦。系统中若有地址编码冲突,则可以通过改变地址引脚的电平设置来解决。
5)所有带有I2C总线接口的器件都具有应答功能。对片内多个地址单元进行读/写操作时,数据读/写后都有地址加1功能。在I2C总线对某一器件进行连续多字节读/写时很容易实现自动操作,即只要设置好读/写入口条件,启动I2C总线就可以自动完成多字节的读/写操作。
6)I2C总线电气接口输出端是晶体管漏极开路或集电极开路结构,使用时必须外接上拉电阻。总线上的各个节点器件可以单独接电源,但需要共地。总线上的各个节点可以带电接入或撤出。
在I2C总线系统中,带有I2C总线的单片机提供了I2C总线输入/输出电气结构、相关特殊功能寄存器(SFR)设置,以及标准程序模块,为用户掌握I2C总线的系统设计和应用程序的编写带来很大方便。(www.xing528.com)
3.I2C总线的信号及时序定义
I2C总线每传输一位数据都有一个时钟脉冲相对应,其逻辑0和1的信号电平取决于该节点的正端电源VCC的电压。
(1)总线上数据的有效性
在I2C总线上传输数据时,在时钟线(SCL)为高电平期间,对应的数据线(SDA)上必须保持稳定的逻辑电平状态:高电平表示传输的数据位为1,低电平表示传输的数据位为0。只有在时钟线为低电平期间,才允许数据线上的电平发生变化。数据传输的有效性如图12-11所示。
图12-11 I2C总线上的数据位传送
(2)数据传输的起始位和结束位
I2C总线在传送数据过程中有三种类型信号,分别是起始信号、结束信号和应答信号。在I2C总线上,数据传输的起始信号和结束信号的定义如图12-12所示。
图12-12 I2C总线上的起始信号和结束信号
起始信号:在时钟线(SCL)为高电平期间,数据线(SDA)出现由高电平向低电平跳变(即下降沿)时,启动I2C总线,开始传送数据。
结束信号:在时钟线(SCL)为高电平期间,数据线(SDA)出现由低电平向高电平跳变(即上升沿)时,停止I2C总线,结束传送数据。
起始信号和结束信号都是由主控制器产生的。总线上带有I2C总线接口的器件很容易检测到这些信号。但是,对于不具备这些硬件接口的单片机,为了能够准确地检测到这些信号,必须提高对数据线的采样频率。通常在总线的每个时钟周期内对数据线至少应进行两次以上的采样。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。