串行通信协议汇总
以下内容涉及到I2C、SPI、UART等串行通信协议
一、I2C
1、I2C总线定义
I2C是一种串行总线,只用时钟、数据线实现半双工串行通信,可实现多主机外挂多从机,具有总线总裁和高低速器件同步功能。一般速度在100K-400Kbps,最高为3.5M。
I2C总线通过上拉电阻接正电源,当总线空闲时,总线均为高,因此从器件释放总线即把输出拉为高阻态,总线才能被其他器件使用。当总线任意器件为输出为低,总线即为低,各器件SDA SCL为线与关系。
I2C总线上所有器件都有唯一地址,地址为7bit数据,即可外挂128个从器件。主机即可作为发送器,发送数据给从器件,也可从从器件接收数据。
2、I2C总线协议
起止信号:由主机产生,SCL=1 && SDA_ neg =1表示起始信号,总线处于被占用状态;SCL=1 && SDA_pos=1表示终止信号,总线处于被空闲状态。
等待状态:从机接收完一字节数据后,如果从机要完成其他功能才能接收下一个完整数据,可以将SCL拉低保持低电平,使主机挂起进入等待状态,等释放SCL后数据方可继续传送。
有效数据:只在SCL为低时数据可发生变化;SCL为高时数据必须保持稳定。否则将会使从机器认为是起止信号。
3、数据传送格式
字节传送+应答:每个字节必须8位,从MSB先传送,每传送一个字节后必须跟一位应答,即一帧共9位。若从机无法应答,则需将SDA拉高,而由主机产生终止信号结束总线数据传送。
数据帧格式:(起始)+(地址+传送方向+应答)+(数据+应答)+…..+(结束)
三种形式
a、主机向从机发送数据
从机根据地址判断是否为自己的接收数据,应答都是从机产生。
b、从机向主机发送数据
阴影为主机应答,白色为从机应答,最后的主机非应答表示已接收完数据,等待从机释放总线,并产生结束信号。
c、主向从—>从向主
传送过程需要改变方向,不需要结束信号,直接再产生起始信号即可。
4、时钟同步
所有主机在SCL线上产生自己的时钟来传输I2C总线报文,时钟同步通过线与连接到SCL 线来执行,SCL线总是被有最长低电平周期的器件保持低电平,而低电平周期短的器件会进入高电平等待状态。
5、仲裁
主机只能在总线空闲时启动传输,多主机可能同时产生起始条件。
仲裁在SDA线上发生,由于SDA也是线与逻辑,在其他主机发送低电平时,发送高电平的主机将会断开它的数据输出级,因为总线上点平与它自己的点平不同。
丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。
二、SPI
1、SPI协议
由摩托罗拉公司开发的全双工同步串行总线,Serial Peripheral Interface,由支持多slave模式应用,一般仅支持单Master。
时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps 的水平。
(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK :时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制
2、SPI工作方式
SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。
时钟极性(CPOL):CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平
时钟相位(CPHA):CPHA=0,在串行同步时钟的第一个跳变沿数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(数据被采样。
3、SPI时序
以CPOL=0,CPHA=0为例介绍SPI时序
主器件的输出口(MOSI)输出的数据bit1,比SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL 信号没有关系。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。
从机接收时序,在上跳沿来前半个时钟,第一bit数据已准备好。
从机发送时序,在片选结束后,从机就发送第一bit数据
从机8bit数据接收完,发送第二个byte数据时序
三、UART
UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由
两根线,一根用于发送,一根用于接收。
异步通信协议的实例——起止式异步协议
特点与格式:
其中异步串行通信采用起止式协议,特点是:一个字符一个字符的传,每个字符一位一位串,每个字符由一个起始位开始,1-2位停止位结束,数据位为5-8位,可以跟一位校验位。每个字符间间隔不固定。停止位和空闲位都规定为高电平(逻辑值),这样就保证起始位开始处一定有一个下跳沿。
从图中可以看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起始式协议。传送时,数据的低位在前,高位在后。
异步通信信息格式如表3.1所示
起始位逻辑0 1位
数据位逻辑0/1 5,6,7,8位
校验位逻辑0/1 1位
停止位逻辑1 1、1.5、2位
空闲位逻辑1 任意数量
接收过程:接收端是以系统时钟和波特率因子决定一位数据的时间长度,如波特率为16,则一位数据长度为16个系统时钟。开始通信,以检测到下跳沿开始对时钟计数;计数为8时,再次检测,如为低,则确定为起始位;在进行计数,每计到16则取数据位,依次将全部数据位取出;检测校验位;接收停止位,若此时接收不为高,则报错,若接收到停止位,则对全部数据校验,无错,则将数据由移位寄存器送到数据输入寄存器。
发送过程:初始化后,发送逻辑1,并等待数据发送;有数据要发送时,先发送起始位0,然后从低位D0开始逐位发送数据位;接着发送校验位;最后发送停止位1;发送空闲位1,等待下一字符发送。
接受过程工作在系统时钟下,以系统时钟对数据进行采样,由于系统时钟远大于串行通信速率,因此不会出现采样错误,只需与计数器一起完成采样过程。
发送过程分为加载和发送,加载过程是指将起始位、数据位、校验位和停止位加载到移位寄存器上,加载过程工作在系统时钟下,远大于RS232串行通信速率,因此发送过程需要修改时钟模式,使移位寄存器工作在波特率时钟下,将数据以波特率速率发送到RS232的TXD 端。