第六天:串口通信概念、原理

来源:互联网 发布:计算机病毒预防软件 编辑:程序博客网 时间:2024/06/10 02:16
    1. 串口通信的基本概念

     

    通信过程其实分为三个步骤:

    1. 发送方先按照信息编码方式编码,
    2. 通过传输介质传输
    3. 收到编码信息,根据事先的编码方式解码得到原信息

     

     

    电子通信概念1    同步通信异步通信

    1. 区别

    首先很多地方都会与同步和异步的概念,简单来说就是发送方和接收方按照同一个时钟节拍工作就叫同步,发送方和接受方没有统一的时钟节拍、而各自按照自己的节拍工作就叫异步。

    1. 同步通信中,通信双方按照统一节拍工作,所以配合很好;一般需要发送方同时发送信息和同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。同步通信在通信双方信息交换频率固定,或者经常通信时。
    2. 异步通信又叫异步通知。双方通信的频率不固定时(有时3ms收发一次,有时三天收发一次)不适合使用同步通信,而适合异步通信。异步通信时接受方不必一直在意发送方,发送方需要先发送信息时会首先给接收方一个信息开始的起始信号,接收方接受到起始信号后就认为后面紧跟着的就是有效信息,才会开始注意接受信息,直到收到发送方发过来的结束标志

     

     

    电子通信概念2   电平信号   差分信号

    1. 电平信号和差分信号是用来描述通信线路传输方式的。也就是说如何在通信线路上表达10.
    2. 电平信号的传输线中有一个参考电瓶线(一般是GND),然后信号线上的信号值是有信号线电平和参考线的电压差决定。
    3. 差分信号的传输线中没有参考电平,所有都是信号线。然后10的表达靠信号线之间的电压差。

    总结:电平信号线的2根通信线之间的电平差异容易受到干扰,传输容易失败;差分信号不容易受到干扰因此传输质量比较稳定,现代通信一般都是用差分信号,电平信号几乎没有了。

    总结2:看起来似乎相同的通信线下,看起来似乎电平信号要比差分信号要快,但是实际差分信号快,因为差分信号抗干扰能力强,因此1个发送周期更短

    电子通信概念3:  并行接口和串行接口

    1. 串行、并行主要是考虑通信线的根数,就是发送方和接受方同时可以传输的信息量的多少
    2. 譬如在电平信号下,1根参考电平线+1根信号线可以传递1位二进制;如果想要同时发送8位二进制就需要9根线。
    3. 在差分信号下,2根线(彼此差分)可以同时发送1位二进制;如果需要同时发送8位二进制,需要16根线

     

     

    总结:  经过多年的发展:   异步、串行、差分,譬如USB和网络通信。

     

     

     

    2.串口通信的基本概念

     

    1. 串口通信的特点:异步、电平信号、串联
      1. 异步:串口通信的发送方和接受方之间是没有统一的时钟信号的
      2. 电平信号:串口通信出现的时间较早,速率较低,传输的距离较近,所以干扰还不太明显,因此当时使用了电平信号传输。后期出现的传输协议都改成差分信号传输了。
      3. 串行通信:串口通信每次同时只能传输 1个二进制位
    1. RS232电平和TTL电平
      1. 电平信号时用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是1还是0
      2. 在电平信号时多少V代表1,多少V代表0不是固定的,取决于点阿平·电平标准。譬如RS232电平中   -3V~-15V表示1+3V~_15V表示0 TTL电平则是+5V表示1,0V表示0.
      3. 不管哪种电平都是为了在传输线上表示10,区别在于适用的环境和条件不同。RS232的电平定义比较大,适合干扰到、距离远的情况;TTL电平电压范围小,适合距离近且干扰小的情况。
      4. 我们开发板用的是RC232电平的。

     

    1. 波特率
      1. 波特率(bandrate,指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制。譬如每秒钟可以传输9600个二进制位,波特率就是9600.
      2. 串口通信的波特率不能随意设定,而应该在一些值中选择,一般常见的波特率是9600115200  (低端单片机如51常用9600,高端单片机和嵌入式SoC一般用115200),为什么波特率不可以随便指定:
        1. 通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方和接受方按照不同的波特率通信则根本收不到,因此比特率最好是大家熟知的而不是随意指定的
        2. 常用的波特率经过长久发展,就形成了共识,常用9600115200.
    1. 起始位、数据位、奇偶校验位。停止位
      1. 串口通信时,收发是一个周期一个周期进行的,每周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元是由起始位+数据位+奇偶校验位+停止位组成的
      2. 起始位表示发送方要开始发送一个通信单元;数据位是一个通信单元中发送的有效信息为;奇偶校验位是用来校验数据位,以防止数据位出错的;停止位是标志本次通信单元结束
      3. 起始位的定义是串口标准事先指定的,是有通信线上的死啊·电平变化来反映的
      4. 数据位是本次通信真正的要发送的有效数据,串口通信一次发送多少有效数据时可以设定的,一般为8位。因为我们一般通过发送的文字信息都是ASCII编码的,而ASCII码中一个字符刚好编码为8
      5. 奇偶校验位是用来给数据位进行奇偶校验。把待校验的有效数据逐个位的加起来,综合为奇数奇偶校验为1,反之为0.可以一定程度上防止位反转。

     

    总结:串口通信时是异步通信,所以通信双方必须事先约定好串口参数: 波特率、数据位、奇偶校验、停止位(串口通信的起始位是固定的)

     

    1. 串口通信的原理
      1. 三根通信线:Rx    Tx    GND
        1. 任何通信都要有信息传输载体
        2. 串口通信是有线通信,是通过串口线来通信的。
        3. 串口通信线最少需要2根(GND信号线),可以实现单工通信
          1. 单工就是单方向,双工就是双方同时收发,同时只能单方向但是方向可以改变叫半双工

    可以使用3根通信线(RxTxGND)来实现全双工

    1. 一般开发板都会引出SoC上串口音及哦啊直接输出的TTL电平的串口(X210开发板没有),插座用插针式插座,每个串口引出3根线。
    1. 收发双方事先规定好通信参数
      1. 串口通信属于基层基本性的通信规约,他自己本身不会去协商通信参数,需要通信前书暗访书暗访双方事先约定好通信参数(一般4个最重要)
      2. 串口通信的关键参数设置不能设置错误。

    信息以二进制流的方式在信道上传输

    (1)、串口通信的发送方每隔一定时间(时间固定为1/波特率,单位是秒)将有效信息(1或者0)放到通信线上去,逐个二进制位的进行发送。

    (2)接收方通过定时(起始时间由读到起始位标志开始,间隔时间由波特率决定)读取通信线上的电平高低来区分发送给我的是1还是0。依次读取数据位、奇偶校验位、停止位,停止位就表示这一个通信单元(帧)结束,然后中间是不定长短的非通信时间(发送方有可能紧接着就发送第二帧,也可能半天都不发第二帧,这就叫异步通信),下来就是第二帧·····

    总结:第一,波特率非常重要,波特率错了整个通信就乱套了;数据位、奇偶校验位、停止位也很重要,否则可能认不清数据。第三,通过串口不管发数字、还是文本还是命令还是什么,都要先对发送内容进行编码,编码成二进制再进行逐个位的发送。

    (3)串口发送的一般都是字符,一般都是ASCII码编码后的字符,所以一般设置数据位都是8,方便刚好一帧发送1个字符。

     

    回顾:RS232电平和TTL电平的区别?串行通信为什么是异步的?为什么是串行而不是并行?

     

    DB9接口介绍

    (1)DB9接口是串口通信早期比较常用的一种规范化接口。

    (2)串行通信在早期是计算机与外界通信的主要手段,那时候的计算机都有标准配置的串口以实现和外部通信。那时候就定义了一套标准的串口规约,DB9接口就是标准接口。

    (3)DB9接口中有9根通信线,其中3根很重要,为GND、Tx、Rx,必不可少;剩余6根都是和流控有关的,现代我们使用串口都是用来做调试一般都禁用流控,所以这6根没用。

    (4)现在一般使用串口时要记得把流控禁止掉,不然可能发生意想不到的问题。

     

     

     

     

    1. S5PV210串口通信接口详解

     

    1. S5PV210的串口控制器工作原理图
      1. 整个串口控制器包含transmitterreciever两部分,两部分功能彼此独立,transmitter负责210向外部发送信息,receiver负责从外部接受信息到210内部。

     

    1. 总线角度来讲,串口控制器是接在APB总线上的。对我们编程有影响的是:将来计算串口控制器的源时钟时是以APB总线来计算的。
    2. receiver由接收缓冲区和接收移位器构成。当有人通过串口线向我发送信息时,信息通过Rx通信线进入我的接收移位器,然后接收移位器自动移位将该二进制位保存入我的接收缓冲区,接收完一帧数据后receiver会产生一个中断给CPU,CPU收到中断后即可知道receiver接收满了一帧数据,就会来读取这帧数据。

    总结:发送缓冲区和接收缓冲区是关键。发送移位器和接收移位器的工作都是自动的,不用编程控制的,所以我们写串口的代码就是:首先初始化(初始化的实质是读写寄存器)好串口控制器(包括发送控制器和接收控制器),然后要发送信息时直接写入发送缓冲区,要接收信息时直接去接收缓冲区读取即可。可见,串口底层的工作(譬如怎么移位的、譬如起始位怎么定义的、譬如TTL电平还是RS232电平等)对程序员是隐藏的,程序员不用去管。软件工程师对串口操作的接口就是发送/接收缓冲区(实质就是寄存器,操作方式就是读写内存)

    1. 串口控制器中有一个波特率发生器,作用是产生串口发送/接收的节拍时钟。波特率发生器其实就是个时钟分频器,它的工作需要源时钟(APB总线来),然后内部将源时钟进行分频(软件设置寄存器来配置)得到目标时钟,然后再用这个目标时钟产生波特率(硬件自动的)。

     

     

     

     

     

     

     

     

     

     

     

     

     

0 0
原创粉丝点击