单片机应用系统中使用的串行扩展方式主要有Philips公司的I2C(InteRiC)总线、Motorola公司的SPI(Serial PeripheraLinterface,串行外设接口)和Dallas公司的单总线(1-Wire)。
I2C总线是由Philips公司推出的一种双向二线制串行传输总线。具有控制方式简单灵活,器件体积小,通信速率高、低功耗等特点。I2C总线允许接入多个器件,如A/D及D/A转换器、存储器等。总线上的器件既可作为发送器,也可作为接收器。按照一定的通信协议进行数据交换。在每次数据交换开始时,作为主控器的器件需要通过总线竞争获得主控权。每个器件都具有唯一的地址,各器件间通过寻址确定接收方。
目前很多单片机内部都集成了I2C总线接口,对AT89S51单片机而言,内部没有集成I2C总线接口,但可以通过软件实现I2C总线的通信。
I2C总线是由串行数据线SDA和串行时钟线SCL构成的总线,可以发送和接收数据。在CPU和被控制器件间双向传送,最高传送速率为400 kb/s。SDA是双向串行数据线,用于地址、数据的输入和数据的输出,使用时需加上拉电阻。SCL是时钟线,为器件数据传输的同步时钟信号。
I2C总线的通信协议可简述如下。
当总线处于等待状态时,数据线SDA和时钟线SCL都必须保持高电平状态。(www.xing528.com)
当时钟线SCL保持高电平时,且数据线SDA出现由高变低的变化时,为I2C总线工作的起始信号,此时I2C被启动。当SCL为高电平时,且SDA由低变高时,为I2C总线停止信号,此时I2C总线停止数据传送。SDA上的数据在SCL高电平时必须稳定,在SCL低电平时才允许变化。
在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址,其中前7位为地址码,第8位为方式位。方式位为“0”表示发送,即CPU把信息写到所选择的接口或存储器;方式位为“1”表示CPU将从接口或存储器读信息。系统发出开始信号后,系统中的各个器件将自己的地址和CPU发送到总线上的地址进行比较,如果与CPU发送到总线上的地址一致,则该器件即为被CPU寻址的器件,其接收信息还是发送信息则由第8位确定。
在I2C总线上以字节为单位进行传送,每次先传送最高位。每次先传的数据字节数不限,在每个被传送的字节后面,接收器都必须发一位应答位(ACK),总线上第9个时钟脉冲对应于应答位,数据线上低电平为应答信号,高电平为非应答信号。待发送器确认后,再发下一数据。
数据格式如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。