计算机从最初发展到现在已经有半个多世纪的历史,众所周知其实计算机就是一堆电路的组成,传统最为通用的计算功能仅仅是控制高低电平,输入输出(0和1)。而计算机中的CPU和其他设备如内存,硬盘,主板的其他电路连接过程中,控制的过程就是通过相关的通信协议,让一堆的高低电平输入输出最终可以转化为我们我们工作需要的内容,而赋予这些0,1实际意义的就是通信协议。计算机中有着众多的通信协议,有些协议已经逐渐被淘汰,而另外一些经过这么多年的发展仍然在各行各业经久不衰,一些更新更稳定更满足这个时代需求的协议也正在被越来越多的智能设备移动设备所采纳。本文仅仅是简要的叙述计算机嵌入式中最常用的一些协议。

这边如果对码元,波特率等还不是恨清除的可以参考传输速率这篇文章。

在了解通信协议和传输前,得先弄明白:总线和协议,串行传输和并行传输,同步通信和异步通信,全双工和半双工等基本概念,至于具体的通信方式和协议,这边仅作简述,有单独文章进行具体阐述。

总线和协议

在展开讲解之前,先来区分两个概念:总线和协议。

总线是一组信号线的集合,它定义了各引线的信号、电机、机械特性,使计算机内部各组成部分之间以及不同的计算机之间建立信号联系,进行信息传送和通信,按照作用范围简单来分可以分为内部总线和外部总线。内部总线:就是计算机内部功能模板之间进行通信的总线,它是构成完整的计算机系统的内部信息枢纽,但按功能仍要分为数据总线DB,地址总线AB,控制总线CB,电源总线PB。外部总线是计算机与计算机之间或计算机与其他智能设备之间进行通信的连接。但随着嵌入式不断的发展,现在在两者的区分已经不是那么严格,USB的传输可以认作是外部串行传输方式,而传统所认为是内部穿行传输方式的IIC现在也被一些外接的传感器所使用,因此在嵌入式领域已经无需再纠结是内部总线还是外部总线,毕竟为了满足需求很多原有的协议已经进行的改进使得传输距离更远,抗干扰性更强了,也有更多曾经的内部总线被在外部所使用了。

通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保在通信过程中数据顺利地传送到确定的地方。

因为总线的种类实在太多,各种总线的衍生品层出不穷,这边就不详细列举,以下仅仅将目前嵌入式/微机上面最为常见的通信方式列举出来。

串行总线和并行总线

采用串行传输方式的总线被成为串行总线,一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。

串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于8位通道之间的互相干扰(串扰),传输时速度就受到了限制,传输容易出错。串口没有互相干扰。并口同时发送的数据量大,但要比串口慢。串口硬盘就是这样被人们重视的。

采用并行传输方式的总线被成为并行总线,并行通讯通常可以一次传送8bit、16bit、32bit甚至更高的位数,相应地就需要8根、16根、32根信号线,同时也需要加入更多的信号地线。比如传统的PATA线路有40根线,其中有16根信号线和7根信号地线,其他为各种控制线,一次可以传送2Byte的数据。并行通讯中,数据信号中无法携带时钟信息(需要时钟信息,是为了确保一次发送的为一组相关数据,当始终跳转一次的时候,再发送下一租数据,如果缺少始终信息,而多组数据的传输有快有慢的话,则所有数据会串扰,通讯毫无意义。而串行通讯则没有这样的问题,一个个位发送,最终只需按照协议整合数据即可,当然也有部分穿行通信协议利用时钟来实现附加的操作),为了保证各对信号线上的信号时序一致,并行设备需要严格同步时钟信号,或者采用额外的时钟信号线。

通过串行通讯与并行通讯的对比,可以看出:串行通讯很简单,但是相对速度低,抗干扰能力强(可以用在长距离通讯),成本低;并行通讯比较复杂,但是相对速度高,成本高(需要更多的线),抗干扰能力弱(传输距离短)。

同步通信和异步通信

异步通信就是发送方在任意时刻都可以发送数据,前提是接收端已经做好了接受数据的准备(如果没有做好接受准备,数据肯定发送失败),也正是因为发送方的不确定性,所以接收方要时时刻刻的准备好接受数据,同时由于每次发送数据时间间隔的不确定性,所以,在每次发送数据时都要使用明确的界定符来标示数据(字符)的开始和结束位置,可以想象这种通信方式效率很低。虽然异步通信效率低,但是对设备的要求不高,通信设备简单。异步通信是计算机通信中最常用的数据信息传输方式。它是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。

同步通信和异步通信相反,就是主机在进行通信前要先建立同步,即要使用相同的时钟频率,发送方的发送频率和接受方的接受频率要同步。

除了时间频率的不同外,异步通信和同步通信之间的区别还是发送数据的表示形式,异步通信一般发送单位是字符,同步通信发送单位是比特流(数据帧),但是这不是绝对的,异步通信有时也使用帧来通信。同步通讯进行数据传输时,发送和接收双方要保持完全的同步,因此,要求接收和发送设备必须使用同一时钟。优点是可以实现高速度、大容量的数据传送;缺点是要求发生时钟和接收时钟保持严格同步,同时硬件复杂。可以这样说,不管是异步通信还是同步通信都需要进行同步,只是异步通信通过传送字符内的起始位来进行同步,而同步通信采用共用外部时钟来进行同步。所以,可以说前者是自同步,后者是外同步。事实上目前大多是采用异步通讯,极少数是采用同步通讯的。

单工,全双工和半双工

  • 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。
  • 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在(即不能同时传输),称为半双工传输。
  • 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。

串口通信 (见详细文章)

串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。曾经PC之间进行串口通信可以说是标配,很多老式电脑上面可以看到DB25的接头,但后来逐渐被DB9取代,早期鼠标打印机都通过串口进行数据传输的,但现在逐渐被USB和网络所取代,DB9的串口接头在PC和笔记本上面也较少能够看到了。做嵌入式开发可以看到有个DB9的串口标准接口,串口对于开发人员输入输出调试等有着至关重要的作用。串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等,现在串口一般在工业嵌入式领域使用。

在使用串口通信时最重要的参数:波特率,数据位,停止位,奇偶校验位。

同步通信和异步通信:异步通信是计算机通信中最常用的数据信息传输方式。它是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。

RS-232-C

传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。目前一般可以见到的串口接头都为DB9的232接口,

  • RS-232串口通信最远距离是50英尺,约为15m
  • RS-232可做到双向传输,全双工通讯,最高传输速率20kbps
  • RS-232C上传送的数字量采用负逻辑,且与地对称:逻辑1:-3 ~-15V 逻辑0:+3~+15V ()

RS-485

232串口在实际使用已经用处不大,但基于232发展出来的485等串口设备仍然被广泛使用,RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。有了多个设备的能力,你可以使用一个单个RS-485口建立设备网络。

因为都是串口通信,所以本质两者是相差无几的,但耗材少,抗干扰强等特点让RS485在目前的工业领域仍然被广泛使用,这边主要列举出不同:

  • 从接线上,RS232是三线制,RS485是两线制
  • 从传输距离上,RS232只能传输15米,RS485最远可以传输1200米
  • 从速率上,RS232是全双工传输,RS485是半双工传输
  • 从协议层上,RS232只支持点对点通讯(1:1),RS485支持总线形式通讯(1:N)

SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200,stm32f103等。

IIC

IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口,如今越来越多的芯片集成了这种通信协议,比如stm32f103,EFM32等。

其他


To be continued…

参考链接:
http://blog.csdn.net/wind19/article/details/7433249
http://baike.baidu.com/view/185322.htm
http://www.cnblogs.com/mylinux/p/4078576.html
http://baike.baidu.com/view/716175.htm
https://www.zhihu.com/question/29033993
http://www.cnblogs.com/general001/articles/2344079.html
http://blog.csdn.net/weiqifa0/article/details/8845281
http://www.cnblogs.com/jason-lu/articles/3171870.html