IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM芯片(S5PV210芯片)——串口通信详解 -> 正文阅读

[嵌入式]ARM芯片(S5PV210芯片)——串口通信详解

1、电子通信的基本概念

1.1、同步通信和异步通信

1.同步通信:通信双方有统一的工作节拍,一般需要发送方给接收方发送信息的同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的工作节奏。同步通信用在通信双方信息交换频率固定,或者通信频率比较高的场景。
2.异步通信:又叫异步通知,简单来说就是发送方不必考虑接收方,想发信息就发信息,没有固定的工作节拍。但是需要遵循一定的通信协议,比如发送方发送信息时,需要先发起始位通知接收方,然后发送数据,数据发送完成要发结束位表示一帧数据发送完成。
区别
(1)同步通信有统一工作节拍,异步通信没有统一工作节拍。一般来说,同步通信的连接线里有一根是时钟信号线。
(2)同步通信适合通信频率固定或者通信频率较高的场景;异步通信适合通信频率不固定或者通信频率较低的场景。

1.2、电平信号和差分信号

1.电平信号:电平信号有一根是参考电平线,信号线的信号值有信号线和参考电平线之间的电压差决定;
2.差分信号:差分信号没有参考电平线,传输一路数据需要两根信号线,信号线的信号值由两根信号线的电压差决定。
区别
(1)信号值的表示不同:电平信号的信号值是信号线和参考电平线的电压差决定;差分信号的信息值是由两条信号线的电压差决定;
(2)传输相同路数的信号,电平信号用的数据线根数比差分信号少。比如传输3路信号,电平信号需要1根参考电平+3根数据线;而差分信号需要2x3=6根数据线;
(3)现在通信大部分是差分信号,因为差分信号的抗干扰性更强,可以在更短的周期传输一个数据。

1.3、并行接口和串行接口

并行接口:一次可以发送过个bit位数据。
串行接口:一次只能发送一个bit位数据。
区别:
(1)并行接口和串行接口一次发送的bit位不相同,串行一次只能发一个bit数据,并行接口可以一次发多位bit数据;
(2)并行接口的抗干扰性比串行接口差,虽然并行接口一次发送的数据位比串行接口多,但是因为抗干扰性差的原因,并行接口的发送频率不能很高,串行接口的通信速率是可能比并行接口更快的;
(3)串行接口比并行接口更省信号线;

1.4、单工通信、双工通信、半双共通信

单工通信:只能单向发送消息,只能A向B发消息,B不能向A发消息;
双工通信:A和B可以互相发消息,并且互不排斥,可以同时给对方发消息;
半双工通信:A和B可以互相发消息,但是同一时间只能一方发消息,另一方收消息,算是单工通信和双工通信的结合体;

2、串口通信介绍

2.1、串口通信的特点

串口通信:异步、电平信号、串行、双工。
异步:串口的接收方和发送方没有统一的时钟信号;
电平信号:串口通信出现比较早,传输的距离比较近,所有用的电平信号。后期出现的通信协议,都改成了差分信号;
串行:每次只能传输一个二进制位;
双工:通信双方可以同时接收和发送信号。

2.2、波特率

指的就是串口的通信速率,也就是串口每秒能传输多少个二进制位。比如常用的波特率115200,也就是指串口每秒发送115200个二进制位。接收和发送必须使用相同的波特率,不然会通信紊乱,导致不能正常收发数据。

2.3、起始位、数据位、奇偶校验位、停止位

(1)起始位:接收方收到该数据位就表示发送方马上要发送数据了;
(2)数据位:本次传输周期里要传输的有效数据,可配置;
(3)奇偶校验位:防止数据出错的,可配置;
(4)停止位:表示本次传输周期结束,可配置;
总结:串口通信时,是以周期为单位进行收发数据的,既然是周期性的收发数据,那就要规定好周期的开启和结束,也就是要提前商量好通信协议,上面的位定义就是通信
协议,在建立串口通信时要收发双方配置一致;

2.4、通信线:Rx、Tx、GND

(1)Rx、Tx、GND是串口的通信线,Rx是接收数据的信号线,Tx是发送数据的信号线,GND是参考电平线,串口是全双工通信;
(2)通信线的解法:发送方Rx–接收方Tx、发送方Tx–接收方Rx、发送方GND–接收方GND。

2.5、DB9接口、USB转串口、4脚接口

(1)DB9接口:串口通信早期比较常用的规范化接口,有9根线,其中就包括Rx、Tx、GND,其余的6根线和流控有关。现在的串口通信一般都没有
用流控,所以这6根线基本没用,现在笔记本电脑上已经没有DB9接口;
(2)4脚接口:现在的嵌入式设备上大多也没有DB9接口,但是会引出来一个4脚的串口来输出信息,方便调试。4脚串口就是在原来Rx、Tx、GND的基础上,多了一根电源正极线。4脚的串口通常会会通过一个电路板来转成DB9接口来对外通信;
(3)USB转串口:现在的电脑可能没有DB9接口,所以要使用USB转串口线来连接开发板;

2.6、自动流控(AFC:Auto flow control)

自动流控和串口安全通信有关的,因为串口在早期是作为设备间数据交互的通路,必须确保通信数据的正确性。但是在现在串口大多作为打印信息输出,并且通信速度也不快,就取消了自动流控。自动流控的细节就不讲了,反正现在也用不上,在建立串口通信时记得把自动流控取消掉,就是不要勾选RTS/CTS。

3、串口工作原理框图

在这里插入图片描述

(1)时钟总线:串口属于低速外设,挂载在PCLK_PSYS(Peripheral BUS)时钟线上;
(2)组成:控制单元(control unit)、波特率发生器(Buad-rate Generator)、发送缓冲寄存器(Transmit Buffer Register)、发送移位器(Transmit Shifter)、
接收缓冲寄存器(Receive Buffer Register)、接收移位器(Receive Register);
(3)控制单元:控制整个串口的通信过程,什么时候发数据,什么时候收数据;
(4)波特率发生器:产生串口通信需要的波特率,和时钟频率有关,需要配置;
(5)发送缓冲寄存器:把要发送的数据写到发送缓冲寄存器;
(6)发送移位器:把发送缓冲寄存器里的数据一位一位的发送到数据线上,这是硬件自动的;
(7)接收缓冲寄存器:保存接收到的数据;
(8)接收移位器:把数据线上接收到的数据一位一位的写到接收缓冲寄存器里;

4、串行通信模式

4.1、FIFO模式

普通模式下串口只有一个发送缓冲寄存器和一个接收缓冲寄存器,CPU要不断切换上下文去处理串口通信,这会导致效率低下,浪费CPU的性能。FIFO模式就是扩大缓冲寄存器的数量,从一个寄存器扩大到64个寄存器。这样以前要一个字节处理一次串口通信变成64个字节才处理一次串口通信,
降低了CPU处理串口通信的频率。这只是在一定程度上解决,当有大量数据要发送时FIFO模式还是不能满足需求,于是就有了DMA模式。(每个串口的FIFO模式扩充的缓冲寄存器数量可能是不同的,有256、64、16,具体看数据手册说明)
补充:
(1)FIFO(First In First Out)其实是一种数据结构的名字,数据按照先进先出的原则进行处理。叫FIFO模式是因为扩大的缓冲区类似FIFO这种数据结构,也是先进先出;
(2)FIFO模式在策略上就不能解决大量数据通信,因为不能无限的扩大缓冲寄存器的数量,在CPU中寄存器是有限且珍贵的;

4.2、DMA模式

DMA(direct memory access)模式是为了解决串口大量数据传输的,DMA模式下缓冲区不再是寄存器,而是划定一块内存用作缓冲区,这样CPU就不用再频繁去处理串口通信。

4.3、IrDA模式

(1)IrDA(Infrared)就是红外线通信,电视机、空调的遥控器就是红外线通信。红外通信是发送方固定间隔向接收方发送红外信号,这和串口通信是类似的,所以可以用串口通信来实现红外通信;
(2)不是每个串口都支持IrDA模式,具体要查数据手册;并且需要外部硬件支持,至少你得有一个红外线的发送、模块吧。

5、串行通信工作模式:轮询模式、中断模式

(1)轮询方式::CPU不断去查询串口控制器的状态位,当缓冲区空/满时就去填充/获取数据。这样比较耗费CPU性能,但是程序简单。
(2)中断模式:当缓冲区空/满时串口控制器会发出中断信号,通知CPU去处理串口缓冲区的数据。这样会降低CPU处理串口的频率,但是需要用到终端,程序要复杂些。
总结:两种方式各有优劣,串口通信是异步的,更契合中断模式,但是轮询方式胜在简单。在uboot阶段的串口通信时,我所接触到的就是使用的轮询模式,因为当uboot
进入到shell界面时,uboot就等着接受指令,CPU也不着急做其他的事情,浪费CPU性能也无所谓。

6、串行控制器的时钟框图

在这里插入图片描述

右边虚线框里是UART的时钟框图,主要包括Clock_Selection、UCLK_Generator、Clock_Selection:可以通过UCON寄存器的10bit位选择时钟来源;UCLK_Generator:对上一步的时钟源进行分频,产生合适的波特率;分频系数需要根据时钟频率和波特率进行计算,将计算好的分频系数填到UBDIV和UDIVSLOT寄存器中。

7、串行通信的配置寄存器

7.1、ULCONn

在这里插入图片描述

配置校验位、数据位、停止位、决定是否用IrDA模式。

7.2、UCONn寄存器

选择是轮询模式还是中断模式、选择时钟来源

7.3、UMCONn寄存器

禁止modem、afc

7.4、UFCONn寄存器

FIFO模式的相关配置

7.5、UBRDIVn和UDIVSLOTn寄存器

和波特率有关,要根据公式去算的,具体的计算公式查阅数据手册;

7.6、UTXHn寄存器

将要发送的数据写到该寄存器;

7.7、URXHn寄存器

接收到的数据会保存到该寄存器;

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:44:59  更:2022-03-15 22:45:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:51:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码