通信人家园
标题:
【初入电子坑之通信入门篇(一)】通信基础概念
[查看完整版帖子]
[打印本页]
时间:
2022-11-11 10:25
作者:
zhywj163
标题:
【初入电子坑之通信入门篇(一)】通信基础概念
一、通信本质
通信通信,说白的就是信息互通。人跟人间的信息互通、机器跟机器间的信息互通、机器跟人间的信息互通。
而想要做到互通,主要有两个问题需要解决,“信息该如何表示?”和“信息该如何传输?”两个核心问题。
我们知道信息交互中,最原始、朴素的表示是0和1。其中,信息传输主要指01串在传输介质上传输的过程。这个过程具体上跟诸如无线电、光纤、电缆如何操作实现有关,不在本文讨论范围。所以本文主要讨论的是“信息该如何表示?”这一问题。
那么:
在电子世界中如何表示0和1?
信息的发送方和接收方如何解析?
如何用0和1的组合表示我们所要传达的信息?
就是值得讨论的问题了。
二、信息表示
2.1、01信号表示
首先,在电子世界中0和1的表示,目前大致有两种方式:
电平信号
差分信号
2.1.1、电平信号
电平信号,简单来说就是根据一根线上的不同电压区间划分成高电平和低电平(如:大于3.3v为高电平,低1.5v为低电平等),通过人为定义高电平为0或1来传输信息。
而又因为几乎不可能做到不同设备间电压完全一致,所以为了保证收发双方电压的一致性,电平信号传输通常需要再加一根GND线作共地用。
2.1.2、差分信号
差分信号这哥们可以说是电平信号的弟弟。前人发现,在长距离信息传输时,传输线会变成不可忽略的等效电阻,从而造成明显的压差,致使信息丢失、失真等现象。而且电平信号只有一根数据线,容易受到电磁干扰等等。
因以上原因,差分信号线就粉嫩登场。
既然你一根信号线容易受电磁干扰、长距离传输有明显压差,那么我用两根信号线表示,根据两根信号线同一时刻的压差区间定义0和1不就可以增强抗干扰性和增长了传输距离嘛。这就是差分信号的思想。
但差分信号也不是没有缺点的。
它的问题在于线材的花销是电平信号的两倍。当我们同时传输n路信号时,电平信号只需要n+1根线(n根信号线,1根共线线),而差分需要2n根线。所以电平信号和差分信号本身并无优劣之分,主要看使用场景进行选择。
2.2、信号解析
信号解析的操作过程而言,其实就是信号解码的过程。发送方通过对01串进行编码发送给接收方,而接收方通过之前约定的编码规则逆向解析。
这个发送和接收的过程中会产生两个问题:
接收方怎么知道发送方什么时候发送了信息?
如果发送了信息,又发送了多少信息?
由以上两个问题可以引申出两种不同的通信方式:
同步通信
异步通信
2.2.1、同步通信
同步通信,在表现形式上就是在收发双方之间加了一条时钟线。通过结合时钟线SCL的电平状态和信号线SDA的电平状态组合出诸如:起始信号、终止信号、实际想要发送的0/1信号等。
如单片机中最常用的I2C协议,它的起始和终止信号就是通过判断时钟线SCL在高电平时,信号线SDA的边沿跳变情况决定的。(关于I2C的具体内容,不了解的朋友可以自行搜索学习。)下图为同步通信示例,I2C协议的拓扑连接图。
2.2.2、异步通信
异步通信跟同步通信的最大区别在于——异步通信没有时钟线,只有信号线和地线。
既然没有的时钟线作为辅助,那么信号线SDA就需要传输包含更多的信息,以替代时钟线的作用。诸如:
我们接收方需要知道收到怎样的信号时表示一个数据的开始。
怎样的信号表示一个信号的结束。
怎样的信号表示需要传递的数据本身。
因此,异步通信传输的01串里,必然需要包含起始位、停止位,以及真正需要传输的数据的数据长度。
不仅如此,我们还需要统一一下收发双方的传输速率,以便接收方能及时且准确的处理发送方发来的数据。
这个传输速率,我们一般称为波特率。波特率指的是每秒钟传送的码元的个数。至于码元是啥。。。由于本人太菜,这个概念的实际内涵还没理解透彻。但在通信过程中,常常一个码元等于一个比特,所以在通信过程中,波特率在大多数情况下,可以理解为比特率。即每秒钟传送得到比特个数。
2.2.3、小结
同步通信:
优点:
可以根据不同时钟线边沿的不同,判断信息的采集与否。
不用添加额外的状态位,增加了信息传输密度。
缺点:
需要时钟线协调。
占用发送端和接收端双方的资源(收发双方都需要,时刻关注时钟线的)。
异步通信:
优点:
不需要额外的信号线,所占用线较少。
只占用接收端的资源(需要时刻关注数据线的电平变化情况,但发送方不用)。
缺点:
需要状态位表示收发状态。
需要协定信息传输速率协同双方的信息处理。
比较结论:
同步通信比异步传输效率更高,适合信息交互频繁的场合。
异步通信,相对整体占用资源较少,适用信息交互相对较少的场合。
2.3、通信协议
知道了0/1如何表示,也知道了收发双方对信号解析应该注意的事项。那么就还剩最后一个重要的问题了,即:如何用0和1的组合表示我们所要传达的信息?
换句话说,对于一大串01序列应该如何解读?
这个问题就属于编码的范畴了,如何编码是通信协议规定的。不同的协议有不同的编码方式,这个在学习具体通信协议时会感受到。但它们无外乎遵从以下几点:
0/1表示
信号解析
编码方式
传输方向
传输方向前面没有提到,这里简单的介绍下。
2.3.1、传输方向
通信的传输方向可以分为以下三种:
单工通信:任何时刻都只能单向传输信息。
半双工通信:同一时刻只能单向传输信息,即在通信过程中可以改变传输方向。
全双工通信:任何时刻都可以双向传输信息。
由以上定义其实可以看出,一般单工和半双工都是通过一根信号线实现的,而想要实现全双工,则需要两根信号线用两个端口接收。
2.3.2、常见通信协议
有关通信协议的主要问题,个人觉得有上面的理解差不多够了。下面是简单介绍下载单片机中常用到的通信协议:
串口协议:皆为异步全双工协议。
RS-232:电平信号
RS-485:差分信号
I2C总线协议:同步半双工协议(电平信号)
SPI总线协议:同步全双工协议(电平信号)
。。。。。。
三、缓存方式
在通信过程中,缓存机制是很有必要,至于为什么,请看下图:
没有缓存的发送端
接收端其实也是同样的道理,由此看出缓存机制的必要性。
而常见的缓存机制有两种:
FIFO
DMA
学过数据结构的朋友对FIFO应该都不陌生,first in first out,先进先出的队列结构。
还是发送端为例,应用到上述过程中的话,就是cpu把要传的数据先丢给寄存器,由该寄存器一个bit一个bit的丢给发送端口,CPU就去干其他的活了。
但寄存器的存储空间很有限,很多情况下还是要把需要发送数据拆分成多个段落分次传输,所以引申了一个原理类似,但比寄存器存储空间要大的缓存机制——DMA。
时间:
2022-11-24 18:11
作者:
18196445878
感谢楼主分享,很有用
通信人家园 (https://www.txrjy.com/)
Powered by C114