串口协议

Posted the-explosion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口协议相关的知识,希望对你有一定的参考价值。


1、 串行通讯与并行通讯
  按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。而并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式,它们的通讯传输对比说明见下图:

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  很明显,因为一次可传输多个数据位的数据 ,在数据传输速率相同的情况下,并行通讯传输的数据量要大得多,而串行通讯则可以节省数据线的硬件成本(特别是远距离时)以及 PCB 的布线面积,串行通讯与并行通讯的特性对比见下表:

技术图片

 

 

 

 

 不过由于并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能,现在随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。 

2、 全双工、半双工及单工通讯

  根据数据通讯的方向,通讯又分为全双工、半双工及单工通讯,它们主要以信道的方向来区分,见下图:
技术图片

 

 

 

 

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、 同步通讯与异步通讯

  根据通讯的数据同步方式,又分为同步和异步两种,可以根据通讯过程中是否有使用到时钟信号进行简单的区分。
在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。  
技术图片

 

 

 

 

 

 



 

 

  在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,见下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步 。
技术图片

 

 

 

 

 

 


 

 

 

 

在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。  

4、 通讯速率
  衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。容易与比特率混淆的概念是“波特率”(Baudrate),它表示每秒钟传输了多少个码元。而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。如常见的通讯传输中,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有 0V2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率,虽然严格来说没什么错误,但希望您能了解它们的区别。 

5、串口通讯协议简介
  串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
  在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设; STM32 标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。

  5.1、物理层

  串口通讯的物理层有很多标准及变种,我们主要讲解 RS-232 、RS485、RS422标准 , 这些标准主要规定了信号的用途、通讯接口以及信号的电平标准。

  (1)、通讯接口 
技术图片

 

 

 





  (2)、电平标准

  根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准、 RS-232 标准、RS485标准、RS422标准。

 技术图片

 

 

 

 

 

 

 

 

 

 

 

  RS232、RS485、RS422的区别如下:

技术图片

  5.2、协议层

  串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见下图:

技术图片

 

 

 

 

   (1)、波特率这里主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码, 图 20-6 中用虚线分开的每一格就是代表一个码元。常见的波特率为48009600115200 等。

  (2)、 通讯的起始和停止信号  串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.511.5 2 个逻辑 1 的数据位表示,只要双方约定一致即可。

  (3)、有效数据

  在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 567 8 位长。

  (4)、 数据校验

  在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)0 校验(space)1 校验(mark)以及无校验(noparity),它们介绍如下:

  ? 奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。

  ? 偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧: 11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。

  ? 0 校验是不管有效数据中的内容是什么,校验位总为“0”, 1 校验是校验位总为1”。

  ? 在无校验的情况下,数据包中不包含校验位。

                              

影响通讯性能,现在随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。 

以上是关于串口协议的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Z-STACK协议栈串口

嵌入式09STM32串口通信协议

51单片机自定义串口通讯协议控制流水灯+Proteus仿真

如何用VB通过485串口来读取电能表的数据?

自定义用户层的灵活性串口通信协议

C# 串口操作系列 -- 协议篇,二进制协议数据解析