全双工(Full Duplex)是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。
半双工(Half Duplex),所谓半双工是指一段时间内,只有一种动作发生,例如一条窄路,而只有一辆车可以通行,当当前有两辆车相对时,在这种情况下,只有一辆车先开,等到另一辆车的头部再开,这个例子生动地说明了原始半双工。原因。早期对讲机、早期集线器等设备都是基于半双工产品的。随着技术的不断进步,半双工会逐渐退出历史舞台。
半双工需要“交警”来控制道路的方向,否则如果两个方向的数据同时发送,就会出现“碰撞”了。在网络中,交警被称为"CSMA/CD" 也就是"载波监听多点接入/冲突检查",这是一种用来辅助避免碰撞的访问方法。如果确实发生了碰撞,也要做出正确的反应。
单工通信是指通信线路上的数据按单一方向传送。

1、串行传输
优点:使用的数据线少,在远距离通信中可以节约通信成本。
缺点:因为每次只能传输一位数据,所以传输速度比较低。
2、并行传输
优点:因为可以多位数据一起传输,所以传输速度很快。
缺点:内存有多少位,就要用多少数据线,所以需要大量的数据线,成本很高
这是网上引用的,这段话在几年前可以说很完美,串行传输速度慢的原因是技术限制,时钟频率比较低。
随着技术的发展,时钟频率越来越高,并行导线之间的相互干扰越来越严重。并行接口因为有多条并行且紧密的导线,但时钟频率提高的一定程度时,传输的数据已经无法恢复。而串口因为导线少,线间干扰容易控制,反而可以通过不断提高时钟频率来提高传输速率。
而且并行设备的成本往往高于串行设备,所以现在许多高速设备都采用串行方式。
同步通信/异步通信:
同步通信与异步通信区别:
同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;
异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
同步通信效率高,异步通信效率较低。
同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
同步通信可用于点对多点,异步通信只适用于点对点。
异步通信:异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。
在异步通信中,每接收一个字符,接收方都要重新与发送主同步一次,所以接收端的同步时钟信号并不需要严格地与发送方同步,只要它们在一个字符的传输时间范围内能保持同步即可,这意味着南时钟信号漂移的要求要比同步信号低得多,硬件成本也要低的多,但是异步传送一个字符,要增加大约20%的附加信息位,所以传送效率比较低。异步通信方式简单可靠,也容易实现,故广泛地应用于各种微型机系统中。
由于数据是二进制的,它可以用线路上的两种状态表示,正电压(通常为+5V)代表二进制的1,负电压(-5V)代表二进制的0。为了正确地读取位,必须使用某种同步和定时方案。异步通信在发送字符的首尾设置起始位和停止位,所以通信双方无需使用同一时钟,字符以一帧一帧的方式发送,每帧以起始位为开始,以停止位为帧的结束。接收器起始位为基准,使用与发送器相同频率的的本地局部时钟即可实现在一个字符内的同步(字符与字符间是异步的),异步通信一般要求收发双方的波特率相同。传输的起始——停止模式意味着对于每一新字符传输都重新开始,这就消除了在上次传输中可能产生的任何定时差异。
虽然异步技术使用简单,但起始和停止位是额外开销,浪费了带宽。同步通信技术可以发送大数据块,比如说从1500到4096个字节。它在每帧的开始加上同步字符,通信双方必须使用同一时钟,传输时将每N位划分为一个时间片,在同一个时间片内一方发送,一方接收。接收端将检测到的同步字符后的数位当成实际信息来处理。在无信息传送时同步字符后的数位被填充成空字符,因为同步传输不允许有间隙。故同步通信无论是在字符与字符之间,还是在字符内部的位之间都是同步的。以太网使用Manchester信号编码方案,与数据一起发送时钟脉冲。
电平信号和差分信号
(1)、电平信号和差分信号是用来描述通信线路传输方式的。也就是说如何在通信线路上表达 1 和 0.
(2)、电平信号的传输线中有一个参考电平线(一般是 GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。
(3)、差分信号的传输线中没有参考电平,所有都是信号线。然后 1 和 0 的表达靠信号线之间的电压差。
总结:电平信号的 2 根通信线之间的电平差异容易受到干扰,传输容易失败;差分信号不容易受到干扰因此传输质量比较稳定,现代通信一般都使用差分信号,电平信号几乎没有了。
总结 2:看起来似乎相同根数的通信线下,电平信号要比差分信号要快;但是实际还是差分信号快,因为差分信号抗干扰能力强,因此 1 个发送周期更短。
并行接口和串行接口
(1)、串行、并行主要是考虑通信线的根数,就是发送方和接收方同时可以传递的信息量的多少
(2)、譬如在电平信号下,1 根参考电平线+1 根信号线可以传递 1 位二进制;如果我们有 3根线(2 根信号线+1 根参考线)就可以同时发送 2 位二进制;如果想同时发送 8 位二进制就需要 9 根线。
(3)、在差分信号下,2 根线(彼此差分)可以同时发送 1 位二进制;如果需要同时发送 8 位二进制,需要 16 根线。
总结:听起来似乎并行接口比串行接口要快(串行接口一次只能发送 1 位二进制,而并行接口一次可以发送多位二进制)要更优秀;但是实际上串行接口才是王道,用的比较广。因为更省信号线,而且对传输线的要求更低、成本更低;而且串行时可以通过提高通信速度来提高总体通信性能,不一定非得要并行。
总结:异步、串行、差分,譬如 USB 和网络通信更胜一筹。
在很多设备上,不方便接太多线,比如接8根数据线,也不方便接同步时钟信号(这个后面再说),于是一种异步串行通信就诞生了。
相对来说,异步串口通信,就只需要一根线就可以发送数据了。在对速率要求不高的情况,使用一根线发送数据是带来大大的方便和实用价值的。
那么问题来了,怎么样才能保证一根线就能发送正常的数据呢。也就说发送方发送的数据,接收方是怎么知道是什么数据呢。为了能正常发送数据和接收正确的数据,那异步串口通信就需要满足以下几个条件:

经理:我要用一根线就能传输数据,你来给我定个标准。
研发:好。
经理:只有一根线,我怎么知道数据什么时候开始呢。
研发:就一根线,默认是高电平,那就有一个起始位吧。当检测到有低电平的时候,就是开始有一个字节的数据发送了,起始位之后,先是字节的最低位,传送一个字节。
经理:可是,就一根线,过来的数据会不会有干扰,容易出错呀。
研发:行呀,那就在字节数据后再加一个校验位。可以作奇校验,偶校验,1校验,0校验,无校验。
经理:嗯 ,很不错。有起始位就应该有停止位,那我们就再加个停止位在后面吧。
研发:。。。。。。。。。
经理:传输一串数据,对方要怎么知道数据的拆分呢,怎么按时间或频率去解读数据位,校验位呢。
研发:这样吧,双方约定一个波特率吧,定义一个每个位占用多长的时间,这样双方按这个波特率就可以处理了。
经理:这个比特率呀。。。
研发:老板,是波特率。
经理:我知道,是比特率嘛。
研发:这个波特率呢,是指1S钟可以传输多个位,也就知道一个位占用多长时间。这样就解决传输的问题了。
经理:那万一传输过程,数据太快,判断失误停不下来怎么办。
研发:那就把停止位可以调节为1个停止位或者2个停止位。这样就可以停下来了。
经理:嗯,听着不错。就这样办吧。
于是,串口通信就这样出来了。
在串口的通信参数上,就有了波特率,数据位,停止位,校验位这几个参数来确保串口通信的正确性和稳定上。当然,这只是某个方面保证串口通信的正确性和稳定性,不代表设备间通信的正确性和稳定性。
串口通信主要为分232,485,422 通信三种方式。
RS232 电平和 TTL 电平
(1)电平信号是用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是 1 还是 0.
(2)在电平信号时多少 V 代表 1,多少 V 代表 0 不是固定的,取决于电平标准。譬如 RS232电平中-3V~-15V 表示 1;+3~+15V 表示 0;TTL 电平则是+5V 表示 1,0V 表示 0.
(3)不管哪种电平都是为了在传输线上表示 1 和 0.区别在于适用的环境和条件不同。RS232的电平定义比较大,适合干扰大、距离远的情况;TTL 电平电压范围小,适合距离近且干扰小的情况。
(4)我们台式电脑后面的串口插座就是 RS232 接口的,在工业上用串口时都用这个,传输距离小于 15 米;TTL 电平一般用在电路板内部两个芯片之间。
(5)对编程来说,RS232 电平传输还是 TTL 电平是没有差异的。所以电平标准对硬件工程师更有意义,而软件工程师只要略懂即可。(把 TTL 电平和 RS232 电平混接是不可以的)
