总线(Bus),是指在计算机中,设备和设备之间传输信息的公共数据通道。
总线的分类1:
(1)内部总线:CPU内部连接运算器、控制器、各寄存器部件之间的总线。
(2)系统总线(外部总线):CPU和计算机系统中其他高速功能部件相互连接的总线。
按系统总线传输信息内容的不同,又可分为3类:数据总线、地址总线和控制总线。
1)数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数与机器字长、存储字长有关。
2)地址总线用来指出数据总线上的源数据或目的数据所在的主存单元或VO端口的地址,它是单向传输总线,地址总线的位数与主存地址空间的大小有关。
3)控制总线传输的是控制信息,包括CPU送出的控制命令和主存(或外设)返回CPU的反馈信号。
(3)I/O总线:中低速I/O设备相互连接的总线。
总线的分类2:
按数据传输格式将总线分为串行总线与并行总线。
总线分类 | 数据线 | 特点 | 应用 |
串行总线 | 一条双向数据线或两条单向数据线 | 速率不高,但适合长距离连接 | 通信总线(计算机之间或计算机与其他系统之间) |
并行总线 | 多条双向数据线 | 有传输延迟,适合近距离连接 | 系统总线(计算机各部件) |
常见的总线:
PCI总线:PCI总线是目前微型机上广泛采用的内总线,采用并行传输方式。
SCSI总线:小型计算机系统接口(SCSI)是一条并行外总线,广泛用于连接软硬磁盘、光盘、扫描仪等。
RS-232C(串行外总线)、USB(串行外总线)、IEEE-1394(串行外总线)、IEEE-488(并行外总线)等。
在单片机开发中,UART、I2C、RS485等普遍在用,对它们的认识可能模棱两可,今天对它进行学习与梳理。
UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE
1,UART通用异步收发器
UART口指的是一种物理接口形式(硬件)。
说明:UART作为全双工异步通信协议,发送和接收数据可以同时发生。因此,要区分发送和接收数据的引脚。TX发送数据,RX接收数据。设备之间的发送和接送引脚交叉连接,如下图所示。
UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。推荐文章:STM32与51单片机串口通信实例。
UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。
对于发送设备和接收设备来说,两者的串行通信配置应该设置为完全相同。
起始位:表示数据传输的开始,电平逻辑为“0” 。
数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位。
奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。 停止位:表示一帧数据的结束。电平逻辑为“1”。
如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
2,I2C总线
I2C总线是一种同步、半双工双向的两线式串口总线。它由两条总线组成:串行时钟线SCL和串行数据线SDA。
SCL线(串行时钟线)——负责产生同步时钟脉冲。
SDA线(串行数据线)——负责在设备间传输串行数据。
该总线可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。
连接UART的TX、RX、RTS和CTS引脚时,需要根据通信需求选择两线制(仅TX/RX)或四线制(包含RTS/CTS硬件流控)。
两线制连接(基础通信)
这是最简单的连接方式,适用于数据量小、速率低、对可靠性要求不高的场景。
TX(发送端)连接到对端的 RX(接收端)
RX(接收端)连接到对端的 TX(发送端)
GND(地线)必须共接,以保证参考电平一致
RTS和CTS引脚悬空或不连接
优点:接线简单,成本低
缺点:无流量控制,高速或大数据量传输时易丢包
四线制连接(启用硬件流控)
当需要稳定、高速、无丢包的通信时(如连接4G模组、工业设备、嵌入式系统),应使用RTS/CTS硬件流控。
TX 连接到对端的 RX
RX 连接到对端的 TX
RTS(Request To Send)连接到对端的 CTS(Clear To Send)
CTS 连接到对端的 RTS
GND 必须共接
工作原理
发送方在准备发送数据前,会拉低自己的RTS 信号,表示“我准备好了,可以收吗?”
接收方若缓冲区有空间,会拉低自己的CTS 信号,表示“可以发送”
发送方检测到CTS 为低电平时,才开始发送数据;若 CTS 为高,则暂停发送
整个过程由硬件自动完成,响应速度可达微秒级,不干扰数据内容,抗干扰能力强
优点:避免缓冲区溢出,提升通信稳定性,广泛用于STM32、ESP32、Linux串口、4G模组等
注意:若未连接CTS线,部分芯片会默认禁止发送,导致“有TX无数据”现象
环回测试连接(用于自检)
若需在单个设备上测试UART功能(如SoC开发),可进行环回测试:
将TX 直接连接到 RX(内部环回模式无需外部接线,但需在寄存器中启用)
RTS和CTS可短接在一起(若使用硬件流控),或保持悬空(若仅用TX/RX)
提示:部分MCU(如STM32)支持通过配置寄存器启用内部环回模式,此时无需物理连接TX-RX
重要提醒:无论哪种连接,GND必须共地,否则通信将无法建立。同时,双方设备的波特率、数据位、停止位、校验位等参数必须完全一致。
主设备负责控制通信,通过对数据传输进行初始化,来发送数据并产生所需的同步时钟脉冲。从设备则是等待来自主设备的命令,并响应命令接收。
主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
3,SPI串行外设接口
SPI总线是同步、全双工双向的4线式串行接口总线。它是由“单个主设备+多个从设备”构成的系统。
在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于AD转换器、EEPROM、FLASH、实时时钟、数字信号处理器和数字信号解码器之间实现通信。
为了实现通信,SPI共有4条信号线,分别是:
·主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。
·主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。
·串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。
·从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。
SPI 的工作时序模式由CPOL(Clock Polarity,时钟极性)和CPHA(Clock Phase,时钟相位)之间的相位关系决定,CPOL 表示时钟信号的初始电平的状态,CPOL 为0 表示时钟信号初始状态为低电平,为1 表示时钟信号的初始电平是高电平。CPHA 表示在哪个时钟沿采样数据,CPHA 为0 表示在首个时钟变化沿采样数据,而CPHA 为1 则表示在第二个时钟变化沿采样数据。
4,UART、SPI、I2C比较
·I2C线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。 (同板芯片之间通讯)
·SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。
·I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。
·UART一帧可以传5/6/7/8位,I2C必须是8位。I2C和SPI都从最高位开始传。
·SPI用片选信号选择从机,I2C用地址选择从机。
5, 5, RS-232 RS-422 RS-484
RS232串口通信
传输线有两根,地线一根。电平是负逻辑:
-3V~-15V逻辑“1”,+3V~+15V逻辑“0”。
RS-232串口通信传输距离15米左右。可做到双向传输,全双工通讯,传输速率低20kbps 。
下图是DB9公头和母头的定义,一般用的最多的是RXD、TXD、GND三个信号。
TTL和RS-232互转
单片机接口一般是TTL电平,如果接232电平的外设,就需要加TTL转RS232的模块。如下图,可用芯片MAX232进行转换。
MAX3232是支持两路uart转成RS232,分享的电路只接了一路,如有需要可以接两路
另外上面电路是没有做隔离的,如果要做成隔离式的,可以加上光电开关。
RS422串口通信
RS-422有4根信号线:两根发送、两根接收和一根地线,是全双工通信。
它有一个主设备,其余为从设备,从设备之间不能通信,所以RS-422支持点对多的双向通信。
RS485串口通信
RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
采用两线半双工传输,最大速率10Mb/s,电平逻辑是两线的电平差来决定的,提高抗干扰能力,传输距离长(几十米到上千米)。
+2V~+6V逻辑“1”,-2~-6V逻辑“0”。
TTL转成RS-485很常见,比如MAX485,参考电路如下:
RE引脚:接收器输出使能(低电平有效)。
DE引脚:发送器输出使能(高电平有效)。可以直接通过MCU的IO端口控制。
TTL
嵌入式里面说的串口,一般是指UART口。4个pin(Vcc,GND,RX,TX),用TTL电平。
PC中的COM口即串行通讯端口,简称串口。9个Pin,用RS232电平。
串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指电平标准(电信号)。
单片机与PC通讯示意图如下:
RS-232 RS-422 RS-485
6,CAN总线
CAN是控制器局域网络的简称,是一种能够实现分布式实时控制的串行通信网络。CAN总线的功能复杂且智能。主要用于汽车通信,相关文章:CAN总线详解。
CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻。
每一个设备既可做主设备也可做从设备。CAN总线的通信距离可达10千米(速率低于5Kbps),速度可达1Mbps(通信距离小于40M)。
CAN电平逻辑
CAN总线采用"线与"的规则进行总线冲裁,1&0为0,所以称0为显性,1为隐性。
从电位上看,因为规定高电位为0,低电位为1,同时发出信号时实际呈现为高电位,从现象上看就像0覆盖了1,所以称0为显性,1为隐性。
7,USB通信串行总线
USB接口最少有四根线,其中有两根是数据线,而所有的USB数据传输都是通过这两根线完成。它的通信远比串口复杂的多。
两根数据线采用差分传输,即需要两根数据线配合才能传输一个bit,因此是半双工通信,同一时间只能发送或者接收。
USB 规定,如果电压电平不变,代表逻辑1;如果电压电平变化,则代表逻辑0。
8,USB转TTL
一般USB转串口都是用CH340G芯片。
用串口通信比USB简单,因为串口通信没有协议。
9,SD卡
SD卡是一种存储卡,可用于手机作为内存卡使用。
嵌入式中,单片机与SD卡通信有两种模式:
SD模式:这是SD卡的默认高速通信模式,采用专用的SD总线协议,支持多数据线并行传输,能实现较高的读写速度。通常需要单片机具备SD控制器或专用的SD接口硬件支持。
SPI模式:SPI(串行外设接口)模式是一种更简单、通用的通信方式,使用标准的SPI总线(通常包括SCLK、MOSI、MISO、CS四条线)。虽然传输速率低于SD模式,但因其接口简单、对单片机硬件要求低,成为嵌入式开发中操作SD卡的常用选择。
通信时,单片机通过发送特定的命令(CMD)来控制SD卡,SD卡会返回响应(R1、R2、R3等)以指示操作状态。数据以数据块(Block,通常为512字节)的形式进行传输,并通过CRC校验保证数据完整性。
值得注意的是,SD总线模式中有4条数据线,SPI总线模式中仅有一条数据线(MOSI和MISO不能同时读数据,也不能同时写数据);这样在嵌入式中,单片机与SD卡通信时采用SD总线模式比SPI总线模式速度快几倍。
编号(按SD卡3脚) | SD总线模式 | SPI总线模式 |
名称 | 描述 | 名称 | 描述 |
1 | DAT3 | 数据线3 | CS | 片选 |
2 | CMD | 命令/响应 | MOSI | 数据输入 |
3 | VsS1 | 电源地 | Vss1 | 电源地 |
4 | VDD | 电源 | VDD | 电源 |
5 | CLK | 时钟线 | SCK | 时钟线 |
6 | Vss2 | 电源地 | Vss2 | 电源地 |
7 | DATO | 数据线0 | MISO | 数据输出 |
8 | DAT1 | 数据线1 | / | / |
9 | DAT2 | 数据线2 | / | / |
10,(1-Wire总线)
1-Wire总线是一种由Dallas Semiconductor(现Maxim Integrated)开发的简单、低成本的串行通信协议,它通过单根数据线(加上地线)实现主设备与一个或多个从设备之间的双向通信、供电和控制。
什么是1-Wire:
1-Wire是一种基于单数据线的串行通信协议,它允许多个设备通过共享一个数据线与控制设备进行通信。这种通信方式极大地简化了硬件布线和设备连接的复杂性。每个1-Wire设备都有一个唯一的64位地址,使得系统可以轻松地识别和区分不同的设备。
1-Wire的原理
1-Wire采用单总线结构,即所有设备共享同一条数据线,通过对数据线上电平的变化进行通信。数据传输使用脉冲编码调制(Pulse Code Modulation, PCM)技术,通过发送不同脉冲的组合来表示不同的数据。控制设备负责生成时钟信号和操纵数据线上的电平变化,从而实现对1-Wire设备的读取和写入操作。
1-Wire的特点:
简单可靠
1-Wire的通信协议相对简单,只需一根数据线和电源线即可实现设备之间的通信。这种简洁的设计减少了硬件成本和复杂性,并提高了系统的可靠性。
线路长度灵活
由于1-Wire采用差分信号传输,可以支持较长的总线长度,最长可达100米。这为在远距离传输数据的应用提供了便利。
独特的设备地址
每个1-Wire设备都有一个唯一的64位地址,使得系统可以准确地识别和区分不同的设备。这种独特的标识方式方便了设备的管理和控制。
低功耗设计
1-Wire设备通常具有低功耗特性,这使得它们非常适合于便携式设备和电池供电的应用。此外,1-Wire总线上的设备可以通过供电线获取能量,无需额外电源线。
1-Wire作为一种串行通信总线协议,具有简单可靠、线路长度灵活、独特的设备地址和低功耗设计等特点。这使得它在各种应用中得到广泛应用,并成为连接和通信各种设备的重要工具。