快捷搜索:  汽车  科技

iic协议传输距离的限制(IIC通信协议)

iic协议传输距离的限制(IIC通信协议)名称IIC通信中寻找从设备根据设备地址查找,设备地址每个设备都有,可以分为10位和7位两种,设备地址包含两个部分:一部分是可编程地址,一部分是固定地址,具体每一部分占多少位有设计厂商决定,一般看手册都能找到。上拉电阻阻值范围:4.7K~100K设备之间要求共地线。IIC通信中主机如何确定和那个从机通信?

IIC总线概述IIC总线介绍

IIC(Inter-Integrated Circuit)集成电路总线,它是一种两线式串行通信总线,又叫I2C,使用多主从架构,由飞利浦公司在1980年推出的。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,一般可达400kbps 以上。IIC两线制包括串行数据线和时钟线,总线必须有主机控制,主机产生串行时钟,控制总线的传输方向,并产生起始和停止条件。IIC总线上有主机和从机之分,可以有多个主机和从机,从机永远不会主动给主机发消息。器件发送数据到总线上定义为发送器,期间接受总线上的数据定义为接收器,主器件和从器件都可以工作与发送和接收的状态。

IIC通信方式:串行同步半双工

主机从机都可以作为接收器和发送器使用,不同时间处于不同身份,换句话说就是同一时间只有接收或发送一种状态。

IIC总线物理拓扑结构

iic协议传输距离的限制(IIC通信协议)(1)

理论上可以挂无数个设备,实际上挂载设备受两线之间的干扰,有限制。

上拉电阻阻值范围:4.7K~100K

设备之间要求共地线。

IIC总线主从设备通信

IIC通信中主机如何确定和那个从机通信?

IIC通信中寻找从设备根据设备地址查找,设备地址每个设备都有,可以分为10位和7位两种,设备地址包含两个部分:一部分是可编程地址,一部分是固定地址,具体每一部分占多少位有设计厂商决定,一般看手册都能找到。

iic协议传输距离的限制(IIC通信协议)(2)

IIC总线和串口比较

名称

IIC总线

UART

通信方式

串行同步半双工

串行异步全双工

通信速度

标准100kbit/s 快速400k,高速3.4M

由波特率决定

主从设备

有主从之分,主机产生时钟

无主从之分

IIC总线数据帧IIC数据帧格式

IIC标准数据帧格式:起始条件 数据位(8位:发送器发送到数据总线) 应答位(接收器发送) 停止条件 (MSB:高位 LSB:低位)

iic协议传输距离的限制(IIC通信协议)(3)

起始条件:SCL高电平期间,SDA由高电平变为低电平

数据位:时钟上升沿采集数据,下降沿准备数据,或者说只有在时钟低电平时间允许数据位发生变化

应答位:低电平表示应答,高电平表示非应答

停止条件:SCL在高电平期间,SDA由低电平变为高电平

传输过程和串口不同:串口是以一帧数据为单位来传输的,每帧数据都包含完整的起始位到停止位。IIC一次传输包含起始条件和停止条件,中间可以包含很多个8位数据。多个数据之间都会有应答信号,在传输最后一位数据时没有应答信号,也就表明数据传输结束了。

IIC总线时序

具体时序如下:该时序图的时间是在100kbit/s的速度下使用的,如果提高速度,对应的时间也应该缩短。

iic协议传输距离的限制(IIC通信协议)(4)

iic协议传输距离的限制(IIC通信协议)(5)

IIC总线寻址方式

IIC寻址数据格式图:

iic协议传输距离的限制(IIC通信协议)(6)

上图是7位地址位寻址方式

方向位:确定是读数据还是写数据

IIC总线通信最先发送的数据是:设备地址 方向位

如果是10位地址寻址方式:

先将10位中的高三位地址取出来,高位补0,先发送出去,然后再将剩下的7位,加上方向位再进行发送。也就是分两个8位数据发送。10位地址时,设备会自动将前两个8位数据判断为地址数据。

IIC总线通信方式

IIC通讯的三种方式,这里需要注意的是数据线上的应答和数据是由主机还是从机发出的,具体已在图片中标注出来。

只读数据:

iic协议传输距离的限制(IIC通信协议)(7)

只写数据:

iic协议传输距离的限制(IIC通信协议)(8)

读写切换:

iic协议传输距离的限制(IIC通信协议)(9)

模拟IIC总线

由于专利原因,ST公司在设计IIC接口时做得比较复杂,所以在实际使用中大部分情况都采用的是模拟IIC接口,在模拟时只需要两个普通IO口就可实现IIC通讯。

IIC模拟IO口模式选择:

SCL时钟线:由主机驱动需要较强的高低电平驱动能力,一般配置为通用推挽输出模式

SDA数据线:这里需要注意了,数据线上我们既要向外发送数据,还要接收从机的应答信号。所以这里有两种方式可选。

1,通讯时切换IO口的工作模式

  1. 配置为开漏输出

这里给大家解释一下为什么可以使用开漏输出,首先IIC通讯时硬件上已经提供了上拉电阻,不需要考虑推挽输出无法输出高电平的问题了。其次大家可以查询一下参考手册的GPIO一章中对开漏模式的描述,官方说明在配置为开漏模式时,输出数据寄存器依然工作,我们仍然可以通过读取输入数据寄存器来判断数据线的电平状态。那为什么不使用推挽呢?由于推挽输出驱动能力较强,为了避免从机出现无法更变数据线电平状况的情况出现,所以一般不采用推挽输出。

具体模拟代码,网上很多大家自行百度即可。

猜您喜欢: