UART的原理以及驱动程序如何编写?

一口Linux
关注

ARM系列文章合集如下:

《从0学arm合集》

0. 前言

Uart在一个嵌入式系统中是一个非常重要的模块,他承担了CPU与用户交互的桥梁。用户输入信息给程序、CPU要打印一些信息给终端都要依赖UART。

本文将以Exynos4412的UART控制器为基础,讲解UART的原理以及驱动程序如何编写。

1. UART是什么

UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。UART总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。

通常需要加入一个合适的电平转换器,如SP3232E、SP3485,UART还能用于RS-232、RS-485 通信,或与计算机的端口连接。UART 应用非常广泛,手机、工业控制、PC 等应用中都要用到UART。

2. UART通信方式

UART使用的是 异步,串行通信方式。

串行通信

串行通信是指利用一条传输线将资料一位位地顺序传送。好比是一列纵队,每个数据元素依次纵向排列。如下图所示,传输时一个比特一个比特的串行传输,每个时钟周期传输一个比特,这种传输方式相对比较简单,速度较慢,但是使用总线数较少,通常一根接收线,一根发送线即可实现串行通信。

它的缺点是要增加额外的数据来控制一个数据帧的开始和结束。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。

并行通信

并行通信好比一排横队,齐头并进同时传输。这种通信方式每个时钟周期传输的数据量和其总线宽度成正比,但是实现较为复杂。

异步通信

异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。

在异步通信技术中,数据发送方和数据接收方没有同步时钟,只有数据信号线,只不过发送端和接收端会按照协商好的协议(固定频率)来进行数据采样。数据发送方以每秒钟57600bits的速度发送数据,接收方也以57600bits的速度去接收数据,这样就可以保证数据的有效和正确。通常异步通信中使用波特率(Baud-Rate)来规定双方传输速度,其单位为bps(bits per second每秒传输位数)。

同步通信

在发送数据信号的时候,会同时送出一根同步时钟信号, 用来同步发送方和接收方的数据采样频率。如下图所示,同步通信时,信号线1是一根同步时钟信号线,以固定的频率进行电平的切换,其频率周期为t,在每个电平的上升沿之后进行对同步送出的数据信号线2进行采样(高电平代表1,低电平代表0),根据采样数据电平高低取得输出数据信息。如果双方没有同步时钟的话,那么接收方就不知道采样周期,也就不能正常的取得数据信息。

3. 帧格式

数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。数据通信格式如下图:

其中各位的意义如下:

起始位:先发出一个逻辑”0”信号,表示传输字符的开始。数据位:可以是5~8位逻辑”0”或”1”。如ASCII码(7位),扩展BCD码(8位)。小端传输 校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验) 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。

下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)

关于RS-232、RS-422、RS-485等标准,大家可以参考文章《一篇文章了解什么是串口,UART、RS-232、RS-422、RS-485 》

4. Exynos4412  Uart

本文讨论UART 是基于Cortex-A9架构的Exynos4412 为例。

1)特性Exynos4412 中UART,有4 个独立的通道,每个通道都可以工作于中断模式或DMA 模式,即UART 可以发出中断或 DMA 请求以便在UART 、CPU 间传输数据。使用系统时钟时,Exynos4412 的 UART 波特率可以达到 4Mbps 。每个UART通道包含两个FIFO用来接收和发送:通道 0有 256 字节的发送 FIFO 和 256 字节的接收FIFO通道 1、4有 64 字节的发送 FIFO 和 64 字节的接收FIFO通道 2、3有 16 字节的发送FIFO 和 16 字节 的接收 FIFO 。UART include:波特率可以通过编程进行 。红外接收/发送每个通道支持停止位有 1位、 2位数据位有 5、6、7或 8位每个UART还包括波特率发生器、发送器、接收器、控制逻辑组成。

2)Uart控制器功能模块

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存