实际上这一篇博文想表达的就是想说清楚什么是串口通信。
先普及一下通信的基本知识点:
数据通信的种类:串行通信、并行通信。不管是什么类型的通信,再怎么复杂的,也是在这两种上面衍生出来的。
许多传输线或者通路组成的,每条线可以一位一位的传输,这些位可以在规定的时间里传输完成,也可以在一定的时间内,多位同时传输;这就是串行通信和并行通信。
数据通信的传输方向:单工、半双工、全双工。它们之间各有什么样的特点,我举了车辆过道的实例,通俗易懂的跟大家讲明白了。
1、单工:在任何时刻都只能进行一个方向的通讯,即一个固定为发送设备,另一个固定为接收设备。单工就类似一个只允许单方向运行的车道,在任何时刻,只允许一辆车向同一个方向走,不允许逆行。
2、半双工: 两个设备之间可以收发数据,但不能在同一时刻进行。这个形象举例就像是对讲机,你在说话往外发的时候,别人就不能同时给你发,等你讲完了,别人再给你回话。
3、全双工:在同一时刻,两个设备之间可以同时收发数据。这个就像手机通话,你讲话的同时,对方同时可以插话,你也可以听到。
数据通信的方式:同步、异步。
同步和异步的区别:首先很多地方都有同步和异步的概念,简单来说就是发送方和接收方按照同一个时钟周期工作就叫同步,发送方和接收方没有按照统一的时钟周期、而各自按照自己的时钟周期工作就叫异步。
同步通信中,通信双方按照统一节拍工作,所以配合很好;一般需要发送方给接收方发送信息同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。同步通信用在通信双方信息交换频率固定,或者经常通信时。
异步通信又叫异步通知。异步就是随时都可以,但怎么来区分开始,动作和结束呢?这就需要一帧数据里面需要安插开始传输位(开始位)、数据内容、结束位(停止位)以作区分,然后还需要一定的传输频率(波特率),这样才能将数据发送出去。在双方通信的频率不固定时(有时3ms收发一次,有时3天才收发一次)不适合使用同步通信,而适合异步通信。异步通信时接收方不必一直在意发送方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后就认为后面紧跟着的就是有效信息,才会开始注意接收信息,直到收到发送方发过来的结束标志。
串口通信是属于异步的,这个时候的波特率就显得很重要了。
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器,英文缩写是uart,中文简称串口,既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式(就是经常说的 9600,N,8,1);通信双方只要采用相同的帧格式和波特率(这就是异步通信的特点),就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。实际上UART这个器件是整个电路板是否支持串口通信的标志。
通常,串口通信由一个起始位,多个数据位,一般是8位,或者8位以下,从一个字节的低位开始传输,传输完毕后传输停止位,这就是一个基本的串口协议,当然这个协议中也可以安插一些空闲位,还有奇偶校验位。我们可以很形象的用一幅图来表示:
1)RS-232标准
RS-232是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。需要说明一下,很多人经常把RS-232、RS-422、RS-485 误称为通讯协议,这是很不应该的,其实它们仅是关于UART通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面)。
该标准规定采用一个25 个脚的DB-25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM的PC 机将RS-232 简化成了DB-9 连接器,从而成为今天的事实标准。而工业控制的RS-232 口一般只使用RXD(2)、TXD(3)、GND(5) 三条线。
2)RS-485/ RS-422标准
RS-232接口可以实现点对点的通信方式,但这种方式不能实现联网功能。于是,为了解决这个问题,一个新的标准RS-485产生了。RS-485的数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B。
通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~6V,是另一个逻辑状态。另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用的。
RS-422 的电气性能与RS-485完全一样。主要的区别在于:RS-422 有4 根信号线:两根发送、两根接收。由于RS-422 的收与发是分开的所以可以同时收和发(全双工),也正因为全双工要求收发要有单独的信道,所以RS-422适用于两个站之间通信,星型网、环网,不可用于总线网;RS-485 只有2 根信号线,所以只能工作在半双工模式,常用于总线网。
其实RS232/485只是上面提到的UART数据帧的传输方式、途径。直白点就是怎么将数据帧中的0和1bit通过物理的接线传输出去。这就涉及到一个问题,在不同的线路上如何表示0和1呢?当然,我们都知道他们肯定是通过电平信号表示的0和1,所以他们的差异就只是表示0和1的电平或者叫电压是多少不同,判定多少伏表示0和1的方式的区别。线路上传输的数据是一样的,只是表现形式略有差异。
RS232/RS485,是两种不同的电气协议,也就是说,是对电气特性以及物理特性的规定,作用于数据的传输通路上,它并不内含对数据的处理方式。比如,最显著的特征是:RS232使用3-15v有效电平,而UART,因为对电气特性并没有规定,所以直接使用CPU使用的电平,就是所谓的TTL电平(可能在0~3.3V之间)。更具体的,电气的特性也决定了线路的连接方式,比如RS232,规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的;而RS485, 使用差分电平表示数据,因此,必须用两根线才能达到传输数据的基本要求,要实现全双工,必需用4根线。但是,无论使用RS232还是RS485,它们与UART是相对独立的,但是由于电气特性的差别,必须要有专用的器件和UART接驳,才能完成数据在线路和UART之间的正常流动。从某种意义上来说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据,并变成CPU可直接读写的形式。
所以RS232/485就是代表一种电平标准,只是同TTL不同的一种电平。
后续再补上。。。。。
参考链接:
1、UART和RS232/RS485的关系是什么?
2、浅谈总线通信机制(通信基础+串口+I2C)
3、TTL,COMS,USB,232,422,485电平之详细介绍及使用
以上链接都是值得学习和参考的。