嵌入式软件开发_UART通信协议

UART通信协议

1.什么是串行通信?

      将数据字节分成一位一位的形式在一条传输线上逐位地发送出去。

 

       优点:成本低,控制复杂。

2. 什么是异步通信?

        异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两个关键:

        第一,数据单元——帧,它是双方约定好的数据格式;

        第二,波特率,它决定了‘帧’里每一位的时间长度。

       异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。

3. UART概述

       通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。UART作为一种低速通信协议,广泛用于通信领域等各种场合。

       UART通信原理:将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。

  UART硬件连接示意图

       硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

       TX:发送数据端,要接对面设备的RX;

       RX:接收数据端,要接对面设备的TX;

       GND:保证两设备共地,有统一的参考平面;

  UART协议格式,具体如下:

       

   空闲位:

    UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平。

  起始位:

    先发出一个逻辑”0”的信号,表示传输字符的开始。

  数据位:

    起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。

  奇偶校验位:

    数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:

    1.无校验(no parity);

    2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’;

    3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’;

    4.mark parity:校验位始终为1;

    5.space parity:校验位始终为0;

  停止位:

    数据结束标志,可以是1位,1.5位,2位的高电平。

  波特率:

    数据传输速率使用波特率来表示,单位bps(bits per second),常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。

  UART通信速率:

       数据传输可以首先从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。微控制器中的UART传送数据的 速度范围为每秒几百位到1.5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高达1.152Mbps。UART波特率还受发送和接收线对距离(线长度)的影响。

4. UART的通信过程

  UART数据发送过程:首先将要发送的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。

       UART数据接收过程:UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。

LPC2214 UART0寄存器示意图

  【U0THR发送保持寄存器,U0TSR UART0 Tx移位寄存器】

  UART0 发送器模块U0Tx接收CPU或者主机写入的数据,并将数据缓存到UART0 Tx保持寄存器FIFO(U0THR)。U0THR是UART0 Tx FIFO的最高字节,它包含了FIFO中最新的字符,可通过总写接口写入。【U0THR-0XE000C000 DLAB 只写】U0TSR 移位寄存器(UART0 Tx移位寄存器)读取U0THR中的数据,将数据通过串行输出管脚TxD0发送。

  【U0RBR接收器缓存寄存器,U0RSR UART0 Rx移位寄存器】

  U0RBR是UART0 Rx FIFO的最高字节,它包含了最早接收的字符,可通过总线接口读出。【U0RBR接收器缓存寄存器U0RBR-0xE000C000 DLAB 只读】UART0 Rx移位寄存器(U0RSR)通过RxD0接收有效的字符。当U0RSR接收到一个有效字符时,它将该字符传送到UART0 Rx缓冲寄存器FIFO中,等待CPU或主机通过主机接口进行访问。

5. UART 设计思想

  数据发送的思想是,当启动字节发送时,通过TxD先发起始位,然后发数据位和奇偶数效验位,最后再发停止位,发送过程由发送状态机控制,每次中断只发送1个位,经过若干个定时中断完成1个字节帧的发送。

  数据接收的思想是,当不在字节帧接收过程时,每次定时中断以3倍的波特率监视RxD的状态,当其连续3次采样电平依 次为1、0、0时,就认为检测到了起始位,则开始启动一次字节帧接收,字节帧接收过程由接收状态机控制,每次中断只接收1个位,经过若干个定时中断完成1 个字节帧的接收。

  为了提高串口的性能,在发送和接收上都实现了FIFO功能,提高通信的实时性。FIFO的长度可以进行自由定义,适应用户的不同需要。波特率的计算按照计算公式进行,在设置最高波特率时一定要考虑模拟串口程序代码的执行时间,该定时时

间必须大于模拟串口的程序的规定时间。单片机的执行速度越快,则可以实现更高的串口通讯速度。

posted @ 2020-09-04 15:01  陈木  阅读(776)  评论(0)    收藏  举报