非同步(异步)串行通信

非同步串口通信

学习目标:

  • 解释串口通信,非同步通信,结构和一些专有名词是什么
  • 串口通信的代码
  • 解释多个比特的信息/包是怎样尽心交流的
  • 软件上怎么实现“big banging”位触发
  • 有效数据传输率和误差容忍范围

为了实现非周期串口通信,我们需要一些标识符号来区别哪里是传输开始,哪里是结束,所以传输内容的结构就是非常重要的。

传输格式

一些名词

  1. 空闲位(idle)

当我们不传输数据的时候,传输端口和接受端口之间的线段就处在这个状态,属于高电压位,即为1

  1. 起始位

告诉接收器这是要开始传输数据啦,用0来表示

  1. 结束位

可以是1位,也可以是两位告诉接收器已经结束啦,用1来表示。

  1. 波特率(baud rate)也叫符号率(symbol rate)

波特率是来描述传输的速率,即为一秒钟可以传输多少个字符(bit)。例如9600就是一秒钟可以传输9600 bit的数据

  1. 校验位(parity bit)

在一些时候由于噪音或者其他的原因会出现传输数据的错误,所以为了让接收器检测到传输是否出现了错误,就使用校验位,也可以不使用。

校验其实就是事先定义整个传输内容中1的个数,校验分为偶校验(even)和奇校验(odd)。如果要求1的个数为偶数个,就是偶校验,反之为奇校验

如果我们选择的是偶校验,一个传输内容中现在 已经有奇数个1,那么现在校验位上就得是1让整个传输内容中的1保持偶数个;如果传输内容已经有偶数个1的话,校验位就是0以保持偶数个1。选择奇校验则正好相反

格式

传输格式位:起始位+内容(二进制)+校验位+结束位

首先我们要知道每次会传输一个word,传输的内容除了word本身还包括起始位(start bit)校验位(parity bit)结束位(stop bit)

要注意传输的内容是从左往右从lsb开始到msb结束

例子

  1. 9600,8,N,1就代表9600波特率,内容位8 bit,没有校验位。那么实际传输长度就是:1(起始位)+8(内容)+1(结束位)=10 bit
  2. 28800,8,E,2就代表28800波特率,内容位8 bit,偶校验位。那么实际传输长度就是:1(起始位)+8(内容)+1(校验位)+1(结束位)=11 bit

多word传输

上面说到的都是单个word的传输,那么多个word的传输就有一点点不一样。那就是全部的传输中没有校验位,并且每个word只有一个结束位

位触发

实现我们上面说到的非同步通信的技术就是位触发

看下面的伪代码,可以知道

  1. 在setup()中Tx被定为Mark(1)即为高电平(空闲位);
  2. 方法里,先把Tx置为SPACE(0)即为起始位
  3. 然后一位一位的判断是1还是0,然后传输
  4. 传输完一位,就要暂停一个bit的时间

image

换成循环的版本

image

我们需要知道该如何去取出每一位来,这里我们使用位运算

image

posted @ 2022-11-04 17:39  想飞的猪头  阅读(424)  评论(0)    收藏  举报