赞
踩
在RS232串口通信中,看到一个奇特的现象,就是需要通信的双方各自独立地设置相同的的数字时钟,即波特率,以确保数字通信的双方的二进制比特传输信号时钟频率是一致的。这种方式简化了通信的硬件实现,但这种不灵活性也带来很大的麻烦。
本文的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)以及数字信号解码器之间。
中断信号:不属于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读数据
中断信号:不属于I2C总线,但可以用于I2C Slave外设通知MCU,其内部发生了某种事件,请求MCU进行读写操作。
ADDR:I2C支持1个master,连接多个Slave的场景,ADDR信号用于设置某个I2C Slave设备的I2C地址,ADDR也不属于I2C总线。
SCL: 时钟信号,用于Slave设备从Master设备获取数字通信所必须的同步时钟。
SDA: 双向、地址数据线,这是一根复用信号线。(1)地址和数据复用;(2)Master读数据和写数据复用
MCU的I2C或SPI驱动程序
需要写入寄存器的数据
I2C和SPI总线都支持一个master连接多个Slave。
因此这里需要指定:Slave设备的地址 + Slave内部寄存器的地址.
(1)物理层帧帧结构
SPI总线并没有定义物理层的帧结构的标准,不同的Slave芯片设备,采用不同的物理层帧结构,这里仅仅展现其中的一种实现。
从上述示意图可以看出:
通信两端的Master和Slave的时钟同步,通过专用的时钟信号线和片选信号的配合完成。
(2)并串转换
完成控制器内部的二进制并行数据到线路上二进制串行数据的转换。
硬件实现逻辑比较简单,只需要一个移位寄存器就可以实现。
在移位脉冲的作用下,依次输出二进制串行数据流。而移位脉冲就是时钟信号。
(3)时钟同步信号
CPL=0,当SPI总线空闲时,SCK 时钟线为低电平。
CPL=1,当SPI总线空闲时,SCK 时钟线为高电平。
对于一个时钟周期内,有两个edge,如下图的蓝色框所示,
分别称为:
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个跳变沿处采样数据。
(1)I2C 物理层帧结构
I2C的SDA 是半双工分时复用总线。发送和接收分时复用SDA总线。
I2C是如何做到分时复用同一个根总线(信道)呢?
写操作
读操作
从上述示意图可以看出:
通信两端的Master和Slave的时钟同步,通过专用的时钟信号线完成,因此不需要比特同步
(2)并串转换
完成控制器内部的二进制并行数据到线路上二进制串行数据的转换。
(3)时钟同步信号
——–标准速度:100kbps
——–快速模式:400kbps
——–高速模式:3.4Mbps
(1)符号(symbol)的定义
这里的符号,与信源编码提到的符号不是一个概念。信源编码的符号是信息的最小载体,如文字符号、图像符号、声音符号等。
这里的符号是底层的电子通信层面的一个概念,是一个具有一定时间长度的、一定形状的电信号就是符号,或者说具备某种特征量(幅度、频率、相位)的电信号就是符号,从示波器上看,就是电信号的波形,是二进制比特数据的最小载体或最小单位。
虽然,该概念,在I2C和SPI串口通信中没有很显现的作用,但这个概念非常非常的重要,在无线通信中会反复使用该概念。
(2)基本电信号波形的分类
而在电信号通信的系统中,常用两种基本的电信号波形承载数据。
符号可以是数字波形的矩形波,也可以是模拟波形的正弦波,也可以是基本模拟波形的复合体。
通过控制矩形波的电信号参数来承载数据。
常见的参数有:
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)比特率、码片率、波特率、符号速率
在计算机通信中,经常会听到这三个代表数据传输速率的词。这三个词,既有关联,又有所不同,这跟底层的码元编码方式有很大的关系。下图展现了不同速率之间的层次关系:
在I2C和SPI串口通信中个,二进制比特与电信号波形之间编码采用的是1对1的关系,因此这几个速率是完全等同的。
(1)起始位与停止位的产生
I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。
起始和结束信号总是由主设备产生。
当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;表示有数据准备发送。
在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;
而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。
如图所示:
(2)I2C数据的传输
在了解起始条件和停止条件后,我们再来看看在这个过程中数据的传输是如何进行的?
数据传输以字节为单位。
主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位,此时才认为一个字节真正的被传输完成。
当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否定应答位。
数据传输的过程如图所示:
(3)带地址信息的数据传输
I2C总线上的每一个设备都对应一个唯一的地址,
主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
如图所示:
CPU的写数据:
CPU的读数据,
数据的上行与下行,是由协议预先协商好的,并且有方向位决定。
I2C和SPI总线是芯片与芯片之间的通信总线,因此,传输信道实际上就是PCB板上的敷铜走线。
线路上传输的电信号与Master发送时的电信号是完全一致的
以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)不需要专门的时钟信号线在两个通信的节点之间传递时钟,而是通过特定的物理层的编码技术,实现在传输数据的同时,也同时能够传递同步时钟。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。