-
认识I2C总线:
-
概念:I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接MCU及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
-
特点 : • 只要求两条总线线路一条串行数据线SDA(Serial data) ,一条串行时钟线SCL(Serial clock)
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地
址主机可以作为主机发送器或主机接收器
• 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁
防止数据被破坏
• 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速
模式下可达3.4Mbit/s
• 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
• 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制
-
总线时序
-
起始和停止的条件 :在I2C 总线中唯一出现的是被定义为起始S 和停止P 条件,如下图
a)在SCL 线是高电平时SDA 线从高电平向低电平切换,此为起始条件(S)
b)当SCL 是高电平时SDA 线由低电平向高电平切换表示停止条件
-
数据的有效性
SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟
信号是低电平时才能改变,如下图
-
数据的传输
a)字节格式
发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位 。首先传输的是数据的最高位 MSB,如果从机要完成一些其他功能后 例如一个内部中断服务程序 才能接收或发送下一个完整的数据字节 可以使时钟线 SCL 保持低电平迫使主机进入等待状态 当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续。如下图
b)响应
数据传输必须带响应相关的响应时钟脉冲由主机产生在响应的时钟脉冲期间发送器释放SDA 线
(高)。在响应的时钟脉冲期间接收器必须将SDA 线拉低使它在这个时钟脉冲的高电平期间保持稳定的低
电平见图7 当然必须考虑建立和保持时间。如下图,详细参见I2C总线2.0协议。
-
仲裁和时钟发生
a) 同步
所有主机在SCL 线上产生它们自己的时钟来传输I2C 总线上的报文数据只在时钟的高电平周期有效
因此需要一个确定的时钟进行逐位仲裁。
时钟同步通过线与连接I2C 接口到SCL 线来执行这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期而且一旦器件的时钟变低电平它会使SCL 线保持这种状态直到到达时钟的高电平,但是如果另一个时钟仍处于低电平周期这个时钟的低到高切换不会改变SCL 线的状态。因此,SCL 线被有最长低电平周期的器件保持低电平此时低电平周期短的器件会进入高电平的等待状态。
当所有有关的器件数完了它们的低电平周期后时钟线被释放并变成高电平之后器件时钟和SCL线的状态没有差别而且所有器件会开始数它们的高电平周期首先完成高电平周期的器件会再次将SCL线拉低。
这样产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定而高电平周期由高电平
时钟周期最短的器件决定。如下图
b) 仲裁
主机只能在总线空闲的时侯启动传输两个或多个主机可能在起始条件的最小持续时间tHD;STA 内
产生一个起始条件结果在总线上产生一个规定的起始条件。
当SCL 线是高电平时仲裁在SDA 线发生这样在其他主机发送低电平时发送高电平的主机将
断开它的数据输出级因为总线上的电平与它自己的电平不相同。
-
7位地址格式
数据的传输遵循,下图所示,的格式在起始条件(S) 后发送了一个从机地址这个地址共有7 位紧接着的第8 位是数据方向位R/W ,0 表示发送(写),1 表示请求数据(读)。数据传输一般由主机产生的停止位(P) 终止但是如果主机仍希望在总线上通讯它可以产生重复起始条件(Sr)和寻址另一个从机而不是首先产生一个停止条件在这种传输中可能有不同的读写格式结合。
详细请参见 I2C总线协议
参考:
I2C总线协议英文版(V2.1版)
I2C总线协议中文版(周立功公司翻译)