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寄存器

UBRDIV寄存器的bit0-bit15保存的是串口时钟的分频系数整数部分;

7.6、UDIVSLOTn寄存器

UDIVSLOT寄存器的bit0-bit15保存的分频系数的小数部分,但不是直接将小数部分写入,而是要查表来确认写入的值。

7.7、UTXHn寄存器

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

7.8、URXHn寄存器

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

8.1、波特率计算

(1) 分频系数的计算公式:DIV_VAL = (PCLK / (bps x 16)) -1;
(2) 串口的时钟来源是PCLOCK_PSYS=66MHZ,如果要将波特率设置成115200,根据上面的公式可得,DIV_VAL=(66000000/(115200x16)-1)=34.8;
(3) 于是UBRDIVn的值是34,小数部分是0.8,要根据小数来计算UDIVSLOTn的值;

8.2、UDIVSLOTn值计算

(1)UDIVSLOTn中的值满足关系:UDIVSLOTn中1的个数除以16等于上面计算出的DIV_VAL的小数部分值。
(2)上面计算得小数部分是0.8,于是UDIVSLOTn中1的个数为0.8*16=12(向下取整),查表可知UDIVSLOTn应该填0XDDDD;
(3)按照上面的计算公式,只要知道UBRDIVn中有几个1,UBRDIVn的值在满足条件的情况下是任意的,但是实际却是固定的,需要查表来转换。这是因为这里计算分频系数不是纯数学计算,是要依赖具体的物理器件,物理器件有自己的物理特性,芯片开发工程师很了解,在表格里给了建议值,我们查表即可。

ARM芯片(S5PV210芯片)——串口通信详解相关推荐

  1. (四)裸机s5pv210之串口通信详解

    裸机s5pv210之串口通信详解 文章目录 裸机s5pv210之串口通信详解 前言 一.电子通信概念 1.同步通信和异步通信 2.电平信号和差分信号 3.并行接口和串行接口 二.串口通信的基本概念 1 ...

  2. S5PV210串口通信详解

    S5PV210串口通信详解 S5PV210概述: S5PV210有4路独立,异步,串行的输入输出IO口,UART支持的通信速率达到3Mbps. 一个周期数据的组成:1位起始位,8位有效数据位,1位奇偶 ...

  3. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  4. Java串口通信详解(转)

    Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言     说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够 ...

  5. MATLAB与51单片机进行串口通信详解

    目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...

  6. STM32串口通信详解以及通信异常或者卡死常见问题分析

    STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...

  7. RS232串口通信详解

    RS232串口通信详解http://www.21ic.com/jichuzhishi/datasheet/RS232/jiekou/184659.html 串口是计算机上一种非常通用的设备通信协议. ...

  8. STM32常用协议之串口通信详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.相关理论概念 1.1 通信基本概念 1.1.1 串行/并行 1.1.2 单工/半双工/全双工 1.1.3 同步/异 ...

  9. STM32串口通信详解(嵌入式学习)

    STM32串口通信 1.通信基础知识 1.1 时钟信号区分 同步通信 异步通信 波特率 总线协议(电气协议) 1.2 通信方式划分 串行通信 并行通信 1.3 通信方向划分 单工通信 半双工通信 全双 ...

最新文章

  1. 百度地图API使用之实现定位
  2. leetcode 18 -- 4Sum
  3. C++ std::condition_variable wait() wait_for() 区别
  4. Wannafly挑战赛19
  5. mockito接口_什么是Mockito Extra接口?
  6. [html] 如何优化页面的渲染过程?
  7. [Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]
  8. 计组之中央处理器:4、硬布线控制器的原理与设计
  9. 【华为云技术分享】气象模拟WRF容器化操作实践
  10. 无线网卡802.11n、 Intel 5100 AGN
  11. SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON
  12. 将Ruby和Watir与NUnit集成
  13. java程序员电脑内存配置_学习JAVA对电脑配置有要求吗
  14. 大数据 百亿级实时查询 ClickHouse SQL mysql canal kafka 数据实时同步
  15. SpringBoot YML 配置ListBean
  16. 爬虫学习---基础操作--抽屉新热榜自动点赞与豆瓣自动统一短评
  17. 【方向盘】2020年感悟关键词:科比、裁员、管理层、活着
  18. destoon ajax调用,destoon if else 的常见使用方法
  19. dice系数 交叉熵_ACL2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题
  20. 原生M1/M2 Photoshop 2022 for Mac(PS2022)v23.4.2 中英文正式发布详情介绍安装教程

热门文章

  1. Oracle 恢复dmp文件到数据库表中(超大DMP) 【数据系列 3】
  2. Jekins localhost:8080打不开
  3. 测试出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.suny.dao.Se
  4. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇上)...
  5. internal compiler error
  6. Ubuntu系统安装搜狗输入法
  7. DeepFM原理及tensorflow代码实战
  8. 解锁高性能计算与区块链应用,阿里云Kubernetes服务召唤神龙
  9. 企业如何制定高效可靠环保企业管理平台解决方案
  10. SkyForm CMP(云管理平台)v4.0