通信的几个基本概念
1. 同步通信与异步通信
同步通信是指通信双方共用同一个时钟工作,而异步通信双方则按照各自的时钟进行工作。
由于异步通信不使用同一个时钟,接收方就需要一定的手段与发送方进行“同步”。比如使用一个标志位来表示开始,一个结束位表示停止。而同步通信则不需要,但是发送方和接收方很多时候无法使用同一个时钟,所以异步通信更为常用。
2. 电平信号和差分信号
电平信号是指用电平值表示的信号 ,电平值分为高电平“1”和低电平值”0”。电平信号使用信号线和参考线(一般为GND线)的电压差来表示。常见的电平信号有:
-
TTL 信号:使用 TTL 管(常见的比如三极管)。功耗较大,驱动能力强,一般工作电压为 +5V。输出高电平 >2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平是 0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是 0.4V。
-
CMOS信号:CMOS集成电路使用MOS管,功耗小,工作电压范围很大。逻辑电平 1 电压接近于电源电压,逻辑电平 0 接近于0V。而且具有很宽的噪声容限
-
RS232信号:RS232 接口任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3— -15V;逻辑“0”:+3— +15V ,噪声容限为2V。即要求接收器能识别高于+3V的信号作为逻辑“0”,低于-3V的信号作为逻辑“1”。
电平信号使用信号线和参考线的电压差作为电平信号,其抗干扰能力较差。差分信号区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。在这两根线上的传输的信号就是差分信号。
-
RS485是典型的差分信号:RS485 采用两根通信线,通常用 A 和 B 或者 D+ 和 D- 来表示。逻辑“1”:两线之间的电压差为+(0.2 - 6)V,逻辑“0”:两线间的电压差为-(0.2- 6)V来表示。
3. 串行通信和并行通信
串行:使用一根通信线依次传输一个数据位
并行:使用多更通信线同时传输多个数据位,多少根通信线就传输多少根数据位。
4. 全双工和半双工
单工通信:单方向通信,即只能A发B收
半双工通信:双向通信,但是同一时间内只能一方发送,另外一方接收
全双工通信:双向通信,一方可以同时发送和接收
串口
现在嵌入式系统中最常见的调试串口是 RS232和 TTL。RS232使用异步、电平、串行、全双工通信的方式。RS232使用 Rx、Tx 和 GND 三根线进行数据传输。
串口通信的常见参数
1. 波特率
波特率(Baud rate)即调制速率,指的是有效数据信号调制载波的速率,即单位时间内载波调制状态变化的次数。 特别区分与比特率(单位时间内传输或处理的比特的位数)。在串口通信中,恰好只有两种电平信号(0和1),所以此时恰好波特率=比特率。我们在嵌入式系统中比较常用的 9600 波特和115200波特。
2. 起始位、数据位、奇偶校验位、停止位
- 串口通信时,收发是一个周期一个周期进行的,没周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元是由:起始位+数据位+奇偶校验位+停止位组成的。
- 起始位表示发送方要开始发送一个通信单元;数据位是一个通信单元中发送的有效信息位;奇偶校验位是用来校验数据位,以防止数据位出错的;停止位是发送方用来表示本通信单元结束标志的。起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。
- 数据位是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(一般可选的有6、7、8、9,大情况下我们都是选择8位数据位。因为我们一般通过串口发送的文字信息都是ASCII码编码的,而ASCII码中一个字符刚好编码为8位。)
- 奇偶校验位是用来给数据位进行奇偶校验(把待校验的有效数据逐个位的加起来,总和为奇数奇偶校验位就为1,总和为偶数奇偶校验位就为0)的,可以在一定程度上防止位反转。
- 停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位,1.5位停止位,2位停止位等。大部分情况下都是用1位停止位。
3. 流控制
数据在传输过程中容易出现数据丢失的现象,例如:两台计算机通过串口传输数据时,或者台式机与单片机之间进行通信时,可能由于两端计算机的处理速度不同,出现接收端的数据缓冲区已满,而发送端依然继续发送数据,则导致数据丢失。流控制的出现就是为了解决这种数据丢失的问题。但是现在的串口一般都只用来作为调试使用,流控的意义不大了,所以一般都不再使用了。
DB9 标准
- DB9接口是串口通信早期比较常用的一种规范化接口。
- 串行通信在早期是计算机与外界通信的主要手段,那时候的计算机都有标准配置的串口以实现和外部通信。那时候就定义了一套标准的串口规约,DB9接口就是标准接口。
- DB9接口中有9根通信线,其中3根很重要,为GND、Tx、Rx,必不可少;剩余6根都是和流控有关的,我们使用串口都是用来做调试一般都禁用流控,所以这6根没用。现在一般使用串口时要记得把流控禁止掉。
2021年10月7日
Kilento