串口通信介绍
参考
- 【Iot】什么是串口?什么是串口通信?串口通信(串口通讯)原理,常见的串口通信方式有哪些?
- 简单实现串口通信
- UART串口通信
一、定义
串口通信是一种数据通信方式,它通过一根信号线将数据一个比特一个比特地、按顺序依次进行传输。
- 串口是串行接口的简称,也称串行通信接口或串行通讯接口,通常指COM接口
- 串口是可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。即
- CPU ---- 并行数据 ----> 串口 ---- 转化为串行数据流 ----> 发送
- ---- 接受串行数据 ----> 串口 ---- 转化为并行数据 ----> CPU
- 这种功能由串行接口电路来完成
分类
- 并行通信与串行通信
- 并行通信:一次可以同时发送8个、16个或更多比特(比如老式的打印机线缆)。速度快,但需要更多电线,成本高,易受干扰。相对少见
- 串行通信:所有数据排成一队,依次通过。速度相对慢,但节省线路、成本低、抗干扰能力强、传输距离远。相对更常见
- 虽然串行通信一次只传一个比特,但通过提高传输速度(波特率),其总体验速度可以非常快。比如现代的USB、PCIe、SATA都是串行通信。
- 同步和异步通信
- 同步通信:数据的发送和接收是在预定的时钟信号下进行的,数据的发送方和接收方需要共享相同的时钟源,以确保数据的同步
- 异步通信:数据的发送和接收不依赖于共享时钟信号,每个数据块之间有一定的间隔,而不需要严格的时序同步。
- 单工和双工通信
- 单工通信:一种单向通信模式,数据只能在一个方向上传输
- 半双工通信:一种双向通信模式,但是通信双方不能同时进行数据传输。在任意时刻,只有一个设备可以发送
- 全双工通信:一种双向通信模式,其中通信的双方能够同时进行发送和接收操作,允许双方同时传输数据
二、工作原理
要实现成功的串口通信,通信双方必须事先约定好一些规则,这通常通过UART来实现。
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器),是一块硬件芯片或单片机上的一个模块,负责完成串行通信中最核心的工作:
- 在发送端,UART将来自CPU的并行数据(例如一个8位的字节)转换成串行数据流,并通过TX线一位一位地发送出去
- 在接收端,UART监听RX线,将接收到的串行数据流重新组装成并行数据,供CPU读取
通信参数
UART是一个异步串行通信协议,而要实现异步通信,通信双方必须严格约定以下参数
- 波特率:即数据传输的速度,单位是bps
- 常见的值有:9600, 19200, 38400, 115200等
- 通信双方的波特率必须一致! 如果一方用9600发送,另一方用115200接收,收到的将是乱码
- 数据位:指一个数据帧中实际数据位的数量
- 可以是5, 6, 7, 8位
- 最常用的是8位,正好对应一个字节
- 停止位:在每个数据包末尾发送的信号,用于表示该数据包传输结束
- 可以是1位、1.5位或2位,最常用的是1位
- 奇偶校验位:一种简单的错误检查机制
- 该位是可选的,可以是无、奇校验或偶校验
- 通过计算数据位中“1”的个数,来确保数据在传输过程中没有出现单比特错误
- 但无法检测多比特错误,因此现在很多应用中为了简单都设为“无
- 流控制:也称为“握手”,用于控制数据传输的节奏,防止数据丢失
- 当接收方处理不过来时,可以通过特定的信号线(如RTS/CTS)告诉发送方“暂停发送”
- 在简单应用中经常被省略
三、串行通信协议
串行按照数据同步的方式,可以分为异步串行通信和同步串行通信。
3.1 异步串行通信
异步串行通信
- 特点:没有统一的时钟线。发送和接收设备使用各自独立的时钟,并依靠事先约定好的波特率来保持同步。每个数据字节都被包装在包含起始位和停止位的帧中。
- 优点:硬件简单,只需要少量信号线(最少2根:TXD和RXD)。
- 缺点:额外的起始/停止位开销降低了效率;时钟可能轻微不同步,限制了波特率和数据长度的上限。
- 常见协议:
- UART (Universal Asynchronous Receiver/Transmitter):这是最基础、最常见的异步串行协议。我们常说的“串口”通常就是指UART。
- RS-232:是UART的物理层电气标准(定义电压、接口等)。老式电脑的COM口就是RS-232。
- RS-422 & RS-485:是更先进、抗干扰能力更强、支持远距离和多点通信的异步串行标准,常用于工业环境。
UART
UART 是所有串行通信的“大脑”,它工作在集成电路的内部层面
- 一块硬件芯片或微控制器中的一个集成模块。它的核心功能是进行并行与串行数据的转换
- 采用异步通信,发送和接收方依靠预先约定好的波特率(Baud Rate) 来同步
- 数据被组织成帧(Frame) 依次发送
- 一个标准的UART数据帧结构如下
- 空闲状态: 数据线处于高电平(逻辑1)状态
- 起始位(Start Bit): 一个位的低电平(逻辑0)。这是一个同步信号,告诉接收方:“注意,数据要来了。”
- 数据位(Data Bits): 紧接着起始位之后,是要传输的实际数据,通常是5-9位(最常用的是8位,一个字节)。低位(LSB)先行,即最先发送最低有效位。
- 奇偶校验位(Parity Bit):可选。用于极简单的错误检测,可以是奇校验、偶校验或无。
- 停止位(Stop Bits): 1位、1.5位或2位的高电平(逻辑1)。用于标志数据包的结束。接收方靠识别这个从低到高的跳变来确认帧结束。
- 一个标准的UART数据帧结构如下
- 电气特性(物理层 - 板级):使用 TTL/CMOS 电平
- 逻辑 1: 高电平(通常是 +3.3V 或 +5V)
- 逻辑 0: 低电平(0V)
- 特点:信号电压低、传输距离极短(通常不超过几十厘米)、抗干扰能力弱,主要用于电路板内部或板与板之间的短距离通信。
- 关键引脚:
- TXD (Transmit Data): 数据发送引脚
- RXD (Receive Data): 数据接收引脚
- GND (Ground): 共同参考地,必不可少,它为双方提供了相同的电压基准
RS232
UART 的“肌肉和骨骼”,它负责将信号传输到更远的地方
- 一个定义串行通信物理接口的古老标准。它规定了电压、阻抗、连接器、针脚定义等
- 核心是解决 UART 的 TTL 电平传输距离短的问题。它采用了更高的电压和负逻辑
- 电气标准
- 逻辑 1: -3V 至 -15V 的电压(称为 Mark)
- 逻辑 0: +3V 至 +15V 的电压(称为 Space)
- 特点:高电压和负逻辑的设计使其抗共模干扰的能力大大增强,传输距离更远(理论上可达15米,在降低波特率时甚至可以更远),适合在相对复杂的工业环境中使用。
- 物理接口
- 最常见的接口是 DB9 连接器(9针),也有DB25(25针)
UART和RS232、RS422等的区别
- UART 是一种异步串行通信的协议和硬件接口,核心是协议和实现该协议的硬件控制器(通常集成在单片机或CPU中)
- 一种硬件芯片或模块,负责处理异步串行通信的底层细节
- 主要进行的工作是并行转串行(发送)和串行转并行(接收)
- 其信号特性一般使用设备自身的TTL/CMOS电平
- 逻辑1:高电平(通常是+3.3V或+5V);逻辑0:低电平(0V)
- 这种信号非常脆弱,抗干扰能力差,传输距离很短(通常不超过几十厘米),只能在电路板内部或板间短距离通信
- 主要定义了数据帧格式(起始位、数据位、校验位、停止位)和通信时序(依靠双方约定的波特率来同步)
- RS232 是一种标准的串行通信接口,核心是物理层的电气标准。
- 解决UART的TTL电平信号传输距离短、抗干扰能力弱的问题,将UART产生的TTL电平信号转换成能在更长距离(可达15米)、更复杂环境中稳定传输的信号
- 其信号特性为使用负逻辑和更高的电压
- 逻辑1:-3V to -15V (称为Mark)
- 逻辑0:+3V to +15V (称为Space)
- 这种高电压、负逻辑的设计使其抗共模干扰的能力大大增强,适合工业环境
- 主要定义了电压、阻抗、连接器、针脚定义等物理特性,如电气特性(信号的电压标准)、机械特性(通常使用DB9或DB25连接器)、功能特性(定义了每个针脚的功能,如TXD、RXD、RTS、CTS、DSR、DTR等(流控制信号))
协同工作
- 发送路径(电脑 -> 外部设备)
- CPU准备好要发送的数据。
- 主板上的UART控制器将数据打包成帧,以TTL电平从芯片引脚输出(TXD为+5V/0V)。
- 电脑内部的RS-232驱动芯片(如MAX232)捕获到这个TTL信号,并将其转换为RS-232电平(例如,0V变成+12V,+5V变成-12V)。
- 转换后的信号通过DB9连接器和串口线发送出去
- 接收路径(外部设备 -> 电脑)
- RS-232线上的电平(例如-12V)通过DB9连接器进入电脑。
- RS-232驱动芯片将其转换回TTL电平(例如,-12V变成+5V,+12V变成0V)。
- 这个TTL电平信号被送入UART控制器。
- UART控制器解析比特流,去除帧信息,将得到的字节数据送给CPU。
3.2 同步串行通信
同步串行通信
- 特点:有时钟信号线(SCLK/CLK)。发送方在发送数据的同时,会提供一条专门的时钟信号线,接收方根据这个时钟信号来精确采样数据位。数据是连续传输的,没有起始/停止位。
- 优点:效率高,速度更快,没有时钟不同步问题。
- 缺点:需要更多的线(至少增加一条时钟线),主从设备之间的时钟布线要求更高。
- 常见协议:I²C, SPI, CAN 等(下面会详细介绍)都属于同步通信。
I²C
全称为Inter-Integrated Circuit,是一种同步串行通信方式,通常用于同一块电路板上芯片之间的短距离通信
- 需要两条线:SDA(数据线)和 SCL(时钟线)
- 多主多从,地址寻址。
- 速度标准包括(100kbps)、快速(400kbps)、高速(3.4Mbps)等。
- 主要应用:连接传感器(温度、加速度)、EEPROM存储器、RTC时钟、IO扩展芯片等
SPI
全称为Serial Peripheral Interface,同样用于同一块电路板上芯片之间的短距离通信
- 四条线:MOSI(主出从入)、MISO(主入从出)、SCK(时钟)、SS/CS(片选)
- 全双工,高速(可达50Mbps+),硬件简单但占用IO多
- 主要应用:连接Flash存储器、SD卡、显示屏、ADC/DAC转换器、RFID模块等需要高速传输的设备
CAN
全称为Controller Area Network,主要用于设备之间、板卡之间或长距离的通信
- 使用双线差分信号,抗干扰能力极强
- 多主架构,具有无损仲裁和错误检测机制,可靠性极高
- 主要应用:汽车电子(绝对主流)、工业自动化、医疗设备
四、物理接口
串口通信是一种依赖信号线的通信方式
- 简单双向串口通信有两根通信线,发射端TXD和接收端RXD
- 通信双方的发射端和接收端要交叉连接,实现TXD连接RXD
- 当只需单向的数据传输时,可以直接一根通信线
- 当通信双方的电平标准不一致时,需要加电平转换芯片
其中GND为Ground,即地线。
常见的物理接口有DB9、DB25、RJ45、USB、端子排等
DB9
全称为D-Subminiature 9 pin,是最经典、最广为人知的串口接口,通常是RS-232标准的物理化身
- 特点:D型金属外壳,9针(公头)或9孔(母头)
- 常见用途
- 老式电脑的COM口(通常是公头)
- 网络设备(如路由器、交换机)的Console控制台端口(通常是母头)
- 各种工业控制和测量设备
- 针脚定义
- Pin 2: RXD (接收数据)
- Pin 3: TXD (发送数据)
- Pin 5: GND (信号地)
- 其他针脚用于流控制(如RTS, CTS, DTR, DSR),在简单应用中常被忽略
DB25
全称为D-Subminiature 25 pin,属于是DB9的“老大哥”,但现在较少见。
- 特点:更大的D型接口,有25个针脚
- 常见用途:早期电脑的串行端口,也曾经用于并行打印机端口。其串口功能与DB9相同,只是提供了更多未使用的针脚和更完整的流控制信号
RJ45
全称为Registered Jack 45,就是常见的网线接口。现在,这已经成为网络设备控制台端口的事实标准。
- 特点:塑料水晶头接口,小巧便宜
- 常见用途:
- 几乎所有现代路由器、交换机、防火墙等网络设备的Console口
- 需要配合Rollover Console线(又称配置线)使用,线序是反的
- 优势:相比DB9,RJ45接口更小、更便宜、更普及
不能直接插到网络插座上,因为这只是借用了RJ45的物理外形,信号仍然是串行信号,不是以太网信号
USB
全称为Universal Serial Bus,现代电脑连接串口设备的绝对主流方式
- 特点:现代电脑的标配接口
- 常见用途:
- 数据传输与存储:最基础、最原始的功能,用于在不同设备间快速交换数据
- 人机交互设备:连接计算机与输入输出设备的主流接口
- 音视频传输:能够传输高质量的音频和视频信号
- 网络与通信:可以扩展计算机的网络功能
- 设备供电与充电:提供了一个标准化的直流电源,极大地简化了电子设备的充电方式
- 开发与调试:连接和调试其他设备的生命线
- 嵌入式开发,通过USB转串口(如FTDI、CH340芯片)工具连接和调试单片机(如Arduino、STM32)、路由器等
- 设备调试:安卓手机的ADB调试、iOS系统调试等
通过USB转串口线(或转换器)可以连接嵌入式设备
- 线缆内部有一个桥接芯片(如FTDI、PL2303、CH340、CP2102)
- 可以在电脑上模拟一个虚拟COM端口,操作系统会为其分配一个COM号(如COM3, COM4)
- 应用程序(如MobaXterm, Putty)就像操作传统COM口一样操作它
端子排
即Terminal Block / Screw Terminal,常见于工业环境、工控设备、PLC和一些开发板上
- 特点:直接使用螺丝压接导线,没有特定的外壳形状
- 常见用途:
- RS-485和RS-422通信,通常标记为A+, B-或D+, D-。
- 一些微控制器开发板(如Arduino、树莓派)引出的TTL UART引脚,标记为TXD, RXD, GND
- 优势:连接牢固,抗振动,适合恶劣的工业环境