通信协议简介(一)--RS232

发布时间 2024-01-02 19:15:30作者: 日暮途远7

         在当今的电子系统中,经常需要板内、板间或者下位机与上位机之间进行数据的发送与接收,这就需要双方共同遵循一定的通信协议来保证数据传输的正确性。常见的协议有UART(通用异步收发传输器)、IIC(双向两线总线)、SPI(串行外围总线)、USB2.0/3.0(通用串行总线)以及Ethernet(以太网)等。在这些协议当中,最为基础的就是UART,因其电路结构简单、成本较低,所以在注重性价比的情况下,使用非常广泛。

  通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。它包括了RS232、RS449、RS423、RS422和 RS485等接口标准规范和总线标准规范。换句话说,UART是异步串行通信的总称。而 RS232、RS449、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它们规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。

        RS232通信接口标准

  RS232是美国电子工业协会(Electronic Industries Association ,EIA)于1962年颁布的通信标准,其全称是:DTE和DCE的电气/机械接口标准。“DTE”是英文“Data Terminal Equipment ”的缩写,翻译为“数据终端设备”,比如计算机;“DCE”是英文“Data Circuit-terminating Equipment”的缩写,翻译为“数据电路端接设备”。也有将其写作“Data Communication Equipment”,翻译为“数据通信设备”,比如调制解调器。“RS232”名称中的“RS”是“Recommand Standard”的缩写,表示“推荐标准”。“232”是标识号。早期的RS232是为了实现计算机、程控电话、调制解调器之间通信而制定的标准,后来经过多次改版,成了一种通用的串行通信标准。RS232的改版信息如下:

  • 1969年C版本(RS232-C);
  • 1986年D版本(RS232-D);
  • 1991年E版本(RS232-E);
  • 1997年F版本(RS232-F);

  目前,在工业自动化领域,RS232多用于触摸屏、读卡器、扫码枪、打印机等设备与PLC之间的通信。

  在F版本中定义了9针串口,同样包括公头(用于DTE)和母头(用于DCE)两种,如下图所示:

RS232,DB9 针脚定义

  由于两个通讯设备之间的收发信号(RXD与TXD)应交叉相连,所以调制调解器端的 DB9母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用“直通型”的串口线连接起来即可。

  串口线中的RTS、CTS、DSR、DTR及 DCD信号,使用逻辑1表示信号有效,逻辑О表示信号无效。例如,当计算机端控制DTR信号线表示为逻辑1时,它是为了告知远端的调制调解器,本机已准备好接收数据,0则表示还没准备就绪。平时使用时一般只使用RXD,TXD,GND三条线即可。

        RS232通信协议细则

  1、RS232是UART的一种,没有时钟线,只有两根数据线,分别是rx和 tx,这两根线都是1bit位宽的。其中rx是接收数据的线,tx是发送数据的线。

  2、rx位宽为1bit,PC机通过串口调试助手向设备发8bit数据时,设备通过串口线rx一位一位地接收,从最低位到最高位依次接收,最后在设备里面位拼接成8比特数据。

  3、tx位宽为1bit,设备通过串口往PC机发8bit数据时,设备把8bit数据通过ts线一位一位的传给PC机,从最低位到最高位依次发送,最后上位机通过串口助手按照RS232协议把这一位一位的数据位拼接成8bit数据。

  4、串口数据的发送与接收是基于帧结构的,即一帧一帧的发送与接收数据。每一帧除了中间包含8bit有效数据外,还在每一帧的开头都必须有一个起始位,且固定为0;在每一帧的结束时也必须有一个停止位,且固定为1,即最基本的帧结构(不包括校验等)有10bit。在不发送或者不接收数据的情况下,rx和 tx处于空闲状态,此时rx和 tx线都保持高电平,如果有数据帧传输时,首先会有一个起始位,然后是8bit的数据位,接着有1bit的停止位,然后rx和 tx继续进入空闲状态,然后等待下一次的数据传输。如图所示为一个最基本的RS232帧结构。

RS232 帧结构

  5、波特率:在信息传输通道中,携带数据信息的信号单元叫码元(因为串口是1bit进行传输的,所以其码元就是代表一个二进制数),每秒钟通过信号传输的码元数称为码元的传输速率,简称波特率,常用符号“Baud”表示,其单位为“波特每秒(Bps)”。串口常见的波特率有4800、9600、115200等。
  6、比特率:每秒钟通信信道传输的信息量称为位传输速率,简称比特率,其单位为“每秒比特数(bps)”。比特率可由波特率计算得出,公式为:比特率=波特率*单个调制状态对应的二进制位数。如果使用的是9600的波特率,其串口的比特率为:9600Bps *lbit= 9600bps。
  7、由计算得串口发送或者接收1bit数据的时间为一个波特,即1/9600秒,如果用50MHz(周期为20ns)的系统时钟来计数,

需要计数的个数为cnt =(1s * 10^9)ns /9600bit/20ns ~=5208个系统时钟周期,即每个bir数据之间的间隔要在50MHz的时钟频率下计数5208次。

  8、上位机通过串口发8bit数据时,会自动在发8位有效数据前发一个波特时间的起始位,也会自动在发完8位有效数据后发一个停止位。同理,串口助手接收上位机发送的数据前,必须检测到一个波特时间的起始位才能开始接收数据,接收完8bit 的数据后,再接收一个波特时间的停止位。