串口通信1.0(串行并行)
1.串口通信概述
计算机通信:将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。按照数据传输方式的不同,可以分为串行通信和并行通信两类。
1.1并型通信与串行通信
1.1.1并型通信简单介绍
并行通信是将数据字节的各个位通过多条数据线同时进行发送。
特点:多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高(传输线较多)。
1.1.2串型通信简单介绍(重点)
串行通信是将数据字节分为一位一位的形式在一条传输线上逐个发送。
特点:数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。
1.2同步通信与异步通信
1.2.1同步通信
在同步通信中,通信双方共用一个时钟,这是其与异步通信最显著的区别;而异步通信中每个字符需以起始位和停止位作为开始与结束标志,会额外占用时间,因此在进行数据块传送时,为提升通信速度,通常会去掉这些标志并采用同步通信。同步通信的具体传输逻辑为:数据开始传送前,会用 1~2 个预先约定的同步字符(SYNC)进行指示,同时依靠时钟实现发送端与接收端的同步,一旦检测到规定的同步字符,后续便会连续按顺序传送数据,直至整个数据块传送完毕;且同步传送过程中,字符之间无间隙,也不需要起始位和停止位。
1.2.2异步通信
异步通信是我们最常采用的通信方式,异步通信采用固定的通信格式,数据以相同的帧格式传送。如图,每一帧由起始位、数据位、奇偶校验位和停止位组成,无需共用时钟,依靠 “约定的字符格式” 和 “通信速率” 实现同步。
1.3单工&半双工&全双工
1.3.1单工
特点:数据传输仅能沿一个方向,不能实现反向传输,只有一条通信线路。
1.3.2半双工
特点:数据传输可以沿两个方向,但需要分时进行也只有一条通信线路。
1.3.3全双工
特点:数据可以同时进行双向传输,具有两条通信线路。典型实例:UART。
2.串行通信
2.1同步串行通信
特点:数据传输以数据块(一组字符)为单位,在一个数据块内,字符与字符间无间隔,收发双方依靠独立的时钟线进行信号的同步。适用于大批量的数据传输
2.2异步串行通信(重点)
特点:数据传输以单个字符为单位,字符和字符之间的间隙任意,字符内部每一位持续的时间相同。收发双方没有专门的时钟信号,而是依靠事先约定的字符格式和通信速率来完成通信。
2.2.1异步串行通信的字符格式
传输一个字符时总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。每个字符前面都有提个起始位(低电平),字符本身由7位数据位组成,接着字符后面是一个校验位(奇校验或偶校验,也可以是无校验),最后一位是停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。
起始位:1 位,电平为低电平,位于字符最前端;
数据位:共 7 位,为字符本身的核心数据;
校验位:1 位(可选),支持奇校验、偶校验或无校验,紧跟数据位之后;
停止位:1 位,电平为高电平,作为字符传输的结束标志;
空闲位:位于停止位之后,长度不定,电平同样为高电平,用于等待下一个字符传输。
实际每一位的传输宽度与波特率有关,波特率越高,宽度越小,在进行传输前,通信双方要约定好相同的波特率,若波特率不同则数据的接收会出现问题。
2.2.2通信速率
波特率:每秒钟传送二进制数码的位数,以bit/s(bps)为单位
常用的波特率有:9600、19200、38400、57600和115200;
波特率为115200,表示每秒传输115200位,且每一位数据在数据线上持续时间为Tbit=1/115200≈8.68us。
Eg:1M的数据在115200波特率传输多少时间
“1M 数据” 默认是 1 兆字节(MB)(存储 / 文件大小的常用单位),而非 “兆比特(Mb)”。
单位换算:1 字节(Byte)= 8 比特(bit)
异步通信没有时钟同步信号,需通过 “帧” 来界定每个字节的边界,典型帧结构(最常用配置)为:
1 个起始位(低电平,标志字节开始,必备)
8 个数据位(对应 1 个字节,主流配置,因 1Byte=8bit)
0 个校验位(实际场景中多关闭校验以提高效率,可选)
1 个停止位(高电平,标志字节结束,常用 1 个停止位)
→ 综上,传输 1 个字节(8bit 纯数据),实际需要传输 1+8+0+1 = 10 bit(帧总比特数)。
总传输比特数 = 1048576 Byte(1M 数据) × 10 bit/Byte = 10485760 bit
传输时间(秒)= 总传输比特数(含开销) ÷ 波特率(bit / 秒)= 10485760 bit ÷ 115200 bit / 秒 ≈ 91 秒(约 1 分 31 秒)
2.2.3异步串行通信准确性
传输时低位在前,高位在后,Bit0->Bit7......
三种常用的错误校验方式
(1)奇偶校验
奇校验表示数据中“1”的个数与校验位“1”的个数之和为奇数;偶校验表示数据中“1”的个数与校验位“1”的个数之和为偶数。
(2)代码和校验
发送方将所发数据块求和,产生一个字节的校验字符附加到数据块末尾。接收方采用同样方式进行检测。
(3)循环冗余校验
通过某种数学运算实现有效信息与校验位之间的循环校验,常用于磁盘信息的传输、存储区的完整性校验等。
2.2.4异步串行通信数据接收过程
接收过程的本质是数据采样,假设接收端的采样时钟是波特率的16倍。
(1)接收过程由起始位的下降沿启动;
(2)接收端等待8个时钟周期,以便建立一个接近比特周期中间的采样点
(3)接收端等待16个时钟周期,使其进入第一个数据位周期的中点;
(4)第一个数据位被采样并存储在接收寄存器中;
(5)串口模块在采样第二个数据位之前等待另外16个时钟周期:
(6)重复此过程,直到所有数据位都被采样和存储;
(7)由停止位的上升沿使数据线返回到空闲状态。
3.总结
该文档核心围绕串口通信展开。计算机通信分并行与串行:并行通信多位数据同时传,控制简单、速度快,但长距离传输硬件成本高;串行通信逐位传输,传输线少、长距成本低,控制较复杂,又分同步与异步两类。
同步通信双方共用时钟,以数据块传输,用 1-2 个同步字符指示开始,无起始 / 停止位,适合大批量数据;异步通信更常用,帧结构含起始位(低电平)、数据位、可选校验位、停止位(高电平)及不定长空闲位,靠约定波特率(如 9600、115200)和格式通信。
数据传输方向有单工(单向)、半双工(双向分时)、全双工(同时双向,如 UART)。异步通信有奇偶校验等错误校验方式,接收端以 16 倍波特率时钟采样数据,保障传输准确性。