常见总线协议

前言

IIC、SPI、UART都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器、Touch控制器、指纹模块、蓝牙模块、WIFI模块也都兼容这三种通信方式的一种或几种。
异同点:首先,IIC和SPI都是同步协议,都有时钟信号,在一条总线上也都可以挂多个从机,但是IIC的从机是通过器件地址来区分的,SPI的从机是通过片选线来区分的,所以SPI总线上,每多挂一个从机,就要多用一个线作为片选线,而IIC则不用,只要器件地址不冲突,可以随便挂器件。但是,IIC总线速度一般普遍慢于SPI,IIC一般的速度是100kbs、400kbps和1Mbps,而SPI的速度可以在几Mbps,也可以10+Mbps。UART和SPI、IIC不同,它是异步传输的,一般来说传输速度比较慢,传统的传输速度一般在115200bps或以下,不过现在大部分UART控制器也能支持到4Mbps或者8Mbps了。
使用场景:低速可以选用IIC,如果想速度快点,则一般都要选用SPI。另外,IIC总线的管脚都是开漏输出,必须外接上拉电阻,阻值(一般在4.7k~10k之间)可以根据总线速度来推算。

UART、SPI、IIC协议对比:

对比项 UART SPI IIC
信号线数目 3根(RX、TX、GND) 4根(MISO、MOSI、SCLK、CS) 2根(SDA、SCLK)
设备从属关系 —— 主从架构。SPI用片选信号CS选择从机。 多主从架构。IIC用地址选择从机。
通信方式 全双工通信 全双工通信 半双工通信
通信速率 速度慢 比IIC总线要快,速度可达到几Mbps IIC的速度比SPI慢。具体见本文IIC模式
应用领域 ①UART常用于控制计算机与串行设备的芯片。②像常说的串口,基本都用于调试。 主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 IIC一般是用在同一个板子上的2个IC之间的通信 ,它可以替代标准的并行总线,连接各种集成电路和功能模块。
传输距离 —— —— IIC需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信
通信特征 异步串行,一帧可以传5/6/7/8位。一般从最低位开始传。 同步串行,SPI允许数据一位一位的传送,甚至允许暂停。从最高位开始传。 同步串行,电平信号,一次连续8bit。从最高位开始传。
协议复杂度 结构比较复杂 SPI实现要比UART简单,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 协议比SPI复杂,但是连线比标准的SPI要少。
对比 —— 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比IIC系统要稍微复杂一些。 ——

一、UART

1、概述

UART(通用异步收发传输器)是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。在UART上追加同步方式的序列信号变换电路的产品,被称为USART。
UART由波特率产生器、UART接收器、UART发送器组成。UART的框架图如下所示:UART
在这里插入图片描述

因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。为了解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步;双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。即设备间要使用UART串口通信就必须先约定好传输速率(波特率)和一些数据位。

2、电路连接图

在UART通信中,两个UART通过两条线RX/TX相连可直接通信,连接如下图所示:
在这里插入图片描述

UART可将要传输的资料在串行通信与并行通信之间加以转换,即发送端的UART将来自控制设备(如CPU)的并行数据转换为串行数据,以串行方式将其发送到接收端的UART,然后由接收端的UART将串行数据转换为并行数据以用于接收设备的正常处理。UART通常被集成于其他通讯接口的连接上。UART即我们通常说的“串口”。

3、通信协议

UART工作原理是以字符为传输单位(一般是ASCII),将数据的二进制位一位一位的按顺序进行传输,传输方向可以选择MSB或LSB。通信中两个字符间的时间间隔是不固定的 ,然而同一个字符内两个相邻位之间的时间间隔是固定的。
帧间隔:即传送数据的帧与帧之间的间隔大小,可以用位或者时间为计量。

在这里插入图片描述起始位:开始进行数据传输时,发送方先发一个逻辑0,表示传输字符的开始;依靠检测起始位来实现发送与接收方的时间自同步的。

数据位:即要传输的数据,可以是4、5、6、7、8位逻辑0或者1,构成一个字符,通常采用ASCII码。在大多数情况下,数据首先以低有效位(LSB)发送。如ASCII码8位数据位,从最低位开始传送,靠时钟定位。

校验位:若为奇偶校验,则数据位加上这一位后,使得“1”的位数为偶数(偶校验)或奇数(奇校验)以此来校验数据传送的正确性。若为高校验和低校验,则要知道高位和低位不是真正的检查数据,而是强行将校验位设置为逻辑高或者逻辑低。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

停止位:是一个字符数据的结束标志,可以是1位、1.5位、2位的高电平。适用于停止位的位数越多,不同时钟同步的容忍程度越大,数据传输率同时也越低。

空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为逻辑‘1’即高电平,表示当前线路上没有数据传送。

4、波特率

数据的传送速率用波特率来表示(单位bps),即每秒钟传送的二进制位数,常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。
例子:如果串口波特率设置为9600bps,那么传输1bit需要的时间是:(1/9600)s*10^6≈104.2us。

5、传输方向

传输方向:决定数据传输时,数据位从最高有效位(MSB)开始传输还是从最低有效位(LSB)开始传输。

UART一般为LSB方向。

例子:要传输字母’A’,其ASCII值为65,对应二进制值是01000001,如果MSB就是01000001;如果LSB就是10000010。

6、数据传输

数据传输过程:
①发送端UART从数据总线转换并行数据;
②发送端UART将起始位,奇偶校验位和停止位添加到数据包中;
③整个数据包从发送端UART串行发送到接收端UART;接收端UART按照预先配置好的波特率对数据线进行采样;
④接收端UART解析接收的数据,丢弃数据包中的起始位,奇偶校验位和停止位;
⑤接收端UART将串行数据转换回并行数据,并将其传输到接收端的数据总线。

7、UART / RS232 / RS485

UART是异步串行通信口的总称。 而RS232、RS449、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。在串口通信中,它们的主要区别在于其各自的电平范围不相同。嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。

串口:在嵌入式里指的是UART口,常用TTL电平即3.3V或者5.0V。
COM口:在台式机上常用的口,接口协议只有两种RS232(如DB9接口)和RS485。

UART口、COM口指的是物理接口形式。
TTL、RS232和RS485指的是电平逻辑标准。
TTL电平和RS232电平转换专用芯片有MAX232;TTL电平转USB芯片有CP2102、PL2303、FT230等用USB来扩展串口数量。
在这里插入图片描述

(1)TTL
TTL全名是晶体管-晶体管逻辑集成电路。

  • 输入高电平最小2V,输出高电平最小2.4V,典型值3.4V;
  • 输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。

(2)RS232
RS232 逻辑1电平(MARK)=-5V~-12V,逻辑0电平(SPACE

  • 32
    点赞
  • 284
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值