嵌入式硬件通信接口协议-UART(一)协议基础

时间:2018-12-19来源:网络

       如果拿到一块板子或者一套设备,但没有源码程序,纯靠硬件抓取通信串口的数据内容,首先利用示波器观测每个bit的宽度,后换算成比特率,这时候比特率基本上就是波特率了。利用串口助手模块,在PC端下载个串口助手,设置匹配的波特率进行数据抓取。

  比如抓到波形116us/bit, 直接转换得:1bit/116us = 1 bit/(116/1000000)s = 8620.68 bit/s,此时配置串口助手的波特率,利用串口助手模块与被测信号管脚进行连接,即可实现串口数据的抓取。

  (二)数据位Data bits:

  在维基百科的介绍中,数据的位数一般可有5~9位,其中各个位数的应用场景也是有区别的:

  5位常用于博多码(Baudot code)

  7位常用于ASCII字符

  8位则用于大多数类型的数据并且与字节(Byte)匹配

  6位9位少用

  收发双方定义了相同的数据位宽后,才能对信号管脚采样时正确解码到传输的数据内容。

  如上列出的不同数据位数情况,在不同的应用场景中,能够选择合适的数据完成高效率的传输。

  (三)校验位Parity:

  校验位可在数据传输过程中,接收方对信号管脚进行采样和解码时,对数据的完整性和正确性进行校验,保证在通信过程中,可有效排除线路不稳定或者外界的干扰导致数据位出错的问题。

  校验位作为可选的配置项,可进行的配置方式有:

  配置方式

  作用

  备注

  None

  无校验

  在数据传输的帧结构中没有校验位

  Odd

  奇校验

  数据中”1”的个数是奇数,校验位被置0;

  数据中”1”的个数是偶数,校验位被置1。

  Even

  偶校验

  数据中”1”的个数是奇数,校验位被置1;

  数据中”1”的个数是偶数,校验位被置0。

  Mark

  校验位始终是“1”

  校验位始终是“1”

  Space

  校验位始终是“0”

  校验位始终是“0”

  对于奇偶校验位的设置,比较容易混淆的是奇校验和偶校验的设定,在下图中分别列出了所有校验位配置方式的时序图,其中传输的数据是DigCore的缩写DC,即十六进制为0xDC:

  


  对比观察上图中的各类校验方式,简单说奇校验(Odd-Parity)方式,传输的数据0xDC,二进制11011100,从二进制数值看到有5个“1”,也就是奇数个“1”,则在校验位被置“0”,此时逻辑“1”的个数总和等于奇数5,从而实现奇校验。

  简而言之,保证一个原则是,开启奇校验时,数据中“1”的个数与校验位“1”数量总和为奇数,开启偶校验时,该数量总和为偶数。

  (四)停止位Stop bits:

  停止位可配置成1bit、1.5bit和2bit三种,配置成其中一种的时候,信号管脚的电平保持对应bit时长的高电平。

  停止位的意义在于标志着一个数据的发送完成,同时保证了收发双方在进行硬件操作的时候,提供了可靠的处理时间。

  


  (五)流控制Flow control:

  流控制,俗话说就是“握手”。流控制的作用,在不同处理性能的设备之间,数据传输之前,接收方会以“流控制”来通知发送方,是否可以继续进行接下来的数据传输。这样的应用场景多见于计算机与低性能的微控制器通信,也可见于PC与打印机之间进行的数据传输,该特点都是接收方的接收缓存已满或处理事务较慢时,从而需要流控制来告知发送方稍后再发送。

  流控制的方式分别有软件和硬件两种。

  软件的流控制方式,在UART通信中,只需RxD、TxD、GND三根即可,数据在传输过程中,依靠代码的判断处理,并通过收发双方进行的数据交互完成控制,在现有通信物理信号线基础上,使用控制字符(ASCII表中的0x00~0x0x1F、0x7F)完成控制指令的交互。一般在私有协议下也会定义一些特殊字符设为控制指令。

  硬件的流控制方式,即在原有的RxD、TxD、GND三根信号线的基础上,再增加RTS/CTS和DTR/DSR这两组信号线。

  第一组线是RTS(Request toSend)和CTS(Clear toSend)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。

  第二组线是DTR(DataTerminal Ready)和DSR(Data SetReady)。这些线主要用于Modem通信。使得串口和Modem通信他们的状态。

  例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。

  而在实际的应用中,硬件的方式比较少用,最大的原因是消耗硬件成本,并且在当前的MCU性能下,UART的FIFO缓存器、MCU的UART事件中断等等因素,都能够完成数据的接收和存储,并且对大多数的应用场景是完全足够,因此在很多应用中已经很少用到硬件流控制。

  信号

  定义

  作用

  DTR

  数据终端准备好

  Data Terminal Ready

  DSR

  数据准备好

  Data Set Ready

  RTS

  请求发送

  Request To Send

  CTS

  清除发送

  Clear To Send

  文章到此已经完成了对UART协议基础的描述,欲知UART的不同电气特性下的接口规范,且听下回分解!

  参考资料:

  《串行接口》@百度百科

  《Serial Port》@维基百科

  《波特》@百度百科

1 2

关键词: 嵌入式 UART

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版