C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

亚星游戏官网-yaxin222  新兵

注册:2018-3-162
发表于 2022-11-11 10:25:33 |显示全部楼层
一、通信本质
通信通信,说白的就是信息互通。人跟人间的信息互通、机器跟机器间的信息互通、机器跟人间的信息互通。

而想要做到互通,主要有两个问题需要解决,“信息该如何表示?”和“信息该如何传输?”两个核心问题。

大家知道信息交互中,最原始、朴素的表示是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。

举报本楼

本帖有 1 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-10 16:23 , Processed in 0.130091 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图