【linux iic子系统】i2c基础(一)

9 篇文章 7 订阅

什么是IIC?

IIC的全称是Inter-Integrated Circuit,由duPhilips公司推出,是近年来在微电子通信控制制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,仅需两根线(SLC、SDA)即可完成信息传输,并且通信速率较高。在主从通信中,可以有多个IIC设备同时接到IIC总线上,通过地址来识别通信对象。

IIC总线与IIC设备硬件连接方式

 

 

IIC总线的两根线必须上拉,要么CPU内部上拉,要么外置上拉电阻上拉!一般而言,CPU通过两种方式连接IIC总线,分别为:

1)通过CPU引出的普通IO引脚连接IIC总线,如C51单片机的IO引脚,通过IO模拟IIC时序完成信息传输,这种方法称为软件IIC。日常所接触到的CPU均可实现这种传输方式,当然前提是时序无误。

2)通过IIC控制器来连接IIC总线,如STM32单片机中的IIC控制器连接IIC设备,CPU设置好IIC控制器后,便只要将数据放入发送寄存器即可,这种方法称为硬件IIC。目前大多数CPU都内部集成了IIC控制器(可能好几个),因此这种方式是最常遇到的。

 

IIC时序

一般而言,IIC设备有两个要求,分别是最小时间要求传输时序要求!不管是模拟IIC还是硬件IIC都必须满足这两个要求,否则通信失败!

 

下面使用tmp75的手册来说明这两个要求!

1)传输中各个时间间隔的最小值要求

       如图所示,每个时刻都有最小时间间隔,比如开始信号S产生后,至少过tHDSTA时间SCL时钟线才能变化。

       对于模拟IIC来说,只要注意延时时间即可;对于硬件IIC来说,需要仔细配置各个阶段的时间寄存器!我们经常接触的就是硬件IIC,所以在这提醒:必须正确配置寄存器,才能产生符合要求的时序!

 

2)读写时序要求

Tmp75的写时序如下:

       可以看见,首先发出tmp75的7位地址1位写标志位,然后发送寄存器地址,接着发送两个字节的数据,其中byte1对应寄存器的高8位,byte2对应寄存器低8位,注意这个对应顺序来源于tmp75手册,不同的Iic设备对应方式可能不一样。

 

Tmp75的读时序如下:

       这里要强调一下读时序和写时序是存在差别的!写时序在发出寄存器地址后即可开始写,但读时序在发出寄存器地址后要需要重新发送一次开始信号和tmp75地址(加读标志)

 

这里简要说明各个信号:

开始位:时钟线SCL高电平,SDA由高变低;

停止位:时钟线SCL高电平,SDA由低变高;

ACK应答:在第9个时钟的低电平期间,主机(从机)将SDA拉高后释放SDA总线,由从机(主机)将SDA总线拉低,即为ACK信号。

ACK应答:在第9个时钟的低电平期间,主机(从机)将SDA拉低,即告诉从机(主机)无ACK应答。

数据读取:一般而言,数据在SCL时钟的上升沿读取,因此在时钟上升沿期间数据应保持稳定。

数据变化:一般而言,数据在SCL时钟低电平时候变化,并且变化之后要等待tSUDATA时间才能将SCL时钟拉高!

 

SCL同步与SDA仲裁

       仔细观察上面的IIC总线硬件连接方式,会发现很有意思的一点,那就是不管SCL线还是SDA线,它们都是电平“与”关系,什么意思呢?就是它们都是通过上拉电阻维持高电平的,也就是说只要有一个设备输出低电平,那么总线就被拉低!这便是SCL同步与SDA仲裁的基础。

SCL同步

       只要有一个节点的SCL发送低电平,SCL总线上就表现为低电平。当所有的节点的SCL都发送高电平时,SCL总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理,如下图clk1是设备1发出的,clk2是设备2发出的,最终的SCL电平如图最下所示:

SDA仲裁

       I2C总线上可能在某一时刻有两个主控设备要同时向总线发送数据,这种情况叫做总线竞争。

       I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的: 假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。

       当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。不难看出:

1)对于整个仲裁过程主控器1和主控器2都不会丢失数据;

2)各个主控器没有对总线实施控制的优先级别,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值