图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

在RS232串口通信中,看到一个奇特的现象,就是需要通信的双方各自独立地设置相同的的数字时钟,即波特率,以确保数字通信的双方的二进制比特传输信号时钟频率是一致的。这种方式简化了通信的硬件实现,但这种不灵活性也带来很大的麻烦。

本文的I2C和SPI总线通信案例,将展现如何通过专用的时钟信号线进行数字时钟同步。

之所以,把这两个案例放在一起,是因为,从通信原理的角度来看,这两种通信方式有极大的相识性,也有一定的差别。

通过比较,可以对计算机数字通信的物理层原理,有一个更加深刻的认识!


目录:

一. 什么是I2C和SPI通信

二. I2C和SPI通信案例的需求架构

三. I2C和SPI通信的软硬件实现方案

四. I2C和SPI通信的原理模型

五. 信源对信息的发送过程(向寄存器写数据)及其关键原理

六. 信道对信息的传输过程

七. 信宿对信息的接收过程及其关键原理



一. 什么是I2C和SPI通信

SPI (Serial Peripheral interface 串行外围设备接口)是由Motorola公司开发的一种4线制、全双工、同步、主从、串行总线,是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。

SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口,一般使用4 条线:串行时钟线SCK、主机输人/从机输出数据线MISO、主机输出/从机输人数据线MOSI 和低电平有效的从机选择线SSEL.

 

I2C总线是由Philips公司开发的一种2线制、半双工、同步、主从、串行总线。是微处理控制单元(MCU)和外围设备之间进行通信的同步串行端口。

I2C只需要两根线即可在连接于总线上的器件之间传送信息, 一般使用2条线: SDA(串行数据线)和SCL(串行时钟线)。

上述两个串行总线主要应用在EEPROM、Flash、实时时钟(RTC)、数模转换器(ADC)、网络控制器、MCU、数字信号处理器(DSP)以及数字信号解码器之间。


二. I2C和SPI通信案例的需求架构

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步


三. I2C和SPI通信的软硬件实现方案

1. SPI通信的软硬件架构

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

中断信号:不属于SPI总线,但可以用于SPI Slave外设通知MCU,其内部发生了某种事件,请求MCU进行读写操作。

CS:SPI支持1个master,连接多个Slave的场景,CS用于选择与Master通信的Slave设备。

SCK: 时钟信号,用于Slave设备从Master设备获取数字通信所必须的同步时钟。

MOSI: Master out Slave In, 用于Master向Slave发送二进制比特数据,即Master向Slave写数据

MISO: Master In Slave Out,用于Slave向Master发送二进制比特数据,即Master从Slave读数据

 

2. I2C通信的软硬件架构

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

中断信号:不属于I2C总线,但可以用于I2C Slave外设通知MCU,其内部发生了某种事件,请求MCU进行读写操作。

ADDR:I2C支持1个master,连接多个Slave的场景,ADDR信号用于设置某个I2C Slave设备的I2C地址,ADDR也不属于I2C总线。

SCL: 时钟信号,用于Slave设备从Master设备获取数字通信所必须的同步时钟。

SDA: 双向、地址数据线,这是一根复用信号线。(1)地址和数据复用;(2)Master读数据和写数据复用

 

3. 一个master,多slave模型

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步


四. I2C和SPI通信的原理模型

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步


五. 信源对信息的发送过程(向寄存器写数据)及其关键原理

1. 信源

MCU的I2C或SPI驱动程序

 

2. 离散的数据信息

需要写入寄存器的数据

 

3. 网络层编码

I2C和SPI总线都支持一个master连接多个Slave。

因此这里需要指定:Slave设备的地址 + Slave内部寄存器的地址.

 

4. 物理层信道编码

4.1 SPI物理层信道编码

(1)物理层帧帧结构

SPI总线并没有定义物理层的帧结构的标准,不同的Slave芯片设备,采用不同的物理层帧结构,这里仅仅展现其中的一种实现。

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

从上述示意图可以看出:

  • 比特时钟同步字前导码:无

       通信两端的Master和Slave的时钟同步,通过专用的时钟信号线和片选信号的配合完成。

  • 帧头起始定界符编码:无
  • 帧检错纠错编码:无,无奇偶校验码和CRC校验码,也无纠错机制。
  • 帧结束定界符编码:无

 

(2)并串转换

完成控制器内部的二进制并行数据到线路上二进制串行数据的转换。

硬件实现逻辑比较简单,只需要一个移位寄存器就可以实现。

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

在移位脉冲的作用下,依次输出二进制串行数据流。而移位脉冲就是时钟信号。

 

(3)时钟同步信号

  • 专用的信号线:通过SCK信号线在Master和Slave之间传递时钟
  • CPOL: SCK时钟极性控制位。该位决定了SPI总线空闲时SCK 时钟线电平状态

        CPL=0,当SPI总线空闲时,SCK 时钟线为低电平

        CPL=1,当SPI总线空闲时,SCK 时钟线为高电平

  • CPHA: 时钟相位控制位。该位决定了SPI总线上数据采样位置

对于一个时钟周期内,有两个edge,如下图的蓝色框所示

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步
分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,

那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,

那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),

对于开始电压是0,那么就是1变成0的时候;

CPHA=0,SPI总线在时钟线的第1个跳变沿处采样数据。

CPHA=1,SPI总线在时钟线的第2个跳变沿处采样数据。

 

  • 时钟频率:设置SPI 时钟线的频率,即波特率。

        全双工通信,传输速率可达几十Mbps水平

 

4.2 I2C 物理层信道编码

(1)I2C 物理层帧结构

I2C的SDA 是半双工分时复用总线。发送和接收分时复用SDA总线。

写操作

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

读操作

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

从上述示意图可以看出:

  • 比特时钟同步字前导码:无,物理层的帧结构中,没有帧同步比特串编码。

       通信两端的Master和Slave的时钟同步,通过专用的时钟信号线完成

  • 帧头起始定界符编码:S起始标志位
  • 帧检错纠错编码:无奇偶校验码和CRC校验码,但可以通过应答机制,采用ACK/NAK应答,标识数据是否已经被对端正确接收,如果超时则重传。
  • 帧结束定界符编码:P表明数据帧传输结束。

(2)并串转换

完成控制器内部的二进制并行数据到线路上二进制串行数据的转换。

(3)时钟同步信号

  • 专用的信号线:通过SCL信号线在Master和Slave之间传递时钟.
  • 时钟频率:设置I2C 时钟线的频率,即波特率。

——–标准速度:100kbps
——–快速模式:400kbps
——–高速模式:3.4Mbps

 

4. 电信号的符号/码元编码,英文为symbol

(1)符号(symbol)的定义

这里的符号,与信源编码提到的符号不是一个概念。信源编码的符号是信息的最小载体,如文字符号、图像符号、声音符号等。

这里的符号是底层的电子通信层面的一个概念,是一个具有一定时间长度的、一定形状的电信号就是符号,或者说具备某种特征量(幅度、频率、相位)的电信号就是符号,从示波器上看,就是电信号的波形,是二进制比特数据的最小载体或最小单位。

虽然,该概念,在I2C和SPI串口通信中没有很显现的作用,但这个概念非常非常的重要,在无线通信中会反复使用该概念。

 

(2)基本电信号波形的分类

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

而在电信号通信的系统中,常用两种基本的电信号波形承载数据。

符号可以是数字波形的矩形波,也可以是模拟波形的正弦波,也可以是基本模拟波形的复合体。

 

  • 数字通信:用矩形波或方波

通过控制矩形波的电信号参数来承载数据。

常见的参数有:

a) 幅度:通过控制电信号的幅度来承载信息,如

在正逻辑中,如TTL电平中,采用的就是用高电平(如5V)表示二进制的“1”;用低电平(如<0.2V)表示二进制“0”。

I2C和SPI2串口通信采用的正是这种正逻辑。

当然,所有正逻辑,就要负逻辑,RS232通信就采用的是负逻辑。

 

b) 周期或频率:通过控制电信号符号的发送周期或频率,来传送不同速率的数据。

这时候的电信的传输速率,称之为符号速率或波特率。

 

  • 模拟通信:正弦波或余弦波

通过控制正弦波的电信号参数来承载数据。

常见的参数有:

幅度:通过控制正弦波的幅度来承载二进制数据,称为ASK.

相位:通过控制正弦波的相位来承载二进制数据,称为PSK.

频率:通过控制正弦波的频率来承载二进制数据,称为FSK.

在介绍无线通信案例时,再深入探讨这个主题。

 

(2)码元(symbol)的定义

英文也是symbol,是符号在数字电子通信的别名,即如果电信号的符号是数字电信号时,给它取个别名:码元。

 

(3)码元编码

一个码元可以承载一个比特的二进制数据,也可以由多个码元承载1个二进制比特,也可以由多个码元承载多个二进制比特。

这就是码元编码:(1)采用什么样的码元信号,或码元符号表示逻辑的0或1;(2)采用多少码元,表示二进制的逻辑的0和1。

不同的通信方式,又不同的码元编码方式。

从码元形状与二进制比特的关系来看:

I2C和SPI串口通信采用的是:+5V表示二进制逻辑“1”; 低电平表示+5V表示二进制逻辑“0”

RS232串口通信采用的是:-3V~-15V表示二进制逻辑“1”; 低电平表示+3V~+15V表示二进制逻辑“0”;

 

从码元数量与二进制比特的比例关系来看:

I2C和SPI串口通信,均采用的是1:1的关系,即一个码元,代表一个比特的二进制数:0或1.

其他更加复杂的映射关系,在后续的其他通信方式中再进行深入的探讨。

 

(4)比特率、码片率、波特率、符号速率

在计算机通信中,经常会听到这三个代表数据传输速率的词。这三个词,既有关联,又有所不同,这跟底层的码元编码方式有很大的关系。下图展现了不同速率之间的层次关系:

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

  • 比特率:表示每秒钟传送的二进制比特的个数。
  • 码片率:表示每秒钟传送的二进制码元的个数。
  • 波特率:表示每秒钟传送的数字符号的个数。
  • 符号率:表示每秒钟传送的模拟符号的个数。

在I2C和SPI串口通信中个,二进制比特与电信号波形之间编码采用的是1对1的关系,因此这几个速率是完全等同的。

 

5. 信号的发送与接口

5.1 SPI信号发送的时序

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

5.2 I2C信号发送的时序

(1)起始位与停止位的产生

I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。

起始和结束信号总是由主设备产生。

总线在空闲状态时,SCL和SDA都保持着高电平,当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;表示有数据准备发送。

当SCL为高而SDA由低到高的跳变,表示产生一个停止条件,表示数据发送完成,恢复到高电平状态。

在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;

而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。

如图所示:

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

(2)I2C数据的传输

在了解起始条件和停止条件后,我们再来看看在这个过程中数据的传输是如何进行的?

数据传输以字节为单位。

主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位,此时才认为一个字节真正的被传输完成。

当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否定应答位。

数据传输的过程如图所示:

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

(3)带地址信息的数据传输

I2C总线上的每一个设备都对应一个唯一的地址,

主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。

如图所示:

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步


六. 信道对信息的传输过程

I2C和SPI总线是芯片与芯片之间的通信总线,因此,传输信道实际上就是PCB板上的敷铜走线。

线路上传输的电信号与Master发送时的电信号是完全一致的

以SPI总线为例。

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

 

图解通信原理与案例分析-7:I2C总线和SPI总线通信--专用的时钟信号线进行数字时钟同步

I2C总线也是类似的。

 


七. 信宿对信息的接收过程及其关键原理

信宿对信号的接收和解码过程与信源对信号的编码与发送正好是反向过程。

(1)信号的接收:Slave设备从线路上接收特定时序的电信号

(2)符号/码元解码:Slave设备把特定时序的电信号进行解码,转换成二进制的比特流

(3)L1信道解码:Slave设备从二进制的比特流,还原物理层的帧结构,并根据物理层帧的结构分离出帧中的各个域,包括帧前导、帧开始和物理层帧的净荷。

(4)L2-4网络解码:从物理层帧的净荷中,获取设备的地址、寄存器的地址和相应的数据信息。

(5)离散的数字数据:得到需要写入寄存器中的数据。

(6)信宿:Slave从设备

 

至此,

信源master,通过I2C和SPI总线,把需要发送给slave的二进制数据,经过层层编码,并转换成特定时序的电信号,通过PCB连线,发送到Slave。

信宿Slave,从线路上接收到特定时序的电信号,然后经过层层解码,获得master发送过来的二进制数据,最后把接收到的二进制数据写入到自己的内存中。


结束语:

至此,我们通过Uart通信、I2C通信、SPI通信阐述了数字通信的基本过程与核心概念。

这三种通信方式的共同点,就是通过TTL数字电平信号传送0和1二进制数据。每个完整的数字电电平信号,代表一个二进制比特的0或1。且需要传输的物理层帧的二进制数据与线路上传送的信号电平之间是完全的1对1的映射关系。

后续,我们将进一步探讨以太网通信,在以太网通信中有两个显著的不同点:

(1)需要传输的物理层帧的二进制数据与线路上传送的信号电平之间是不再是1对1的映射关系。

(2)不需要专门的时钟信号线在两个通信的节点之间传递时钟,而是通过特定的物理层的编码技术,实现在传输数据的同时,也同时能够传递同步时钟。