通信协议之IIC总线

Posted 海洋想想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通信协议之IIC总线相关的知识,希望对你有一定的参考价值。

文章目录

前言

IIC通信协议是Philips公司开发的,由于其引脚少,硬件简单,无须收发设备,因此应用广泛。本文主要简单介绍一下IIC协议。

本文主要参考一下资料:

  • 刘火良, 杨森. STM32库开发实战指南——基于STM32F4.机械工业出版社
  • NXP Semiconductors.PCF8574手册

物理层


IIC的物理层有以下几个特点:

  1. 支持多个设备 。在同一个IIC总线中,可以挂载多个主机和从机。每个连接到总线的设备都有单独的地址,主机可以通过不同的地址来访问不同的从机。
  2. IIC总线只有两条线路:SCL和SDA。其中,SCL为时钟线,SDA为数据线。两者都通过上拉电阻连接到2-15V的正电平。上拉电阻一般取1.8k,4.7k以及10k。
  3. IIC总线分成三种模式:标准模式:100kbit/s,快速模式:400kbit/s,高速模式:3.4Mbit/s。但是目前大多数设备并不支持高速模式。
  4. 多个设备同时使用总线时,会通过仲裁的方式决定哪个设备占用总线。
  5. 当IIC设备空闲时,所有设备都为高阻态,则上拉电阻会将总线拉成高电平。

协议层

基本读写过程


上图展示了基本的数据包格式,具体表示如下:

  1. S:起始信号
  2. SLAVE ADDRESS:从机地址
  3. R/W:读写选择位,1为读,0为写
  4. A/A:应答信号
  5. P:停止信号

在通信开始,首先发送起始信号,所有的从机设备都会接收该信号。

紧接着,主机就发送从机地址,当从机的地址与主机发送的地址一致时,该设备被选中,其余的设备忽略接下来的信息。根据IIC协议,从机地址可以为7位或者10位。在实际使用中,7位更加常用。该7位地址和后面一位读写选择位整好组成一个字节。

读写选择位,该位控制数据流的方向。当该位为0时,表示从主机发送到从机。当该位为1时,表示数据由从机发送到主机。

若传输方向为 “写方向” 时,主机继续传输数据,每个数据包为8位 。主机每一次发送完成后,都要等待从机响应。当主机传输结束后,主机向从机发送一个停止信号§,表示不再传输数据。可以用如下图示:

其中,黑色字体为主机发送数据,绿色字体为从机发送数据。

若传输方向为 “读方向” 时,主机接收到应答信号之后,从机开始发送数据,每个数据包为8位 。从机每一次发送完成后,主机返回应答信号。当主机传输结束后,主机首先返回一个非应答信号,然后发送一个停止信号§,表示不再传输数据。可以用如下图示:


其中,黑色字体为主机发送数据,绿色字体为从机发送数据。

除了以上的两种方式,IIC更加常用的为 “复合格式” 。如下图所示:

在复合模式中,同一帧数据有两个起始位。一般在第一次传输中,主机通过从机地址找到从设备之后,发送一段数据。然后,在没有发送结束信号P的情况下,重新发起一次起始信号S,后面跟着相同的从机地址,而数据的传输方向可以发生改变。通常用于以下情况,第一次传输的数据位从设备内部的寄存器或者存储器地址,第二次传输的为对改地址的内容进行读取或者写入。最常用的情况如下图所示:


即主机先向从机发送寄存器地址,然后读取寄存器地址中的数据。

起始信号和停止信号


起始信号和停止信号是两种特殊的状态,如上图所示。起始信号的定义为:当SCL信号为高电平时,SDA信号由高电平切换到低电平;停止信号的定义为:当SCL信号为高电平时,SDA信号由低电平切换到高电平。

数据有效性


IIC使用SDA信号传输数据,使用SCL进行时钟同步。SDA在SCL每个时钟传输一位数据。SCL为高电平时,表示数据有效。SCL为低电平时,SDA数据无效,用于SDA的电平切换。当数据有效时,SDA高电平表示数据1,低电平表示数据0。

地址及数据方向

IIC总线上的每个设备都有自己的地址,主机发起通信时,通过SDA信号线发送从机地址来查找从机。IIC设备地址为7位或者10位,在实际中,7位使用的范围更广泛。在每个字节中,先发送高位,再发送低位

响应

IIC的响应包括“应答”和“非应答”两种信号。此信号由数据接收端发送,当接收端(无论是主机还是从机)希望对方继续发送数据时,则需要向对方发送“应答”信号;否则,若想结束数据传输,则向对方发送“非应答”信号,发送方接受到该信号会产生一个停止信号,结束信号传输。

实例

8574是一款支持100K的IIC芯片。其展示的IIC时序如下所示:

以上是关于通信协议之IIC总线的主要内容,如果未能解决你的问题,请参考以下文章

通信协议之IIC总线

通信协议之IIC总线

Arduino IIC协议笔记

IIC协议详解,附单片机软件模拟源码

IIC协议

IIC协议介绍