ARMA9接口技术之IIC(一)

I2C总线协议:
IIC总线协议是一种通信协议,用与芯片之间的收发数据。它本质上就是两根线(数据线和时钟线)
在这里插入图片描述
串行线代表:一次只能发送一个数据。
半双工表示:数据传递方向是双向的,但是一次只能为一个方向。
那么IIC是怎么做到仅凭两根线就可以实现数据的接收和发送呢?
在这里插入图片描述

在这里插入图片描述
IIC总线就是俩根线上面挂载了很多个设备,这些设备都可以当作主机或者从机。
这就类似于小时候家里的座机可以分一个接听器出来。
主机可以打电话(发起通信)可以挂电话(结束通信)可以接听电话(接收数据)和说话(发送数据)
而接听器只接电话(响应)和听电话(接收数据)还有说话(发送数据)
————————————————————————————
那么我们设单片机A为主机设AD为从机,来看一下通信的过程是怎么样?
我们自己思考一下要通信要有那些要求?
1)通信双方的建立连接吧?(我跟你说话, 你得知道是跟你说话吧)
2)我发的数据你可以识别吧?(我跟你说话你得知道我说的什么吧)
一、建立连接
首先我们的数据都是在数据线上发送。主机要发一起次通信
又会有以下问题:
1、我从机怎么知道你什么时候发起通信啊?万一你发的数据的时候我没有接收呢?
2、挂载了这么多的设备我怎么知道你要和谁通信啊?
3、怎么保持通信同步呢?(我发一个01你以为是0011或者是000111,UART是通过波特率来解决的,那么IIC采用了什么方法?)
解决:
1、主机要发起一次通信的时候会发一个起始信号,当出这个起始信号的时候,其它从机就知道有主机发信号了,准备接收。(其它的主机也知道数据线有人在用了,就不会去发起通信,等待那个主机停止通信再发起一次只能有一个主机通信)。
在这里插入图片描述
2、这么多从机我怎么知道到你叫谁呢?
主机在发送起始信号后会发一个7bit的从机地址位。这个字节所有的设备都会接收到,并把这个地址位和自己的地址进行比较。如果一样就知道主机在叫主机并回应,如果不一样就知道主机表示和自己通信,就什么都不干。
3、通信同步
在这里插入图片描述
我们发一段这个的信号,从机怎么知道我发的是01还是0011呢?
在这里插入图片描述
我们利用时钟线来实现同步信号。
数据发送过程中
1、时钟线(SCL)为低的时候主机发送一位数据
2、时钟线为高的时候,从机接收一位数据
3、数据发送必须为8位,发完8位后从机发送一位应答信号
所以一次信号的发送时9帧,
它利用时钟线的时钟频率发一位就读一位这样就保持了信号的同步了
在这里插入图片描述

二、通信过程
在这里插入图片描述
1、主机发送起始信号启用总线。
起始信号就是SCL为高的时候SDA为低,这就是一个起始信号。
在这里插入图片描述

2、主机发送一个字节的数据(8位)
7位地址位:所以理论上来说IIC总线最多能挂载2^7个设备即127个(地址0不用)
1位广播位:这个位是决定谁是发送器和接收器的,当这个位写0之后主机作为发送器,当写1之后从机作为发送器,且只能发送器给接收器发送数据,接收器应答。不可以反,直到停止。
3、被寻址的从机发送应答信号
4、发送器发送一个字节的数据
5、接收器接收到数据并返回一个应答信号
。。。。。。(循环4、5就可以一直发送数据了)
6、当从机不应答或者主机自己想停止通信,主机就会发送一个停止信号。
在这里插入图片描述

—————————————————————————————
三、信号的实现
虽然我们的通信过程略显复杂,但是用到的信号就这几个
起始信号、停止信号:
在这里插入图片描述
起始信号:SCL 1 SDA 1->0
停止信号:SCL 1 SDA 0->1
字节的传送和应答:
在这里插入图片描述
应答位:从机从SDA 发一个1->0的信号为应答信号。
————————————————————————————
四、典型时序
在这里插入图片描述
在这里插入图片描述
三种典型的时序。
1、主机向从机发送数据(主机为发送器,从机为接收器)
起始信号->从机地址+ 1 ->从机ACK->主机发送8位数据+从机ACK(九帧)->主机发送8位数据+从机ACK…->主机发送8位数据+从机不ACK/或者ACK -> 停止信号
2、从机向主机发送数据(主机为接收器,从机为发送器)
主机发送起始信号->从机地址+ 0 ->从机ACK->从机发送8位数据+主机ACK(九帧)->从机发送8位数据+主机ACK…->从机发送8位数据+主机不ACK ->主机发送 停止信号

3主机先向从机发送数据->从机向主机发送数据(主机作为发送器->从机作为发送器)
主机起始信号->从机地址+ 1 ->从机ACK->主机发送8位数据+从机ACK(九帧)->主机发送8位数据+从机ACK…->主机发送8位数据+从机不ACK/或者ACK
然后不发送停止位,主机直接重新发送起始信号
主机发送起始信号->从机地址+ 0 ->从机ACK->从机发送8位数据+主机ACK(九帧)->从机发送8位数据+主机ACK…->从机发送8位数据+主机不ACK ->主机发送 停止信号
————————————————————————————
五、习题
在这里插入图片描述
空闲状态一开始SCL和SDA都为高电平状态

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值