就嵌入式系统而言,串行通信是使用最广泛的通信方法。在讨论嵌入式行业中使用的串行协议类型并进行比较之前,让我们先了解什么是串行通信。
什么是串行通信?
顾名思义,在这种通信中,数据是串行传输的(一个接一个)而不是并行的(所有东西都在一起)。因此,正如预期的那样,与并行通信相比,串行通信可以使用更少的电线完成,并且它还需要某种同步机制(时钟)才能成功通信。
a2c18d42dc694816bb062c61a9ddead8~noop.image?_iz=58558&from=article.jpg

*注意: 在串行通信中,只有通信是串行完成的,其余的一切,如数据处理等,都是以并行方式发生的,即以寄存器的形式。
串行通信可以进一步分为同步和异步类型。
同步串行通信
在这种类型的通信中,发送器和接收器共享一个公共时钟以保持彼此同步。
异步串行通信
这种类型的串行通信不需要发送器和接收器之间有任何公共时钟源,双方都根据各自独立的时钟工作。
串行通信协议的类型
嵌入式工业中使用了多种类型的串行通信协议。让我们在这里讨论它们:
1. SPI(串行外设接口)
这是一种同步型串行通信协议,由两条数据线(MOSI 和 MISO)、一条时钟线(SCK)和一条从机选择线(SS)组成。
在继续之前,您应该了解一些术语:-
Master – 为通信提供时钟的设备
Slave – 除主机以外的设备,它利用主机的时钟进行通信
MOSI – Master Out Salve In(主机通过该线路向其从机发送数据)
MISO – Master In Slave Out(从属响应主控的线路)
SCK – 串行时钟(主设备提供的时钟)
SS – 从机选择(用于选择主机要与之通信的从机的线路)
在 SPI 中,在任何给定时间都可能只有一个主设备和它下面的几个其他从设备,它们只响应主设备的调用。整个通信由master自己处理;任何奴隶都不能随意发送数据。主机通过 MOSI 发送数据,而从机通过 MISO 线响应。在整个过程中SCK(serial clock)起着非常重要的作用,每个slave设备都依赖这个时钟从MOSI读取数据并通过MISO进行响应。SS(从机选择)用于使特定的从机与主机想要通信的主机唤醒。这是 SPI 的示例:
6bc1cb032bd14f21983f054ab402b3d3~noop.image?_iz=58558&from=article.jpg

现在用于实现SPI通信的寄存器很少,有:
SPDR(SPI 数据寄存器)
➢ 用于存放一个字节的要传输或接收的数据。
SPSR(SPI 状态寄存器)
➢ 该寄存器保存了 SPI 通信所涉及的状态位
SPCR(SPI 控制寄存器)
➢ 该寄存器保存了 SPI 通信中涉及的控制位
以上所有寄存器的长度都是 8 位。
优点:
1. 提供比异步更可靠的同步串行通信
2. 多个设备(Slaves)可以连接到一个master
3. 更快的串行通信形式
缺点:
1. 需要多条从机选择线连接多个从机
2. 整个通信过程只有主人可以控制;没有两个奴隶可以直接相互沟通
2. I2C(内部集成电路)或两线接口
另一个非常有用的同步串行通信协议是 I2C 或内部集成电路协议。与 SPI 不同,I2C 在整个过程中只使用两根线,这也许就是它也被称为双线接口 (TWI) 协议的原因。这两条线是 SDA(串行数据)和 SCL(串行时钟)。I2C 协议可以支持多个从设备,但与 SPI 只支持一个主设备不同,I2C 可以支持多个主设备。每个设备仅使用一根 SDA 线发送/接收数据。SCL 通过活动主机提供的公共时钟保持设备之间的同步。
d131294bc0b9441db1b09c98b9a63238~noop.image?_iz=58558&from=article.jpg

每个从机都有自己唯一的 7 到 10 位地址,主机使用该地址来识别它们。每当主机要发送数据时,它首先会生成一个请求,该请求具有该从机的特定地址。每个从站都将这个地址与自己的地址相匹配,地址匹配的那个将响应主站。每条消息都以开始条件启动并以停止条件结束。一条消息可以包含多个数据字节,每个数据字节之间都有一个确认 (ACK) 或否定确认 (NACK) 位。
为了运行该协议,需要带有 SDA 和 SCL 的上拉电阻。
优点:
1. 多主多从可以接口在一起
2. 这种通信只需要两根线
缺点:
1. 与 SPI 相比速度较慢,因为在此协议中完成了大量的框架工作
3.串口/串口
UART 代表通用异步接收器和发送器,而 USART 代表通用同步和异步接收器和发送器。它们之间的区别在于 UART 仅执行异步串行通信,而 USART 可以执行同步和异步串行通信过程。
对于异步模式,该协议仅使用两条线,即 Rx 和 TX。由于这里不需要时钟,因此两个设备都必须利用其独立的内部时钟来工作。然而,有一个术语称为波特率,它通过固定数据交换速度来帮助这些设备保持同步。波特率是指每秒传输的数据位数,因此两个设备应以相同的波特率工作,以保持其正常运行。
UART/USART 有一个很大的限制,即只有两个设备可以同时使用该协议进行通信。一个设备的 TX 引脚将数据传输到另一个设备的 RX 引脚,类似地,后者的 TX 将数据传输到前一个设备的 RX。这就是数据交换发生的方式。
*注意:两个通信设备应该有一个共同的地面(GND)
8893a6f67c9247dda3bcd817095d2eab~noop.image?_iz=58558&from=article.jpg

对于同步模式,额外的 XCK 引脚用于提供时钟。时钟由发送数据的设备产生。
5a952bd56e9841a1a8a8cf16abee4431~noop.image?_iz=58558&from=article.jpg

优点:
1. 提供同步和异步串行通信
2. 各种波特率的可用性使其适用于广泛的应用程序和设备
3. 最简单的串口通信形式之一
缺点:
1. 一次只能连接两个设备
结论
当您只有一个主设备和多个从设备时使用 SPI。SPI 被证明是一个更快的协议。如果您还有多个主设备,除了多个从设备,那么人们应该更喜欢使用 I2C 或 TWI 而不是 SPI。这也将减少要使用的电线数量。现在,如果您正在寻找设备到设备串行通信,那么 USART/UART 证明自己是最好的,因为它易于处理并广泛用于许多外围设备。

来源:电子资料库