有线通讯
1、 串行通讯与并行通讯
按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式,它们的通讯传输对比说明见下图:

很明显,因为一次可传输多个数据位的数据 ,在数据传输速率相同的情况下,并行通讯传输的数据量要大得多,而串行通讯则可以节省数据线的硬件成本(特别是远距离时)以及 PCB 的布线面积,串行通讯与并行通讯的特性对比见下表:

不过由于并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能,现在随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。
2、 全双工、半双工及单工通讯
根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯,它们主要以信道的方向来区分,见下图:

(1)UART - 通常是全双工
UART 使用两条独立的数据线:
TX (Transmit):发送数据
RX (Receive):接收数据
因为发送和接收的物理通道是完全分开的,所以一个设备可以在通过 RX 线接收数据的同时,通过 TX 线发送数据。这完全符合全双工的定义。
关键点:
硬件上是全双工的。
通信通常只在两个设备之间进行(点对点)。
虽然硬件支持全双工,但上层的软件协议可以设计为只进行半双工通信(比如,一问一答,说完再听),但这是软件限制,而非硬件限制。
(2)SPI - 理论全双工,实际常为半双工
SPI 通常使用四条线:
MOSI (Master Out, Slave In):主设备数据输出,从设备数据输入
MISO (Master In, Slave Out):主设备数据输入,从设备数据输出
SCLK (Serial Clock):时钟信号,由主设备产生
CS/SS (Chip Select / Slave Select):从设备片选信号,由主设备控制
从硬件连接上看,MOSI 和 MISO 是独立的,这意味着在理论上,数据可以同时在主设备和从设备之间双向传输。因此,SPI 在硬件层面上被设计为全双工。
然而,在实际应用中,情况往往不同:
真正的全双工:主设备在通过 MOSI 发送一个字节的同时,从设备也通过 MISO 发送一个字节。这两个传输过程共享同一个时钟脉冲,是同步完成的。这种模式常用于需要高效、实时交换数据的场景。
半双工(更常见):很多 SPI 从设备(如传感器、存储器)的工作模式是“命令-响应”式的。
主设备先通过 MOSI 发送一个命令或地址。
然后,从设备才开始通过 MISO 返回数据。
在这个过程中,虽然物理线路允许双向同时传输,但逻辑上是在不同时间段分别进行读和写的,这实际上是半双工通信。很多器件的数据手册会明确说明在主机发送命令期间,MISO 线处于高阻态。
结论: SPI 具备全双工的能力,但具体是全双工还是半双工,取决于你使用的从设备类型和通信协议。
(3)I2C - 半双工
I2C 只使用两条线:
SDA (Serial Data):双向数据线
SCL (Serial Clock):时钟信号,由主设备产生
I2C 的半双工特性由其物理结构决定:
它只有一根数据线 (SDA)。
这根数据线被总线上所有的设备共享(开源输出结构)。
在任何时刻,只能有一个设备控制(拉低或释放)SDA 线来发送数据。
因此,通信必须是交替进行的:
主设备发送地址和命令 -> 从设备应答 -> (主/从)设备发送数据 -> (从/主)设备应答 -> ...
数据流在 SDA 线上是双向的,但绝不能同时进行,这是典型的半双工。
3、 同步通讯与异步通讯
根据通讯的数据同步方式,又分为同步和异步两种,可以根据通讯过程中是否有使用到时钟信号进行简单的区分。
在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。 
在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,见下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步 。
在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。
4、 通讯速率
衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元。而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。如常见的通讯传输中,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有 0V、2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率,虽然严格来说没什么错误,但希望您能了解它们的区别。

浙公网安备 33010602011771号