常见的串行通信协议

一,UART串口通信

        UART是通用异步收发传输器,使用RxDTxD两根线实现异步全双工通信;为确保通信可靠,可以在通信两边接共地;因此,完整的UART通信只需最少3根线即可。

        RxD是发送数据线,TxD是接收数据线,通信双方使用交叉互联,RxD接对方TxD,TxD接对方RxD。UART使用标准的TTL/CMOS电平(0~5V,0~3.3V,0~2.5V,0~1.8V)来表示数据,高电平表示1,低电平表示0.为了增强抗干扰能力,提高传输长度,可将TTL/CMOS 电平转换为RS232电平逻辑电平,3~12V表示0,-3~-12V表示1(RS232为负逻辑)

1)UART平时处于空闲状态,逻辑1状态。        

2)当有数据发送时,先发送起始位,即将TxD拉低并维持1位时间,接收方在检测到起始位下降沿,等待1.5位后开始一位一位检测数据。

3)发送数据,UART数据一帧可以是5,6,7,8位等,一般是8bit,一个字节。数据发送是先发送低位,依次发送,直到最高位。

4)可以使用0或者1bit的校验位,校验位可以是奇校验或者偶检验。奇校验:数据加校验位中1的个数为奇数;偶校验:数据加校验位中1的个数为偶数。

5)最后是停止位,数据线恢复到空闲状态,停止位可以是1, 1.5, 2位。

缺点:

1)使用的是TTL电平,抗干扰能力差;

2)通信距离短

3)最重要的一点是电气接口不统一。UART只是对信号的时序进行了定义,而未定义接口的电气特性。UART通信时,一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,比如51是5V电压,32是3.3V电压,所以不同的处理器使用UART通信时一般不能直接相连。UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便。

二,IIC

        与UART不同,I2C 是同步半双工通信协议。I2C使用SCL,SDA两根双向数据线进行通信,同时为了支持线与逻辑,需要使用开漏输出,同时使用上拉电阻;上拉电阻大小常见的有1.8K,4.7K,10K;在低速场合,为了降低功耗,可以使用10K上拉电阻,1.8K的上拉电阻具有最好的性能,可满足较高速的应用。I2C常见的通信速率有普通:100K,快速:400K,高速:3.4M。I2C最大的从机数量受从机地址和最大总线电容400pF电容的限制。

IIC主要特点:

1、I2C主、从设备划分:基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。

        IIC主设备功能:主要产生时钟,产生起始信号和停止信号

        IIC从设备功能:可编程的IIC地址检测,停止位检测

2、IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。

当然,在任何时间点上只能有一个主控。

3、支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)

4、SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。

5、IIC是半双工,而不是全双工 ,同一时间只可以单向通信

IIC器件地址:

         每一个IIC器件都有一个器件地址,有的器件地址在出厂时地址就设定好了,用户不可以更改,比如OV7670的地址为0x42。有的器件例如EEPROM,前四个地址已经确定为1010,后三个地址是由硬件链接确定的,所以一IIC总线最多能连8个EEPROM芯片。

IIC的通信协议流程: 

初始(空闲)状态:

        因为IIC的 SCL 和SDA 都需要接上拉电阻,保证空闲状态的稳定性

        所以IIC总线在空闲状态下SCL 和SDA都保持高电平

开始信号:

        SCL保持高电平,SDA由高电平变为低电平后,延时(>4.7us),SCL变为低电平。

停止信号

        停止信号:SCL保持高电平。SDA由低电平变为高电平

        在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。

数据有效性:

        IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态不允许有电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

        SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。

        IIC传输数据的过程中,SCL时钟线会频繁的转换电平,以保证数据的传输。

三,SPI

        SPI 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口(Serial Peripheral Interface),是一种高速全双工的通信总线。 

        SPI接口是一种同步串行总线(Serial Peripheral Interface)多用于实时时钟、Flash存储器(如NOR Flash&Nand Flash),ADC、LCD控制器等外围器件的通讯接口。大大增强了处理器的外设扩展能力。

        SPI是一种全双工、高速的、同步的通信总线。

        时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机;

        SPI定义了4根信号线:

        SCK:时钟线,主机提供

        MISO:主入从出

        MOSI:主出从入

        SS:片选。

        片选信号可选,因此通信最少需要3根信号线。SPI在时钟上升沿下进行双向数据交换,主机在输出的同时,也会接收到从机的数据。在设计上,主机从机均需要一个移位寄存器。SPI不区分读写方向,只进行数据交换,要读也必须写,才能将数据交换过来。

        SPI通过时钟极性和时钟相位定义了4种通信模式:

        时钟极性CPOL:0:空闲时SCK为0,1:空闲时SCK为1.

        时钟相位CPHA:0:数据在第一个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关),1:数据在第二个时钟跳沿采样(可能是上升沿,可能是下降沿,与CPOL有关)。

        若在上沿采样,则数据在下沿输出,因此数据能够稳定的被采样。

极性和相位(了解):

        CPOL :Clock Polarity(时钟极性 )
        CPHA :Clock Phase(时钟相位)
        时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。

        时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设的时钟相位和极性应该一致。

        极性和相位一般重点关注从设备,主设备根据从设备的时序要求进行编程即可。

SPI和串口

        串口通信中,有起始位,有停止位;但是SPI中没有,发完8个字节后,接着发,继续发。其步调是由时钟信号统一协调的。

        串口因为是异步的,没有统一的工作时钟,所以要事先规定好波特率,起始位和停止位。也正因为没有统一时钟,所以容易出错。

        另外,SPI和串口都没有应答机制。有没有接收到发送方也不知道。

        SPI没有特定的空闲时状态,也没有固定的上升沿下降沿读写,有几种模式搭配。

SPI单线通讯模式

        SPI单线模式是将原来的两根数据线改成一根,通讯方式变成了半双工的通讯方式,在接线上,只需要三根线分别是SCLK、I/O、CS。

SPI通讯的优势

        使SPI作为串行通信接口脱颖而出的原因很多;

        全双工串行通信;
        高速数据传输速率。
        简单的软件配置;
        极其灵活的数据传输,不限于8位,它可以是任意大小的字;
        非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。


SPI的缺点

        没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
        通常仅支持一个主设备;
        需要更多的引脚(与I2C不同);
        没有定义硬件级别的错误检查协议;
        与RS-232和CAN总线相比,只能支持非常短的距离;

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值