深入剖析串口通信数据格式

串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。 串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。

在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。串行通信的数据是逐位传输的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还必须能够确定一个信息组的开始和结束。常用的两种串行通信方式包括同步通信和异步通信。

TTL电平和RS232电平

TTL电平:+5V等价于逻辑”1”,0V等价于逻辑”0”;

RS232电平: 串口的一个标准,采用负逻辑。

  1. 在TXD和RXD上:逻辑”1” = -15V ~ -3V,逻辑”0” = +3V ~ +15V

  2. 在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压,高电平)= +3V~+15V,信号无效(断开,OFF状态,负电压,低电平) = -3V~-15V

9针串口(DB9)

这里写图片描述

管脚功能说明如下:
这里写图片描述

串行同步通信与串行异步通信

(PS:本节中电平为TTL电平)

同步通信(SYNC:synchronous data communication)是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

异步通信(ASYNC:asynchronous data communication),是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。 异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。停止位至下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始。而根据起始位和停止位也就很容易的实现了字符的界定和同步。
显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步。

异步通信的数据格式

(PS:本节电平为TTL电平)

一个数据帧包括:1个起始位(低电平),8个数据位,1个校验位,1个停止位(高电平,表示数据帧结束),如下图所示。
这里写图片描述
1. 在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态
2. 起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接受器数据传输即将开始;

  1. 数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位),低位(LSB)在前,高位(MSB)在后

  2. 校验位(parity Bit):校验位一般用来判断接收的数据位有无错误,分为NONE(无校验位)/ODD(奇校验)/EVEN(偶校验)/MASK(标志位,校验位一直为1)/SPACE(空白,校验位一直为0),例如,如果数据是1011,那么对于偶校验,校验位为1,保证逻辑高的位数是偶数个,如果是奇校验,校验位为0,保证逻辑低的位数是奇数个。一般是奇偶校验,在使用中,该位常常取消;

  3. 停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态
  4. 位时间:即每个位的时间宽度,起始位、数据位、校验位的位宽度是一致的,停止位有1位、1.5位、2位格式,一般为1位。

异步数据的数据发送过程

发送数据的具体步骤如下:

  1. 初始化后或者没有数据需要发送时,发送端输出逻辑1,可以有任意数量的空闲位;

  2. 当需要发送数据时,发送端首先输出逻辑0,作为起始位;

  3. 接着开始输出数据位,发送端首先输出数据的最低位D0,然后是D1,最后是数据的最高位;

  4. 如果设有奇偶检验位,发送端输出检验位;

  5. 最后,发送端输出停止位(逻辑1);

  6. 如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转入步骤2;

  7. 如果是以232电平发送的,示波器上看到的发送端信号应是上述数据包取反后的结果(负逻辑)。

异步通信的数据接收过程

在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明:

  1. 开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数;

  2. 接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

  3. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

  4. 检验奇偶检验位;

  5. 接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

  6. 本帧信息全部接收完,把线路上出现的高电平作为空闲位;

  7. 当信号再次变为低时,开始进入下一帧的检测。
    (PS1:接收时钟和发送时钟与波特率有如下关系:
    f = n × B 这里f 是发送时钟或接收时钟的频率; B 是数据传输的波特(Baud)率; n 称为波特率因子。设发送或接收时钟的周期为Tc,发送一个波形所需要的传输时间为Td,则: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,从而n代表发送一个波形需要几个时钟周期。 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。
    PS2:波特率与比特率的关系:
    波特率代表1秒钟发送波形的个数,而比特率代表1秒钟发送比特的个数。在采用二进制传输的情况下,发送的波形一共有两种波形,即高电平和低电平,那么一个波形代表一个比特,因此波特率和比特率相等;在采用四进制传输的情况下,发送的波形一共有4种波形,此处假设发送的最高电平为3V,发送00的波形为0V,发送01的波形为1V,发送10的波形为2V,发送11的波形为3V,那么一个波形代表两个比特,因此比特率是波特率的两倍;同理,在采用八进制传输的情况下,比特率是波特率的三倍,以此类推。)

串口助手通过DB9串口发送数据剖析

波特率115200bps,每个比特时间:1s/115200 = 1000000us/115200=8.68us。

发送5C4E,偶校验

1.串口调试助手

这里写图片描述

2.5C4E对应二进制:0101_1100_0100_1110,分别对2个字节加起始位、校验位、停止位(data的LSB先发):
      b |<–data–>| ps
0101_1100:0_0011_1010_0_1

      b |<–data–>| ps
0100_1110:0_0111_0010_0_1
合起来为:0_0011_1010_0_1_0_0111_0010_0_1
3.转换为负逻辑:1_1100_0101_1_0_1_1000_1101_1_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:
这里写图片描述

发送7B3D2A,无奇偶校验位

1.串口调试助手
这里写图片描述

2.7B3D2A对应二进制:0111_1011_0011_1101_0010_1010,分别对3个字节加起始位、停止位(data的LSB先发):
       b |<–data–>| s
0111_1011:0__11011110__1

       b |<–data–>| s
0011_1101:0__10111100__1

       b |<–data–>| s
0010_1010:0__01010100__1
合起来为:0_1101_1110_1_0_1011_1100_1_0_0101_0100_1
3.转换为负逻辑:1_0010_0001_0_1_0100_0011_0_1_1010_1011_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:
这里写图片描述

参考文献

https://wenku.baidu.com/view/83fc202b19e8b8f67d1cb93e.html
https://wenku.baidu.com/view/681e210aba1aa8114431d9d4.html

  • 18
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值