IIC(一)

在嵌入式领域IIC协议可谓是应用的非常广泛了,有很多IIC协议的设备,而且大多数开发板上都会具备IIC总线,所以,IIC的学习可以说是必不可少的,在我使用的这款jz2440开发板上同样支持IIC设备的控制,今天就来记录一下IIC的学习过程。
1、IIC协议
IIC是一种设备之间用来通信的协议,IIC协议非常简单,只要操作两根线就可以操作设备,来先看看IIC的物理协议接口
在这里插入图片描述

从图中可以看出IIC是一种主从结构,由一个主机来控制多个从机,所有的通信都必须由主设备发起,用于主设备和从设备之间通信的两条线
SDA:串行数据线
SCL:串行时钟线

接下来看看主、从设备是如何使用IIC进行通信的
在这里插入图片描述

1、在开始的时候,SDA和SCL线都是高电平,表示目前IIC总线处于空闲状态
2、SCL保持高电平,SDA由高电平变为低电平,表示开始信号,相当于IIC主设备对所有从设备说"都注意了,我要开始传输数据了"
3、SCL和SDA配合传输数据
4、SCL保持高电平,SDA由低电平变为高电平,表示一个结束信号,主设备释放IIC总线,总线处于空闲状态

在这里插入图片描述

1、在发送开始信号之后紧接着紧要进行通信了,主设备首先会发出7位的从设备地址寻找要操作的从设备,加上一位读写方向位表示接下来是读操作还是写操作
2、所有的数据在总线上传输如上图所示:
	a、高位先行
	b、在SCL为低电平期间SDA上的数据发生变化
	c、在SCL为高电平期间SDA上的数据保持稳定
	也就是说发要发送数据之前先把SCL拉低,然后把要发的数据写到SDA上,然后拉高SCL锁存数据
3、每发送完一个字节的数据从设备都会产生一个应答ACK,表示从设备接收到了数据,主设备可以继续发送下一个数据
   ACK由从设备拉低SDA表示,主设备检测到SDA被拉低就表明从设备存在并且正常工作	

2、IIC操作
根据上面的IIC协议时序图,可以将IIC主设备的读写过程表示如下
写操作
在这里插入图片描述

1、主设备发出start信号,通信开始
2、主设备发出7位的从设备地址,加上方向位(0表示写),组成一个8位的数据发出去
3、若从设备存在且正常接收到数据,从设备会给主设备回应一个ACK应答信号
4、主设备检测到应答信号,发出要写的地址数据
5、从设备应答
6、发出要写的数据
7、从设备应答
8、......
9、主设备不想再发送数据,发出结束信号,结束本次通信

读操作
在这里插入图片描述

读操作要比写操作稍微麻烦一些
1、主机发出start信号
2、主机发出7位的从设备地址,加上一位0,注意这里先要把从设备地址发给从设备,所以这里是写操作
3、从机回应ACK
4、主设备再把要读的地址发给从设备,这里后面跟的还是"写",因为要把这个要读的地址写入从设备
5、从设备回应ACK
6、主设备再次发出start信号
7、主设备紧接着发出7位设备地址加上读操作位1,这里才是真正到了读操作
8、从设备回应ACK,并且发出读出的存储器的数据
9、主设备读取数据,发出ACK读取下一个数据
10、从设备发出数据
11、主设备若是不想再读,发出end结束信号

注意:上面的图中我填充的方块都是表示从设备发给主设备的信息。可以看出,主设备和从设备之间进行通信还是挺麻烦的,
3、扩展
上面说过,IIC协议是主从结构的,一个主机可以同时控制多个从机,那么就有这个几个问题
a、主设备发送数据时,从设备应该不发送数据
这个是由SCL来控制的,主设备要发送时通过控制SCL线来避免从设备也要发送数据
b、主设备发送数据时,从设备的发送引脚不应该影响数据
在这里插入图片描述

A B SDA
0 0 1
0 1 0
1 0 0
1 1 0
1、当设备A和B都发出低电平,这个时候三极管无法导通,SDA取决于外部上拉电阻,所以SDA是高电平
2、当A发出低电平,A设备三极管无法导通,B发出高电平,三极管导通接地,所以SDA是低电平
所以,得出结论
a、当主设备发送数据时,从设备不驱动三极管,数据由主设备决定
b、第九个clk时,由从设备决定数据,主设备不去驱动三极管
这样,在一个设备发送数据时,另一个设备就不会产生影响
发布了33 篇原创文章 · 获赞 2 · 访问量 1029

猜你喜欢

转载自blog.csdn.net/weixin_41791581/article/details/103040274
IIC
今日推荐