【基础通信协议】——IIC
引言
IIC是产品设计中最常用的通信接口,众多的传感器都会提供IIC接口来和主控连接,如陀螺仪、加速计、触摸屏等。所以IIC是嵌入式学习必须要掌握的。
本次只是讲解理论,不做实际实验操作,因为我现在在学Linux,使用的IMX6ULL大家手里面也可能没有这个板子,所以就不做演示啦。
IIC简介
IIC是很常见的一种总线协议,IIC是由NXP(恩智浦)公司设计的,IIC使用两条线在主控制器和从机之间进行数据通信。一根为SCL(串行时钟线),另一条为SDA(串行数据线)。通常这两根线都需要接上拉电阻,使总线空闲的时候SCLSDA都处于高电平状态。
IIC总线的标准速度可以达到100Kb/s,快速模式下可以达到400Kb/s。
IIC总线工作是按照一定协议来与运行的。IIC是支持多从机的。也就是一个IIC控制器下面可以挂多个IIC设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的设备了。
如上图,SDA和SCL两根线都有一个上拉电阻,一般是4.7K。其余的IIC器件都挂在总线上。
协议术语
起始位
IIC通信起始标志,告诉IIC从机“我要开始IIC通信了”,SCL为高电平的时候,SDA出现下降沿就表示起始位。
停止位
停止IIC通信的标志位,和起始位的功能相反。当SCL处于高电平的时候,SDA由低变高出现上升沿为停止位。
数据传输
IIC总线在数据传输的时候要保证SCL高电平期间,SDA上的数据稳定,因此SDA的数据变化只能在SCL处于低电平的期间发生。
应答信号
当IIC主机发送完8位数据以后会将SDA设置为输入状态,等待IIC从机应答,也就是等IIC从机告诉主机它可以接收数据了。应答信号是由从机发起的,主机需要提供应答信号所需的时钟,主机发送完8位数据以后紧跟着一个时钟信号就是给应答信号使用的。从机通过将SDA拉低来表示发送应答信号,表示通信成功,否则表示失败。
时序
主机通过IIC总线与从机之间进行通信主要两个操作:读和写。
IIC写时序
具体步骤
-
开始信号
-
发送设备地址:每个IIC器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个IIC器件。发送8位数据,7位位设备地址,第8位为读写位(1表示读操作,0表示写操作)。
-
等待应答:等待从机发送ACK应答
-
重新发送开始信号
-
发送寄存器地址
-
等待应答
-
发送要写入的数据
-
等待应答
-
停止信号
IIC读时序
具体步骤
-
发送开始信号
-
发送设备地址7位,第8位为读写位,此时为写状态(0)
-
等待应答
-
重新发送开始信号
-
发送寄存器地址
-
等待应答
-
重新发送开始信号
-
重新发送设备地址,这里第8位置1(读状态)
-
等待应答
-
从IIC器件中读取到的数据
-
主机发送NOACK信号,表示读取完成
-
发送停止信号
如果我们需要读写多字节,那么在读写数据的时候可以连续发送多个自己的数据,其他的控制时序和单字节是一样的。
相关文章
【通信协议】——CAN
CAN的全称为“控制器局域网络”(COntroller Area Network),它主要应用于汽车电子行业,由德国的BOSCH公司(博世,欧洲家电第一,德国人的东西值得信赖)开发。 CAN物理层 与IIC和SPI不同,CAN总线没有时钟线,所以CAN通讯并不是以时钟信号来进行同步的,**是一种异步通信方式,且只有CAN\_H,CAN\_L两条线共同组成差分信号线**。 闭环总线电路...
【通信协议】——串口通信
_注:串口通信包括同步(UART)和异步(USART),开发中常用的为UART,所以本次也侧重介绍UART。_ 串口通信是一种设备非常常用的串行通信方式,因为他简单便捷,因此目前大部分电子产品都支持该通讯方式。产品开发中,工程师也常使用串口用来调试。 物理层 物理层负责数据的实际传输,即通过电缆、无线等媒介发送和接收比特流。 串口通信的物理层有很多标准及变种,通常使用RS-232、RS-...
【基础通信协议】——SPI
引言 SPI同样也是一个很常用的通信接口,也可以通过SPI来连接众多的传感器。相对IIC,SPI的通信速度更快,SPI可以达到几十MHz。所以在很多要求高速通信的场景会选择使用SPI总线,所以SPI总线也是我们嵌入式学习必不可缺的一部分。 SPI简介 SPI全称为Serial Perripheral Interface,也就是串行外围设备接口。SPI是由Motorola(摩托罗拉)公司推出...