4 UART串口(RS232)相关内容

4 UART串口(RS232)相关内容

1、首先交代:计算机中,硬件层面仅仅包括CPU和外设

只要一上电,CPU核一天到晚都在跟外设进行数据的交互。既然CPU核和外设要进行数据交互,明确常见几种数据通信方式:

GPIO通信方式(输入或者输出):例如:LED灯或者蜂鸣器或者按键等;

UART串口通信方式:例如:BT,GPRS,GPS等;

I2C总线通信方式:例如:LM77温度传感器,MMA8653三轴加速度传感器,电容触摸屏等;

SPI总线通信方式:例如:Norflash闪存,SD卡等;

1-Wire总线通信方式:例如:DS18B20温度传感器,,EEPROM存储器等;

          

2、然后谈谈UART串口定义

定义就九个字:通用串行异步收发器

接下来对定义进行详细阐述:

“通用”:UART串口应用非常广泛

“串行”:说明CPU和外设之间数据传输只需一根信号线即可,此信号线用于传输数据,又称数据线,如果CPU要给外设发送1,CPU只需将数据线拉高电平,如果CPU要给外设发送0,CPU只需将数据线拉低电平,CPU和外设数据传输是一位一位的进行。

切记:UART数据传输从低位开始!

例如:CPU通过UART串口给BT发送数据0x95(10010101),数据线的电平操作为:

10101001->数据线电平:高->低->高->低->高->低->低->高

具体参见uart1.bmp

"并行":CPU和外设之间数据通信采用多根数据线(8根/16根/32根)一次可以传输1字节/2字节/4字节

例如:内存,Nandflash,Norflash等都是采用并行传输。

串行和并行对比:

传输距离上:串行适合于远距离传输

抗干扰性上:串行优于并行

传输速度上:一般通常,并行快于串行                                                                                                              

"异步":

明确:计算机中,CPU核数据处理速度远远快于外设。

问:由于CPU的数据处理速度远远快于外设,例如当CPU核向外设发送数据时,如何保证外设能够及时正常的获取到数据呢?

答:此时此刻就需要考虑双方的数据同步问题。

“数据同步”:一方发送数据时,要务必保证接收方将数据及时正常接收到。

明确:计算机中,数据同步的方法有两种:异步和同步,而UART串口采用的异步

“异步”:CPU和外设在数据传输过程当中保证数据同步即可。

传输之前和传输之后无需考虑同步问题。到底异步如何实现数据传输正常呢?具体在传输协议中待会儿要谈谈UART串口传输协议(规范)

结论:一旦有异步,必须有协议

“同步”:CPU和外设之间不仅仅需要数据线(可以是一根或者多根),还需要一根时钟控制信号线,此时钟控制信号线用来实现双方的数据同步,具体参见uart2.bmp

例如:CPU向LM77发送1

CPU在CLK信号线为低电平的时候,将数据1放到数据线(其实就是将数据线拉高电平)外设LM77就在同周期的CLK为高电平的时候,从数据线上将1读走(其实就是LM77判断数据线的电平是高电平还是低电平)

总结:低放高取

                                                                         

“收发器”:发送数据和接收数据的硬件

例如:CPU向外设发送数据,CPU就是发送器,外设就是接收器

例如:外设向CPU发送数据,外设是发送器,CPU就是接收器

3、定义讲完,立马再次回到之前的问题

问:UART串口到底如何实现数据同步呢?前提是采用异步方式

答:答案在UART串口数据传输协议中

此时此刻大谈特谈UART数据传输协议,首先交代协议中相关概念:

空闲位:UART串口在不进行数据传输时,,数据线一直发送空闲位,空闲位的有效电平为高电平

起始位:如果CPU和外设要进行数据传输,首先发送起始位,表示双方开始发送传输数据了,有效电平为低电平,有效位数一位(一个bit位)

数据位:CPU和外设数据传输时,有效的数据位数(5/6/7/8)。一般选择8位,一次传输8个bit位,但是也是一个bit位一个bit位的传输,有效的高低电平根据数据来定                                                     

奇偶校验位:用来指示检查双方数据传输过程中是否出错

校验方式有三种:奇校验/偶校验/不校验

注意:双方的校验方式要保持一致!

    如果不采用校验,无需发送校验位!

有效位数为一个bit位

例如:以CPU向BT发送0x95数据为例,并且采用奇校验方式

CPU发送数据的过程:

1)CPU将数据0x95从低位开始一个bit位一个bit位发送到数据线上

2)CPU将数据发送完毕,CPU计算数据0x95(10010101)中"1"的个数。0x95中1的个数为4,4是一个偶数,而现在校验方式采用奇校验。所以只需让奇偶校验位的值为1,这样4+1=5,5是一个奇数,符合奇校验。

3)CPU算完以后,然后向数据线上发送奇偶校验位为1就是一个(高电平)

                                                

BT接收数据的过程:

1)BT首先从数据线上将数据0x95接收到

2)BT然后再从数据上将CPU发送的校验位的值接收到(为1)

3)BT计算数据0x95中的1的个数为4,并且接收到的校验位的值为1。所以4+1=5,5是一个奇数,并且BT同样采用奇校验方式,5符合要求,说明双方的数据传输正确。

                                                

停止位:CPU和外设停止数据交互,最后发送一个停止位即可。有效位数为1位或者2位,有效电平为高电平

              

波特率:用来指定CPU和外设数据传输的速率。常用的两个波特率:9600/115200。表示一秒钟双方数据传输9600个bit位或者115200个bit位。

例如:CPU向BT发送0x95数据为例,并且UART串口的工作参数:

115200(波特率),8(数据位为8位)o(采用奇校验)1(停止位为1位)

具体时序参见:uart3.bmp

              

如果将来UART数据传输异常,不确定,此时此刻只需利用示波器仪器抓去数据线上波形即可,然后认真分析波形。

        

4、UART串口三种工作模式

单工:数据传输永远只朝一个方向进行

半双工:数据传输可以双向,但是同一时刻只能朝一个方向

全双工:数据传输可以同时双向进行,此时数据线必须是两根。

一根数据线用来发送数据(TX)

一个数据线用来接收数据(RX)

当然除了数据线,还需一根地线

一般都是采用全双工,具体参见:uart4.bmp

                                                                                                                                        

5、实战演练UART串口

1)提出和分析用户需求

需求:下位机通过UART重复给上位机发送字符串数据

2)掌控下位机的UART串口硬件信息

粗看:看位置,UART0串口座

细看:先看原理图后看芯片手册,具体硬件具体分析。先看原理图,得到:

1.打开底板原理图,得到:上位机的RX引脚线->串口座PC_RXD1->SP3232芯片的T2OUT->SP3232芯片的T2IN->S5P6818的引脚UARTTXD0

同样UARTTXD0引脚也具有四种功能:

GPIOD18/UARTTXD0/ISO7816/SDWP2

结论:此时应该选择UARTTXD0(用于数据发送)

                          

上位机的TX引脚线->串口座PC_TXD1->SP3232芯片的R2IN->SP3232芯片的R2OUT

->S5P6818的引脚UARTRXD0

同样UARTRXD0引脚也具有四种功能:

GPIOD14/UARTRXD0/ISO7816

结论:此时应该选择UARTRXD0(用于数据接收)

此时此刻画出一个实际的UART硬件通信示意图,参见uart5.bmp

总结:SP3232E电平转换芯片:就是将TTL电平(CPU识别)转换成EIA电平,适合于远距离传输,抗干扰性强,当然另一端还需将EIA电平在转换成TTL电平。

此芯片完全跟硬件设计相关,软件无需关注,了解即可。

                 

3)看图得到重要的软件操作S5P6818的UARTTXD0和UARTRXD0的流程

说流程之前画出一个操作示意图,具体参见:uart6.bmp

1. CPU核软件上通过地址指针的形式访问UART控制器内部的一大堆寄存器,也就是CPU核给UART控制器发送控制命令

2.UART控制器接收到CPU发送的控制命令,UART控制器硬件上自动操作UARTTXD0和UARTRXD0

3.UARTRXD0和UARTTXD0电平来影响操作上位机PC

4.立马提出问题:UART控制器和内部的一大堆寄存器如何访问操作呢?

答:由于UART控制器集成在S5P6818内部,只需看S5P6818芯片手册中关于UART相关的章节即可。

                 

4)然后打开S5P6818芯片手册,认真,仔细,耐心阅读,得到:

1.打开S5P6818芯片手册P960

2.获取重要的硬件信息

S5P6818共支持6个UART,跟PC机连接的是UART0。每一个UART内部都集成了2个64字节的缓冲区,一个用于发送数据,一个用于接收数据

5)每一个UART控制器内部都集成了一个发送器。而发送器内部有集成了一个发送缓冲区和一个发送移位器。发送缓冲区是用于暂存要发送的数据。发送移位器是用于将发送缓冲区中的数据一位一位的发送到TX数据线上。发送移位器发送数据的频率由波特率产生器决定,例如波特率给发送移位器产生一个波特率为115200的频率,将来移位器根据此频率将数据一位一位的放到TX数据线上。波特率产生器的工作频率由时钟源来决定

问:发送数据的频率最终由时钟源决定,时钟源如何设置呢?

如果UART控制器工作在FIFO模式,发送缓冲区的大小为64字节

如果UART控制器工作在非FIFO模式,发送缓冲区的大小为1字节

  6)每一个UART控制器内部还集成了一个接收器

而接收器内部集成了一个接收缓冲区和一个接收移位器,接收移位器根据波特率产生器的频率从RX数据线上一位一位的接收数据,然后将接收到的数据放到接收缓冲区中,将来程序以指针的形式访问接收缓冲区,将接收到的数据获取到。

问:如何访问发送缓冲区?决定软件如何发送数据

如何访问接收缓冲区?决定软件如何获取数据

如何配置时钟源?决定波特率      

猜你喜欢

转载自blog.csdn.net/uperficialyu/article/details/79067895
今日推荐