I2C学习报告
I2C背景知识简介
I2C总线,全称为Inter-Integrated Circuit(集成电路互联总线),是MCU中常用的接口模块。
它是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线
上的器件之间传送信息。
I2C原理
I2C 标 志 位
通过SDA(串行数据线)和SCL(串行时钟线)的关
系,可以建立不同的协议标志位。
数 据 传 输
发送到SDA 线上的每个字节必须为8 位每次传输
可以发送的字节数量不受限制,每个字节后必须
跟一个响应位。
时 钟 同 步 和 仲 裁
地 址 格 式
两个主设备可以同时开始在空闲总线上进行传输,
并且必须有一种方法来决定哪个控制总线并完成
其传输。 这是通过时钟同步和仲裁完成的。
I2C总线协议规定的地址寻址介绍。
I2C标志位
1.空闲标志
I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止
状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
2.Start和stop标志位
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
3.Restart标志位
和start条件一样,在SCL为高电平的时候,SDA下降为低电平,表示一个新的起始。
3.Write和read标志位
不论是读还是写,都是由主设备发起和结束的。也就是由主设备产生开始和结束条件。I2C设备地址为8bit,其中最低位为
读写位,0为写,1为读。实际地址位为7bit。
数据传输
发送到SDA 线上的每个字节必须为8 位每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位,首先传输的
是数据的最高位MSB 。如果从机要完成一些其他功能,例如一个内部中断服务程序才能接收或发送下一个完整的数据字节,可
以使时钟线SCL 保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。
响应发生在每个字节之后。 应答位允许接收器向发送器发信号通知该字节已成功接收,并且可以发送另一个字节。 主机产生
所有时钟脉冲,包括应答第9个时钟脉冲。
响应分为ACK和NACK。
ACK 信号:在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。当
然必须考虑建立和保持时间。
NACK信号:当在第9个时钟脉冲期间SDA保持高电平时,这被定义为非应答信号。主设备可以生成STOP条件以中止传输,
或者生成重复的START条件以开始新的传输。
导致生成NACK的条件有五个:
1.总线上没有带有发送地址的接收器,因此没有设备响应确认。
2.接收器无法接收或发送,因为它正在执行某些实时功能,并且尚未准备好开始与主站通信。
3.在传输过程中,接收器获取它不理解的数据或命令。
4.在传输过程中,接收器无法再接收数据字节。
5.主接收器必须发信号通知从发送器的传输结束。
时钟同步
时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一
旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期,这个时
钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平,此时,低电平周期短的器件会进
入高电平的等待状态。
当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后器件时钟和SCL线的状态没有差别。而且
所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。这样,产生的同步SCL时钟的低电平周
期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。