前言

参考文章/博主

概念

  • 通信接口

内部通信接口: 主要用于板级信号传输,通常应用于设备内部,特点是速度快,距离短,常用的有 UART,IIC,SPI 等接口。

外部通信接口: 主要用于设备级信号传输,通常应用于设备之间,特点是速度慢,距离远(差分传输),常用的有 RS-232,RS-485,CAN等接口。

  • 通信方式单工

信号只能单方向传输

半双工/准双工

信号可以双方向传输,但同一时刻只能一个方向传输,比如 IIC,RS-485,CAN

全双工

信号可以同时双方向传输,比如 UART,SPI,RS-232

  • 同步传输与异步传输

同步传输

具有同步时钟,比如IIC,SPI

需要外界的时钟信号进行通信,是把数据字节组合起来一起发送,这种组合称之为帧,其传
输速度比异步传输快

异步传输

没有同步时钟,通信双方按约定速率传输,比如UART

是一种典型的基于字节的输入输出,数据按每次一个字节进行传输,其传输速度低

  • 通信网络

① 一对一传输,不能构成总线网络,比如 UART,RS-232

② 一对多传输,可以沟通总线网络,通过地址或片选识别,比如 IIC,SPI,RS-485,CAN

  • 并行通信

并行通信是指同时发送各个数据位(bit),使用并行通信发送8个比特位的示意图如图所示:

  • 串行通信

串行通信是指一个接一个地发送各个比特位,一般地,并行通信的速度比串行通信的速度更快,但所需要的数据引脚也更多,通过串行通信发送8个比特位的示意图如图所示:

请说明总线接口USRT、I2C、USB的异同点

UART:通用异步串行口,速率不快,可全双工,结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件上两线,一收一发

I2C:双向、两线、串行、多主控接口标准。速率不快,半双工,同步接口,具有总线仲裁机制,非常适合器件间近距离经常性数据通信,可实现设备组网

SPI:高速同步串行口,高速,可全双工,收发独立,同步接口,可实现多个SPI设备互联,硬件3~4线

USB:通用串行总线,高速,半双工,由主机、hub、设备组成。设备可以与下级hub相连构成星型结构

RS232和RS485通讯接口有什么区别?

  1. 传输方式不同。 RS232 采取不平衡传输方式,即所谓单端通讯。 而 RS485 则采用平衡传输,即差分传输方式
  2. 传输距离不同。 RS232 适合本地设备之间的通信,传输距离一般不超过 20m 。而 RS485 的传输距离为 几十米到上千米
  3. 设备数量。 RS232 只允许一对一通信,而 RS485 接口在总线上是允许连接多达 128 个收发器
  4. 连接方式。 RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而 RS485, 使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用 4根线

总结:从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485 规定了这些电流在什么样的线路上流动和流动的样式。

UART

定义 :UART是一种通用串行数据总线,用于异步通信(没有时钟线)。该总线双向通信,可以实现 全双工传输和接收(因为发送和接收的线分开的)

在单片机产品设计中,UART主要用于设备与设备之间的通讯,设备与传感器之间的通信。例如通过RS-485接口,构成工业设备系统总线。

UART没有时钟线,所以想要通信,需要提前就传输速度达成共识(设置相同的波特率)

比特率和波特率是不一样的东西,但是有时候它们正好又相等

比特率就是单位时间内传输了多少位(比特),单位是bit/s

波特率是单位时间内传输了多少 符号,这个 符号 就是编码(调制),原本一位一位来看,只有两种离散值0和1,但是经过调制假设现在是两位两位来看就又有多种离散值了

  • 01001111这串信号,比特率还是8b/s,即一秒传8位,如果我们四位四位来看(即一个符号4位),波特率是多少呢?(也就是每秒能传多少个符号呢)

一个符号4位,一秒能传8位,所以一秒传2个符号。2 = 8 / 4

所以公式等于:比特率 = 波特率×log2(N)\text{比特率 = 波特率}\times log2(N),N表示有几种离散值

波特率越大,一次传输的位数越多,但是后面解调所需的时间也就越大

UART可以分两层,物理层和协议层

  • 物理层

规定具体的物理实现标准,即接口标准

  • 协议层

默认高电平是由于上拉电阻的原因

数据发送是 先发低再发高

当总线处于空闲状态时,线路保持 高电平,发送数据前会发送一个 0,让总线从高电平变成低电平(起始位),然后发送8位数据,发完后发送一个 1,表示停止,让总线回到高电平状态

关于这个奇偶校验位,又分为 奇校验偶校验,在奇校验模式下,校验位的数值是0或1,以保证整个数据帧中所有数据位(包括校验位)中“1”的数量是奇数,而在偶校验模式下,校验位的数值也是0或1,但是要保证所有数据位(包括校验位)中“1”的数量是偶数