问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

硬件通信入门:同步与异步、半双工传输、UART硬件详解及bps速率计算

创作时间:
作者:
@小白创作中心

硬件通信入门:同步与异步、半双工传输、UART硬件详解及bps速率计算

引用
CSDN
1.
https://m.blog.csdn.net/Super_Fisher_man/article/details/141790417

本文是一篇关于硬件通信基础知识的入门教程,主要介绍了同步与异步通信、半双工传输、UART串口通信以及bps速率计算等内容。文章结构清晰,内容详实,包含了多个概念的解释、具体例子和电路原理图,适合硬件开发初学者阅读。

一、同步与异步

1.1. 概念

同步(synchronous) 异步(asynchronous)
栗子 朋友打电话说到我家吃饭,我在家里等他们 朋友没有提前打招呼,突然就到我家来了
信号线 时钟信号、数据信号 数据信号
读取信号方式 通过时钟信号的上升沿/下降沿来读取数据信号 通过模块的数据格式判断起始位、数据位(0/1)、结束位

1.2 同步信号

在电子产品中,使用同步信号进行传输时,一般涉及两个信号:

  • 时钟信号(CLK):用来通知对方要读取数据了
  • 可以在时钟的下降沿、或者上升沿来读取数据线信号 (打电话,起约定作用);
  • 可以通过调节波特率(bps)来控制读取数据线信号的速率;
  • 数据信号(DATA):用来传输数据

1.3 异步信号

使用异步信号传输数据时,A、B 双方遵守相同的约定(数据格式):

  • 起始信号:发送方可以通知接收方"注意了,我要开始传输数据了"
  • 数据信号:如何表示0/1? 在约好的时间段内判断电平状态
  • 结束信号:发送方可以通知接收方"注意了,我要传输的数据 传完了"

1.4 举个例子:红外遥控器解码器(异步)

A发送 ==> B接收,B会检测到信号到达的数据格式,来判断该信号是 起始信号、数据信号还是结束信号。每个模块的数据格式各有不同,可在手册上查找。

红外遥控器解码器 向单片机发出的数据格式如下:

  • 起始信号:解码器发出一个9ms的低电平、4.5ms的高电平,用来同时对方说"开始了"
  • 数据信号
  • 逻辑1:0.56ms的低电平+1.69ms的高电平
  • 逻辑0:0.56ms的低电平+0.56ms的高电平
  • 接收方、发送方都遵守这样的约定,就可以使用一条线传输数据

1.5. 同步与异步的差别

同步传输 异步传输
信号线 多:时钟信号、数据信号 少:只需要数据信号
速率 可变,提高时钟信号频率即可(bps) 双方提前约定
抗干扰能力 强 弱(不一定)

2、使用一线传输双向数据(半双工)

2.1. 面临的问题

两个设备之间,只使用一条数据线,能否传输双向的数据?

  • A发出高电平,B发出低电平
  • 电路可能被损坏
  • 电路上到底是高电平还是低电平?不能确定
  • 问题在于:有两个设备试图同时驱动电路

2.2. 解决方法

限制-同时驱动 允许-同时驱动
双方无法约定时间,此方法不可行 电路如下

  • DATA:集电极、OPEN电路、也叫开极电路(open collector)
    沿箭头方向 电势 U发送-U地 > 截至电压,三极管导通,电子由地==>A,聚集后扩散到集电极。
    真值表如下:
    A B DATA
    0 0 1(由上拉电阻决定)
    0 1 0
    1 0 0
    1 1 0

从真值表和电路图我们可以知道:

  • A或B任意一个或均为高电平时,便可使对应三极管导通,DATA <== 0
  • 想让DATA输出高电平,双方都不驱动三极管 (SDA通过上拉电阻变为高电平)
  • 想让DATA输出低电平,就驱动三极管
    这种电路实现了:
  • 双方设备即使同时想输出不同的电平:
  • 电路也不会被损坏
  • 电平也是确定的;

2.3. 双向传输示例

  • 初始状态:一开始,双方都不驱动三极管,DATA为高
  • 起始信号和回应:A想传输数据给B,发出开始信号、得到回应信号
  • A检测DATA线,高表示对方没有占用数据线
  • A驱动三极管,使得DATA为低,用来通知B:”我就要传输数据了“
  • A释放三极管,DATA变为高
  • B驱动三极管,使得DATA为低,用来通知A:好的,我准备好了(这是一个回应信号)
  • B释放三极管,DATA变为高
  • 传输:A发送数据给B,比如传输2位数据0、1
  • 双方都使用同一套数据表示方法,比如:数值由DATA电平决定(持续60us 有效)
  • 在第1个60us,A设置DATA为低;在同一时间,B读取DATA电平得到数据0
  • 在第2个60us,A设置DATA为高;在同一时间,B读取DATA电平得到数据1
  • 结束:A释放三极管,DATA变为高电平
  • 这时候,B也可以使用一样的方法给A传输数据

3、UART硬件介绍

3.1. 串口的硬件介绍

UART的全称是Universal Asynchronous Receiver and Transmitter,即通用的异步发送和接收

串口在嵌入式中用途非常的广泛,主要的用途有:

  • 打印调试信息;
  • 外接各种模块:GPS、蓝牙;
    串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。

  • 通过TxD->RxD把ARM开发板要发送的信息发送给PC机。
  • 通过RxD->TxD线把PC机要发送的信息发送给ARM开发板。
  • 最下面的地线统一参考地。

3.2. 串口的参数

  • 波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。
  • 起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。
  • 数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输。
  • 校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。(可靠性)
  • 停止位:它是一个字符数据的结束标志。

3.3 怎么发送一字节数据,比如‘A‘?

‘A’的ASCII值是0x41,二进制就是01000001,怎样把这8位数据发送给PC机呢?

  • 双方约定好波特率(每一位占据的时间);
  • 规定传输协议
  • 原来是高电平,ARM拉低电平,保持1bit时间;
  • PC在低电平开始处计时;
  • ARM根据数据依次驱动TxD的电平,同时PC依次读取RxD引脚电平,获得数据;
  • PC在数据位的中间读取引脚状态;

3.4 逻辑电平

  • 代表信号1的引脚电平是人为规定的。
  • 如图是TTL/CMOS逻辑电平下,传输‘A’时的波形:
  • 在xV至5V之间,就认为是逻辑1,在0V至yV之间就为逻辑0。
  • 如图是RS-232逻辑电平下,传输‘A’时的波形:
  • 在-12V至-3V之间,就认为是逻辑1,在+3V至+12V之间就为逻辑0。
  • RS-232的电平比TTL/CMOS高,能传输更远的距离,在工业上用得比较多。
    市面上大多数ARM芯片都不止一个串口,一般使用串口0来调试,其它串口来外接模块。

3.5. 串口电平

  • ARM芯片上得串口都是TTL电平的,通过板子上或者外接的电平转换芯片,转成RS232接口,连接到电脑的RS232串口上,实现两者的数据传输。
  • 如图
  • 现在的电脑越来越少有RS232串口的接口,当USB是几乎都有的。因此使用USB串口芯片将ARM芯片上的TTL电平转换成USB串口协议,即可通过USB与电脑数据传输。

上面的两种方式,对ARM芯片的编程操作都是一样的。

对于arm开发板,串口0一般用来调试打印,其他串口可以外接各种模块

3.6. 串口内部结构

ARM芯片是如何发送/接收数据?

如图所示串口结构图:

  • UART串口线上,是逐位发送,串行通信,肯定有一个移位器(Transmit Shifter);
  • 移位器的数据,从发送缓冲寄存器(FIFO)中来;FIFO里的数据,从内存里面来;
  • arm ==> PC(发送)
  • 程序将数据从arm 内存中写入到FIFO,然后UART单元再从FIFO里面把数据放到移位器里面,逐位的发送出去(==> PC),在发送完成后产生中断提醒CPU传输完成。
  • PC ==> arm(接收)
  • 获取接收引脚的电平,逐位放进接收移位器,放入FIFO,程序把数据从FIFO中 写入arm内存;完成后产生中断提醒CPU传输完成;

4、Bps速率计算

  • 若Band rate:115200
  • 115200,8n1(Data、校验位、停止)
  • 每一位的时间:1/115200 s
  • 传输一Byte:需要10位(Start、Data、Stop) t = 10/115200 s
  • 一秒能传输11520Byte
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号