找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4237

积分

0

好友

560

主题
发表于 4 小时前 | 查看: 1| 回复: 0

在单片机开发中,我们经常会接触到UART、I2C、RS-485等各种通信协议,但你是否曾对它们的具体特性和区别感到模糊不清?本文将为你系统梳理包括UART、I2C、SPI、TTL、RS-232、RS-422、RS-485、CAN、USB、SD卡、1-Wire和Ethernet在内的十余种常见通信接口与总线,通过对比分析帮助你建立清晰的认识。

UART通用异步收发器

UART口通常指的是一种物理接口形式,它是一种硬件。UART(通用异步收发器)采用异步、全双工的通信方式。它比同步串口复杂,仅需两根线:一根TXD用于发送数据,一根RXD用于接收数据。

UART的串行数据传输不需要时钟信号来同步,而是依赖于通信双方预先配置好相同的参数,如波特率、数据位、停止位等。

两个单片机之间的UART串行通信连接示意图

一个完整的UART数据帧包含以下几个部分:

  • 起始位:标志数据传输的开始,逻辑电平为“0”。
  • 数据位:可以是5、6、7、8或9位,通常使用8位,正好对应一个ASCII字符。
  • 奇偶校验位:用于接收方校验数据的正确性,可以是奇校验或偶校验,此位可选。
  • 停止位:标志一帧数据的结束,逻辑电平为“1”。

UART异步串行通信数据帧结构示意图

如果你需要用通用IO口来模拟UART通信,那么需要一个引脚配置为输出(模拟TXD),一个引脚配置为输入(模拟RXD)。

I2C总线

I2C是一种同步、半双工的双线式串行总线。它由两条线构成:

  • SCL线:串行时钟线,负责产生同步时钟脉冲。
  • SDA线:串行数据线,负责在设备间传输数据。

I2C总线支持多主多从架构。连接到总线上的设备既可以作为主设备,也可以作为从设备。主设备负责初始化通信、产生时钟和控制数据传输;从设备则响应主设备的命令。

I2C总线多设备连接拓扑示意图

需要注意的是,无论主设备是发送方还是接收方,时钟信号SCL始终由主设备产生。如果用通用IO模拟I2C,SDA线需要设置为双向输入输出口,而SCL只需一个输出口。

SPI串行外设接口

SPI是一种同步、全双工的四线式串行接口总线,通常采用“一主多从”的架构。一个系统内可以有多个SPI主设备,但任意时刻只能有一个处于激活状态。SPI广泛应用于AD转换器、EEPROM、FLASH、RTC等外设与主控芯片之间的通信。

SPI主从设备连接框图

SPI通信需要4条信号线:

  • MOSI:主设备输出,从设备输入。
  • MISO:主设备输入,从设备输出。
  • SCLK:串行时钟,由主设备产生。
  • SS/CS:从设备选择,低电平有效,用于选中特定的从设备。

SPI的通信时序模式由时钟极性(CPOL)和时钟相位(CPHA)共同决定。CPOL定义时钟信号空闲时的电平(0为低,1为高),CPHA定义在时钟的哪个边沿采样数据(0为第一个边沿,1为第二个边沿)。

UART、SPI、I2C比较

为了更直观地对比,我们来看一张汇总表格:

USART、UART、I2C、SPI协议对比表格

下面再总结一下它们的主要特点与区别:

  • I2C:信号线最少(2根),功能强大,支持多主设备,但协议相对复杂,需要双向IO支持,且依赖上拉电阻,抗干扰能力较弱,通常用于板内短距离通信。
  • SPI:实现简单,因为有独立的时钟线,所以对数据间隔没有严格要求。速度通常比I2C快。
  • UART:异步通信,无需时钟线,但需要双方严格匹配波特率。一帧数据可以是5-9位。
  • 选择机制:SPI通过片选信号(SS)选择从设备;I2C通过发送从设备地址来选择。

RS232串口通信

RS-232是一种常见的串行通信标准。它采用负逻辑电平:

  • 逻辑“1”:-3V ~ -15V
  • 逻辑“0”:+3V ~ +15V

RS-232的传输距离通常在15米左右,可以实现全双工通信,但速率较低,一般在20kbps量级。其物理接口常使用DB9连接器。

RS-232、RS-422、RS-485的DB9引脚定义对比图

下图详细展示了DB9接口每个引脚的定义,最常用的是2号脚RXD(接收)、3号脚TXD(发送)和5号脚GND(地)。

DB9串口引脚定义及功能说明详图

TTL和RS-232互转

单片机的UART接口通常使用TTL电平(0V/5V或0V/3.3V),而PC的串口(COM口)使用RS-232电平。要让两者通信,就需要一个电平转换模块,常用的转换芯片如MAX232。

基于MAX232芯片的TTL转RS232电平转换电路原理图

RS422串口通信

RS-422采用4根信号线实现全双工通信:两根用于发送(T+, T-),两根用于接收(R+, R-),外加一根地线。它采用差分传输,抗共模干扰能力强。

RS-422支持点对多点的通信,但通常有一个主设备,从设备之间不能直接通信。

四线全双工RS422接口接线示意图

RS485串口通信

RS-485是RS-422的变种,同样采用平衡发送和差分接收,抗干扰能力强。它通常采用两线制进行半双工通信,速率可达10Mbps,传输距离远,可从几十米到上千米。

其逻辑电平由两条线之间的电压差决定:

  • 逻辑“1”:+2V ~ +6V
  • 逻辑“0”:-2V ~ -6V

将TTL电平转换为RS-485电平也很常见,下图是基于MAX485芯片的参考电路:

基于MAX3485芯片的RS-485通信接口电路原理图

图中,RE引脚(低电平有效)控制接收使能,DE引脚(高电平有效)控制发送使能,通常直接由MCU的GPIO控制。

TTL电平与接口辨析

这里需要明确几个容易混淆的概念:

  • 串口/UART口:通常指单片机上遵循UART协议的物理接口,一般为TTL电平,常见为4个引脚(Vcc, GND, RX, TX)。
  • COM口:特指个人计算机上的串行通讯端口,多为DB9接口,使用RS-232电平标准。
  • TTL、RS-232、RS-485:这些指的是电气层面的电平标准,而不是接口形状。

COM接口、UART模块与TTL电平标识实物对比图

下图清晰地对比了5V TTL与RS-232两种电平标准:

5V TTL电平标准与RS-232电平标准对比表

综上所述,一个完整的单片机与PC通信链路可能如下图所示,需要经过电平转换:

MCU通过UART,经电平转换芯片连接至PC的通信路径框图

CAN总线

CAN(控制器局域网络)是一种用于实现分布式实时控制的串行通信网络,以其高可靠性和实时性著称,广泛应用于汽车电子等领域。

CAN总线网络主要包含CAN_H和CAN_L两条信号线,各个节点通过这两条线进行差分信号传输。为了消除信号反射,总线两端需要连接120欧姆的终端电阻。

CAN总线网络拓扑图(两终端电阻)

CAN支持多主架构,每个节点既可做主机也可做从机。其通信距离可达10公里(低速时),速率最高可达1Mbps(短距离内)。

下图展示了CAN总线在汽车内部的广泛应用:

汽车内部执行器与传感器通过CAN网络连接的布局示意图

CAN电平逻辑

CAN总线采用“线与”规则进行仲裁:只要有一个节点输出显性位(逻辑0),总线就表现为显性位。因此,逻辑0被称为“显性”,逻辑1被称为“隐性”。

从电位规定来看,CAN_H和CAN_L在隐性时电压均在2.5V左右,电位差为0;在显性时,CAN_H升高至约3.5V,CAN_L降低至约1.5V,产生约2V的差分电压。

CAN总线信号电平标准与波形图

USB通信串行总线

USB(通用串行总线)的物理接口至少包含四根线,其中两根(D+和D-)是用于传输数据的差分信号线。所有复杂的USB协议通信都基于这两根线完成。

USB采用差分传输,同一时刻只能进行一个方向的数据传输,因此是半双工。其编码方式为NRZI(反向不归零),电平不变代表逻辑1,电平跳变代表逻辑0。

USB A型和B型母座的引脚定义图

USB转TTL

为了实现单片机(TTL UART)与PC(USB)的通信,常使用USB转串口芯片,如CH340、CP2102等。

USB转TTL模块实物图

需要注意的是,单纯的串口通信(如UART)没有复杂的上层协议,而USB通信则包含一套完整的设备枚举、配置、传输协议,因此底层驱动要复杂得多。

SD卡通信模式

SD卡不仅是一种存储介质,其与主机(如单片机)的通信也有两种模式:

  • SD总线模式:使用4条数据线(DAT0-DAT3)、1条命令线(CMD)和1条时钟线(CLK),速度最快。
  • SPI总线模式:使用标准的SPI总线(MOSI, MISO, SCLK, CS)进行通信,仅使用1条数据线,兼容性好但速度较慢。

SD卡在SD总线模式与SPI总线模式下的引脚定义对比表

显然,在嵌入式系统中,使用SD总线模式比SPI总线模式的数据传输速率要快数倍。

Micro SD卡及其适配器实物图

1-WIRE总线

1-Wire(单总线)由Dallas公司推出,是一种异步半双工串行传输技术。它仅用一根信号线,既传输时钟又传输数据,并且能实现双向通信。

基于DS18B20的1-Wire总线连接电路图

1-Wire的数据速率通常为16.3Kbit/s,最高可达142Kbit/s。由于其端口为开源或三态,因此必须外接一个上拉电阻(通常5K~10KΩ)。它常用于耗材识别、电路板或配件认证等场合。

DMA直接存储器访问

DMA(直接存储器访问)是集成在MCU(如STM32)内部的一个硬件模块。它独立于CPU工作,可以在外设(如UART、SPI)和内存之间直接搬运数据,从而将CPU从繁重的数据拷贝工作中解放出来,大大提高系统效率。

Cortex-M3处理器与DMA、外设互联的系统架构框图

你可以把DMA想象成一条专用的高速公路,让数据能够不经过CPU“绕城”而快速直达。不使用DMA当然也能完成数据传输(通过CPU搬运),但效率会低很多。

Ethernet以太网

以太网是目前最普遍的局域网技术。其接口可分为协议层和物理层:

  • 协议层:由MAC(媒体访问控制)控制器实现。
  • 物理层:包括PHY(物理层)芯片和传输器(通常包含网络变压器)。

现在很多处理器已内置MAC,但需要外接PHY芯片来提供实际的网络物理接口。

以太网MAC与PHY芯片、变压器、RJ45接口的连接框图

网络变压器(或集成在RJ45连接器中)的主要作用有两个:

  1. 耦合差分信号,增强抗干扰能力。
  2. 隔离网线两端设备的地,保护设备免受外部电压浪涌冲击。

下图是一个典型的以太网接口参考电路设计:

包含网络变压器和防护电路的以太网接口详细原理图

希望这篇梳理能帮助你厘清这些常见通信协议和接口的区别与联系。掌握它们的特点和适用场景,是进行嵌入式系统设计和调试的基础。如果你在实践中对这些协议有独特的应用经验或疑问,欢迎在云栈社区与其他开发者交流探讨。




上一篇:Python环境隔离指南:使用Conda在WSL中构建专属开发空间
下一篇:资讯:美国青年车库造芯,10微米工艺实现1200晶体管自制芯片
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-22 06:44 , Processed in 0.529731 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表