第5章 I2C接口及其应用

总线(Bus)是计算机世界的关键概念,数据总线、地址总线、控制总线(统称三总线)等用于MCU片内的CPU、存储器和I/O功能单元之间互联,我们熟悉的USB、Ethernet等通讯总线常用于系统间通讯(将在第9章了解这些总线), 还有一些我们不熟悉但用来连接嵌入式系统内部组件的重要总线,过去我们通常把MCU片上的三总线延伸到片外用于连接系统内组件,这种伪共享型并行总线不仅占用很多I/O引脚, 还使得MCU的片外功能组件占用很大的PCB面积,除了高带宽和大数据量的视觉传感器、大屏幕高分辨率的点阵显示器等组件仍在使用此类总线外, 现今的大多数嵌入式系统内组件都使用少信号线的通讯总线。

嵌入式系统内部(组件之间)的数字通讯总线接口主要包括1-Wire(单总线)、2-Wire(即I2C)、SPI(3-/4-Wire)、I2S(IC之间音频总线)和TTL异步串口等。除了I2S和异步串口之外, 其他通讯接口所使用的信号线个数如其名称。I2S与I2C一样都由Philips电子部门提出,I2S专门用于PCM(脉冲编码调制)等音频数据传输,一般使用3或4根信号线即可传输单声道或立体声音频数据。 异步串口不仅用于嵌入式系统内部的组件之间也用于嵌入式系统之间通讯,譬如我们使用该接口实现BlueFi与电脑之间传输数据,双工的异步串口使用独立的数据发送和接收信号线, 单工通讯则只需要其中一根信号线即可,我们将在第7章详细了解该接口。SPI接口是一种多组件伪共享的总线,但每个从组件必须有额外独立的片选(Chip Select), 第6章将会详细探讨该接口。I2C(集成电路互联接口)和单总线都是真正的多组件共享总线,分别使用2根和1根信号线即可连接上百个嵌入式系统组件。

本章将详细了解I2C主从设备的接口单元结构组成和工作原理、通讯时序和协议、主/从模式的工作流程和编程控制,并以BlueFi板载的温湿度、加速度和陀螺仪等传感器为例掌握I2C类组件的接口应用和编程。


Note

通讯接口相关的基础概念:

  1. 双工,允许通讯双方之间互相传输数据。按通讯收发机制又分为全双工和半双工
  2. 全双工,允许通讯双方同时互相发送和接收数据,这意味着通讯接口拥有2各独立的信息收发通道
  3. 半双工,允许通讯双方互相传输数据,但任意时刻仅允许一个发送者(另一个则为接收者)
  4. 单工,只允许单方向传输数据,通讯双发的角色是固定的:一个发送者,一个接收者
  5. 并行通讯,传统的三总线是典型的并行通讯,每一个时钟周期能够传输半字节/整字节/多字节(由数据总线宽度决定)信息
  6. 串行通讯,每一个时钟周期只能传输单个二进制位,将待传输的数据按MSB(最高位)到LSB(最低位)或反之的顺序逐位传输
  7. 同步串行通讯,使用独立的数据线和同步时钟线的串行通讯接口,每一个数据位时钟与一个时钟对齐
  8. 异步串行通讯,无同步时钟线,仅用一根数据线的串行通讯接口,仅使用一个或若干个特殊同步位来对齐字节数据