从底层了解IIC

iic的协议解释网上已经很多,但一直想搞清楚器件是如何处理数据的,结合所学知识,总结一下所理解的iic通讯。iic通讯协议通常包含6个基本的信号功能,开始信号、结束信号、接收应答、发送应答、接收数据、发送数据。
想要搞明白处理数据的流程,就要了解iic电路的内部结构,以STM32F40X系列为例,其内部结构框图如下:
在这里插入图片描述
在这里插入图片描述

这里的电路图就是STM32的iic硬件实现的内部框图,也像iic器件一样有多个硬件地址,以往写器件时总是站在主机的角度进行编写,但iic是一个多主多从的协议,当前的主机也可以成为后面的从机,所以使用硬件iic实现时可以配置地址。iic通讯时,只允许总线上任意时刻只有一个主机,只有主机向从机发送相应指令请求,并释放总线,从机才能进行回复,而且总线的时钟线时钟线只有主机拥有权限。这也是实现同步传输的根本。
以二氧化碳传感器为例,可以从产品的说明书中可以看到其内部框图,其中
在这里插入图片描述

其中PD为光敏二极管,AMP 为集成运算放大器:将 PD 电流转换为 PD 电压。ADC 模数转换获取 16 位数字数据,Logic + IC Interface(逻辑+ IC 界面)就是封装的好的集光强度计算和 I 2 C 总线的电路,暂时无法找到内部框图。以stm32的电路为例我们开始一步步解释iic数据是如何进行处理的,在此之前我们先复习一下几个数电的知识点,你要明白锁存器,触发器相关内容才能更好的理解数据处理的过程,因为底层电路都是由其构建。
以D锁存器为例,可以知道当E为低电平时,D如何改变都不会影响Q输出,实现类似锁住数据的功能,E为高电平时,Q输出随D改变。这里可以联想到IIC发送数据时电路情况,即SCL为低电平时,SDA可以改变数据0/1,当SCL为高电平时,数据不再改变,此时数据数据被锁存,也就实现了数据的传送,
但如何接收下一位数据呢,这就要用到内部的数据移位寄存器,在SPI中已经讲过此寄存器,这里不再赘述。
在这里插入图片描述

下面开始正式讲解iic取数据的完整流程:

开始信号:
在这里插入图片描述
在这里插入图片描述

元器件检测到SCL为高,SDA出现下降沿时为开始信号,这里其实就是边沿触发器中的上升沿触发器起到的作用,这里的scl就是触发器中控制引脚的作用,所以总线协议里有效信号都是在SCL为高时。

IIC通讯中第一个数据都是通讯地址,当总线上主机发送开始信号时,所有从设备都会处于读取数据状态,读取的第一个(设备地址7bit)数据将会首先进入比较寄存器与设备出厂地址(一般模块都有可变地址)进行比对,当数据完全相同时,即为主设备与其通讯,将会继续读取后面数据,反之,停止工作,直到下一个起始信号。
协议是如何读取数据的呢,首先数据是存放在寄存器中,可以类比C语言,数据被放在一定的地址空间,想要读取数据,就要知道其内存地址,也可以说就是指针,iic协议里写入地址后,再次写入的数据就是地址,如果再写入就是在相应地址里写入数据。当我们想要读取数据时,指针移位到相应地址,再次开始信号后,读写位写入1进行读操作,元器件内部将会利用移位寄存器对从数据寄存器得到的数据进行一位一位的移出操作,这里同样是使用了锁存器,控制其移位的节奏还是SCL,而这里SCL的控制主权一直在主设备,所以可以实现在真正的同步传输,因为只有主设备控制SCL进行高低电平时,才会产生上升沿/下降沿,才会触发从设备的触发器,才能进一步的释放数据,此时主设备只需要继续读取移位寄存器移出的表现在SDA上的电平就能得到相应的数据。

IIC写入和读取数据都遵循以下方法
指定地址写:对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)
例如:在这里插入图片描述

就是对1101000 设备的0001 1001地址写入1010 1010数据
指定地址读:对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data),读取数据要明白其内部机理,其内部存才类似PC指针,想要读取相应寄存器的值,指针就要移动到相应的寄存器,二写操作就可以将指针移动到相应的位置,所以IIC的读总是离不开写的步骤。

以一次读出数据为例:
在这里插入图片描述

就是将指针指向设备1101 000的0001 1001寄存器地址,然后对设备1101 000开始读取一个字节数据数据。其内部指针是连续的,如果想要继续读取指针也会随着向后面的地址移动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值