分类: LINUX
2013-08-12 22:46:21
原文地址:I2C总线协议 作者:cainiao413
2010-01-24 16:39:25| 分类: 电子爱好者 | 标签: |字号大中小
I2C总线协议
I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。
1. I2C总线的特点
(1)只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL
(2) 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主发送器或主机接收器
(3)它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏
(4)串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达.4Mbit/s
(5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
(6) 连接到相同总线的IC数量只受到总线的最大电容400pF 限制
2. I2C总线术语的定义
术语 |
描述 |
发送器 |
发送数据到总线的器件 |
接收器 |
从总线接收数据的器件 |
主机 |
初始化发送、产生是钟信号和终止发送的器件 |
从机 |
被主机寻址的器件 |
多主机 |
同时有多于一个主机尝试控制总线,但不破坏报文 |
仲裁 |
是一个在有多个主机同时尝试控制总线 但只允许其中一个控制总线并使报文不被破坏的过程 |
同步 |
两个或多个器件同步时钟信号的过程 |
3. I2C协议总线信号时序分析
3.1 数据的有效性:
SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在 SCL线的时钟信号是低电平时才能改变。如图3.1 I2C总线的位传输所示。
图3.1 I2C总线的位传输
3.2 起始和停止条件
当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。
当SCL线是高电平时,SDA线由低电平向高电平切换表示停止条件。如图3.2 I2C起始和停止条件所示。
图3.2 起始和停止条件
3.3 总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;
3.4 数据传输与应答信号ACK
发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高),由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。如图3.3 I2C总线响应。
图3.3 I2C总线响应
首先传输的是数据的最高位(MSB)。如果从机要完成一些其他功能后(例如一个内部中断服务 程序)才能接收或发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后,数 据传输继续。如图3.4 I2C总线数据传输所示。
图3.4 I2C总线数据传输
4. 地址格式
数据的传输遵循如图4.1 完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/ — W),0-表示发送数据(写),1-表示接收数据(读)。数据传输一般由主机产生的停止位(P)终止。但是如果主机仍希望在总线上通讯,它可以产生重复起 始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中,可能有不同的读/写格式结合。如图3.5 I2C总线完整的数据传输。
图3.5 I2C总线完整的数据传输