IIC总线协议总结

I2C(INTER IC BUS)

前言:

IIC 是多主设备的总线(同一时刻只有一个主设备,多主设备竞争仲裁),IIC只使用两条信号线,从机拥有唯一确定的地址(7位地址,后拓展支持10位地址)。

主要总结了IIC的基本用法,对于多主竞争和高速模式,有兴趣可以自己研究,具体参考周立功的IIC 文档,非常详细。

 

一.IIC构成

1 物理层面

只有2线(没算上地线),SDA数据线和SCL时钟线。

速率:协议传输速率有三种,分别是:标准100kbps、快速400kbps、高速3.4Mbps。

另一些变种实现了低速模式(10 kbps)和快速+模式(1 Mbps)。(不同的速率主要取决于芯片支持)。

 

2 硬件电路

上拉电阻连接到VCC,一般取值10K。上拉电阻是必须的,因IIC协议规定空闲时刻为高电平。上拉电阻取值大小主要考虑两个因素,一个是功耗和速度,上拉电阻与总线的电容形成了RC,因为总线拉高时有个充电时间以及高电平的阀值,如果还没有充电到足以保证从器件可以识别的高电平的阀值时主器件就以为完成了一个总线动作的话,那么通讯肯定是不能进行的。同样因RC电容充电时间,导致高速率瓶颈。

 

3 IIC原则

传输数据时,在SCL线为高电平时,主机或从机获取采样SDA的电平作为数据逻辑值,因此SCL高电平时候,SDA数据线必须保持稳定。在SCL=0(低电平)时,SDA数据线更改电平,从而传输不同的逻辑电平。在SCL线为高电平时,SDA变化会被判定为起始或者结束传输。

SCl时钟线是由主设备控制,但允许SDA强行拉低SCL线以迫使主设备等待。


 

二. 基本工作原理:

1起始和停止

IIC通信以START信号为每次传输的起始,STOP为传输结束释放总线。但是如果主机仍希望在总线上通讯,它可以重复产生起始条件和寻址另一个从机而不是首先产生一个停止条件,在这种传输中可能有不同的读写格式结合。

 


2数据格式

发送到SDA 线上以字节为单位,每个字节后必须跟一个响应位,每次传输可以发送的字节数量不受限制。首先传输的是数据的最高位MSB。如果从机要完成一些其他功能后(例如一个内部中断服务程序),才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节,释放时钟线SCL后数据传输继续。

数据传输必须带响应,每个字节后应该由对方回送一个应答信号ACK做为对方在线的标志。

 

3传输过程:start -> addr -> datas -> stop/restart

主机发送起始信号后,紧接着发送一个地址Byte,包括7位从机地址和以为读写位,第8位是数据方向位R/W,0表示发送写,1表示请求数据读

 


三. 总线信号时序分析

1 总线空闲状态

SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高。在物理实现上,SCL线和SDA线都是漏极开路(open-drain),通过上拉电阻外加一个电压源。当把线路接地时,线路为逻辑0,当释放线路,线路空闲时,线路为逻辑1。基于这些特性,IIC设备对总线的操作仅有“把线路接地”——输出逻辑0。基于这个特性,IIC可以做到时钟拉伸。

2 7位地址

I2C 总线的寻址过程是在起始条件后的第一个字节决定了主机选择哪一个从机。例外的情况是可以寻址所有器件的广播呼叫地址。使用这个地址时理论上所有器件都会发出一个响应,但是也可以使器件忽略这个地址。

第一个字节的头7 位组成了从机地址。最低位LSB 是第8 位它决定了报文的方向。第一个字节的最低位是0 表示主机会写信息到被选中的从机,1 表示主机会向从机读信息。


I2C 总线委员会协调I2C 地址的分配。见下表,可以看到如何拓展10位地址。11110xx,第8位依然是数据传输方向,其中xx是10位地址的最高位。

 

3应答信号ACK
I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。

4无应答信号NACK

在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途:
a. 一般表示接收器未成功接收数据字节;
b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值