接口/总线/驱动
IIC总线概述
IIC总线介绍
IIC(Inter-Integrated Circuit)集成电路总线,它是一种两线式串行通信总线,又叫I2C,使用多主从架构,由飞利浦公司在1980年推出的。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,一般可达400kbps 以上。IIC两线制包括串行数据线和时钟线,总线必须有主机控制,主机产生串行时钟,控制总线的传输方向,并产生起始和停止条件。IIC总线上有主机和从机之分,可以有多个主机和从机,从机永远不会主动给主机发消息。器件发送数据到总线上定义为发送器,期间接受总线上的数据定义为接收器,主器件和从器件都可以工作与发送和接收的状态。
IIC通信方式:串行同步半双工
主机从机都可以作为接收器和发送器使用,不同时间处于不同身份,换句话说就是同一时间只有接收或发送一种状态。
IIC总线物理拓扑结构
理论上可以挂无数个设备,实际上挂载设备受两线之间的干扰,有限制。
上拉电阻阻值范围:4.7K~100K
设备之间要求共地线。
IIC总线主从设备通信
IIC通信中主机如何确定和那个从机通信?
IIC通信中寻找从设备根据设备地址查找,设备地址每个设备都有,可以分为10位和7位两种,设备地址包含两个部分:一部分是可编程地址,一部分是固定地址,具体每一部分占多少位有设计厂商决定,一般看手册都能找到。
IIC总线和串口比较
名称 | IIC总线 | UART |
通信方式 | 串行同步半双工 | 串行异步全双工 |
通信速度 | 标准100kbit/s,快速400k,高速3.4M | 由波特率决定 |
主从设备 | 有主从之分,主机产生时钟 | 无主从之分 |
IIC总线数据帧
IIC数据帧格式
IIC标准数据帧格式:起始条件+数据位(8位:发送器发送到数据总线)+应答位(接收器发送)+停止条件 (MSB:高位 LSB:低位)
起始条件:SCL高电平期间,SDA由高电平变为低电平
数据位:时钟上升沿采集数据,下降沿准备数据,或者说只有在时钟低电平时间允许数据位发生变化
应答位:低电平表示应答,高电平表示非应答
停止条件:SCL在高电平期间,SDA由低电平变为高电平
传输过程和串口不同:串口是以一帧数据为单位来传输的,每帧数据都包含完整的起始位到停止位。IIC一次传输包含起始条件和停止条件,中间可以包含很多个8位数据。多个数据之间都会有应答信号,在传输最后一位数据时没有应答信号,也就表明数据传输结束了。
IIC总线时序
具体时序如下:该时序图的时间是在100kbit/s的速度下使用的,如果提高速度,对应的时间也应该缩短。
IIC总线寻址方式
IIC寻址数据格式图:
上图是7位地址位寻址方式
方向位:确定是读数据还是写数据
IIC总线通信最先发送的数据是:设备地址+方向位
如果是10位地址寻址方式:
先将10位中的高三位地址取出来,高位补0,先发送出去,然后再将剩下的7位,加上方向位再进行发送。也就是分两个8位数据发送。10位地址时,设备会自动将前两个8位数据判断为地址数据。
IIC总线通信方式
IIC通讯的三种方式,这里需要注意的是数据线上的应答和数据是由主机还是从机发出的,具体已在图片中标注出来。
只读数据:
只写数据:
读写切换:
模拟IIC总线
由于专利原因,ST公司在设计IIC接口时做得比较复杂,所以在实际使用中大部分情况都采用的是模拟IIC接口,在模拟时只需要两个普通IO口就可实现IIC通讯。
IIC模拟IO口模式选择:
SCL时钟线:由主机驱动需要较强的高低电平驱动能力,一般配置为通用推挽输出模式
SDA数据线:这里需要注意了,数据线上我们既要向外发送数据,还要接收从机的应答信号。所以这里有两种方式可选。
1,通讯时切换IO口的工作模式
配置为开漏输出
这里给大家解释一下为什么可以使用开漏输出,首先IIC通讯时硬件上已经提供了上拉电阻,不需要考虑推挽输出无法输出高电平的问题了。其次大家可以查询一下参考手册的GPIO一章中对开漏模式的描述,官方说明在配置为开漏模式时,输出数据寄存器依然工作,我们仍然可以通过读取输入数据寄存器来判断数据线的电平状态。那为什么不使用推挽呢?由于推挽输出驱动能力较强,为了避免从机出现无法更变数据线电平状况的情况出现,所以一般不采用推挽输出。
具体模拟代码,网上很多大家自行百度即可。
全部0条评论
快来发表一下你的评论吧 !