基于I2C串行总线的单片机应用系统的设计方法和程序

目前,消费类电子产品(如彩电、音响等)的功能多样化使得控制电路变得更为复杂 。而Philips公司推出的集成电路芯片间总线I2CBUS(InterICBUS)是目前众多总线中最简洁有效、使用也为广泛的一种总线格式 。I2C总线通常是以硬件来实现的,这就要求所选器件必须具有I2C总线接口,但目前广泛使用的MCS-51系列单片机并不具备I2C总线的专用硬件部分 。本文结合笔者采用单片机8031实现对具有I2C总线接口的立体声音频处理芯片TDA7313的控制,介绍了I2C总线以及基于I2C串行总线的单片机应用系统的设计方法和程序 。
1 I2C总线简介
1.1 I2C总线的组成
I2C串行总线是用双向数据线(SDA)和串行时钟线(SCL)两根信号线,在连接到该总线的器件之间传送信息 。它属于多主控器总线,图1所示是其组成框图 。总线上的每个器件均可设置一个唯一地址,然后根据所设的功能进行信息的发送或接收 。除了作为发送器和接收器以外,在执行数据传输时,总线的器件还可以设定为主控器和被控器 。通常由主控器启动总线上的数据传输,并产生数据传输所需的时钟信号 。而被其寻址的其它器件均为被控器,这意味着总线上可连接多个有控制总线的器件 。
图1 I2C总线的组成
I2C总线上的数据传输率为100 kbit/s,快速方式下可达400 kbit/s 。连接到总线上的器件数仅受400pF的总线电容的限制 。同时,为了避免总线信号的混乱,要求连接到总线上的各器件输出端必须是集电极开路或漏极开路,以便产生“线与”功能 。I2C总线上的SDA和SCL线都是双向传输线,它们可通过一个电阻连接到正电源端,当总线处于空闲状态时,两条线均为高电平 。
1.2 I2C总线数据传输格式
在I2C总线传输过程中,仅当总线空闲(SCL线和SDA线均为高电平)时,数据传送才能开始,此时总线上的任何器件均可以控制总线 。图2所示是两种特定的开始和停止条件,其中当SCL线为高电平且SDA线由高变低时为开始条件(S);而当SCL线为高电平且SDA线由低变高时为结束条件(P) 。在数据传送过程中,当SCL线为高电平时,SDA线必须是稳定的高或低电平才能使数据有效 。只有当SCL线上的时钟信号为低时,SDA线的状态才能改变,且每位数据需一个时钟脉冲 。所有数据都是按字节发送的,每次发送的字节数不限 。每发送完一个字节,主控器释放SDA线(呈高电平)并由受控器下拉SDA线,从而使SDA线为稳定的低电平来作为有效应答位以表示传输成功,此时主控器必须产生一个与此位相应的额外时钟脉冲 。
图2 I2C串行总线数据操作时序
图3为I2C总线数据传输格式 。其中第一部分为数据传输起始信号,即由此开始进行数据传送;第二部分为受控器地址,用来选择向哪个受控器传送数据;第三部分为读/写控制位,用于指示受控器的工作方式,0表示写,1表示读;第四部分是被主控器选中的受控器向主控器回传的确认信号;第五部分是所传送的数据,每传送一个字节数据,都要求有一个应答位;第六部分是数据传输的结束信号 。
图3 数据传输格式
每个具有I2C总线接口的受控器件都有唯一固定的地址,当主控器发送数据时,I2C总线上挂接的受控器件都会将主控器发出的、位于起始信号后的8位地址信息与自己的地址进行比较,如果两者相同,则认为该受控器件被选中,然后按照读/写位规定的工作方式接收或发送数据 。
2 I2C总线在单片机中的实现
本音频处理系统中所使用的IC控制芯片为TDA7313,它是具有音量、高低音调的左右平衡及前后混频调整的立体声音频数字处理器件,它的输入通道可以选择,并具有相应的外部响度调整函数以及I2C串行总线接口,因此可广泛应用于汽车音响和高保真系统中 。TDA7313与单片机8031的连线和基本的管脚定义如图4所示 。
图4 单片机与TDA7313的接口电路
【基于I2C串行总线的单片机应用系统的设计方法和程序】由于单片机8031不具有I2C总线硬件接口,因此只能通过编写软件产生串行时钟信号 。当系统传输数据时,先由单片机给出一个启始信号;接着送出器件TDA7313的7位地址及读/写控制位并等待应答信号;当收到应答信号后,系统根据访问要求进行相应操作 。在实际操作过程中,一般都是通过CPU向TDA7313输入一连串的特定数字命令来实现对整个系统的音频处理,所以对TDA7313的操作主要是写操作 。

    推荐阅读