最近学习了UART与USART,在此记录。
UART
概述
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种通信协议和硬件接口,用于在计算机系统和外部设备之间进行异步数据传输。它是一种简单且常见的串行通信方式,广泛应用于嵌入式系统、单片机和通信设备中。它在全双工模式下工作。
工作原理
UART通过发送和接收数据位来实现实时通信。它使用起始位和停止位来识别每个数据字节的开始与结束,以实现数据的异步传输。
UART主要有三根数据线:
- TXD(Transmit Data):发送线,用于发送端发送数据。
- RXD(Receive Data):接收线,用于接收来自外部设备的数据。
- GND(Ground):公共地。
数据格式
UART在数据传输时使用一定的数据格式。典型的数据格式包括数据位、校验位、起始位与停止位。
-
起始位:当要发送数据时,发送方先发送一个低电平(逻辑“0”)信号,表示传输字符的开始。
-
数据位:在每个数据字节中用于传输实际数据的位数。
通常,数据位的数量可以是5、6、7或8位。选择使用的数据位数取决于具体的通信需求和应用要求。
在通信双方之间进行串行数据传输时,发送端和接收端必须使用相同的数据位数设置,以确保数据的正确性和一致性。
-
校验位:用于检测数据传输中是否出现错误。
校验位的四种类型:奇校验、偶校验、固定校验或无校验。
1.无校验(None,N):不加校验位,可以少传输一位数据。
2.奇校验(Odd,O):传输的数据中(不包含校验位)有奇数个逻辑“1”,那么校验位为0,反之则为1。
3.偶校验(Even,E):传输的数据中(不包含校验位)有偶数个逻辑“1”,那么校验位为0,反之则为1。
4.固定校验:校验位的值被固定为特定的0或1。
- 固定奇校验:校验位被设置为使整个数据包中逻辑“1”位数(包括数据位和校验位)为奇数。在这种校验中,如果数据位中的逻辑“1”的个数为偶数,则该校验位被置为1,以使总的逻辑“1”位数变为奇数。
- 固定偶校验:校验位被设置为使整个数据包中逻辑“1”位数(包括数据位和校验位)为偶数。在这种校验中,如果数据位中的逻辑“1”的个数为奇数,则该校验位被置为1,以使总的逻辑“1”位数变为偶数。
-
停止位:一个字符数据的结束标志。(通常为1或2位)
-
空闲位:数据线在未发送数据时,处于空闲状态,此时数据线上为高电平(逻辑“1”)信号。
-
LSB(Least Significant Bit,最低有效位):二进制中代表最低值的比特位。
-
MSB(Most Significant Bit,最高有效位):二进制中代表最高值的比特位,这一位对数值的影响最大。
UART的数据帧LSB在起始位后,代表着UART发送数据时先发送数据的最低位。
波特率
UART通过设置波特率来控制数据传输的速率。波特率表示每秒钟传输的位数。
发送端与接收端必须使用相同的波特率设置。
发送数据
在发送数据时,UART将数据字节从计算机系统发送到外部设备。
发送过程包括按照数据格式发送起始位、数据位、校验位和停止位。发送端按照设定的波特率逐位发送数据,并在每个数据字节之间插入适当的起始位和停止位。
接收数据
在接收数据时,UART从外部设备接收数据字节并传输到计算机系统。
接收过程包括按照数据格式接收起始位、数据位、校验位和停止位。接收端按照设定的波特率逐位接收数据,并根据起始位与停止位提取有效数据位和校验位。
错误校正
UART还提供了错误检测和纠错机制,可以检测和纠正数据传输中的错误,确保可靠的数据传输。其中最常用的机制是使用校验位进行错误校正。
UART进行错误校正的步骤:
- 发送端生成校验位:在发送数据时,发送端根据预设的校验位类型(如奇校验、偶校验、固定校验或无校验)计算出校验位的值。
- 发送端发送包含校验位的数据包:发送端将数据位与校验位一起发送。校验位在数据位之后,在停止位与起始位之前。
- 接收端接收数据包:接收端接收到发送端发送的数据包。
- 接收端计算接收数据的校验位:接收端接收到数据后使用与发送端相同的校验规则计算接收到的数据的校验位。
- 比较校验位:接收端将计算到的校验位与接收到的校验位进行比较。
- 错误校正:如果计算得到的校验位与接收到的校验位不匹配,说明在数据传输过程中出现错误。接收方可触发错误校正机制,如向发送端发送一个错误信息,请发送方创新发送数据。
需要注意的是:UART提供了错误校正来检测数据传输是否出错,但它并不能自动修复错误。当检测到错误时,通常需要由上层应用程序或通信协议进行相关的错误处理。
这种检错方式并不一定正确。
USART
概述
USART(Universal Synchronous /Asynchronous Receiver / Transmitter,异步同步通信接口)是一种通信协议和硬件接口,用于在计算机系统和外部设备之间进行串行数据传输。它可以在全双工或半双工模式下工作,并支持同步或异步通信。
USART提供了一个可编程的串行通信接口,可以用于将数据传输到其他设备,如传感器、显示器、存储设备等。它是一种非常常见的串行通信协议,广泛应用于嵌入式系统、单片机和通信设备中。
工作原理
USART通过发送和接收数据位来实现同步或异步串行数据传输。它提供了更高的灵活性与数据传输速率。
USART主要有三根数据线:
- TX(Transmit):发送线,用于从计算机系统发送数据。
- RX(Receive):接收线,用于接收来自外部设备的数据。
- CLK(Clock):时钟线,用于同步数据传输。
数据格式
与UART类似,USART在数据传输时也使用一定的数据格式,包括数据位数、校验位、起始位与停止位。这些参数定义了每个数据字节的位数以及数据传输的格式。
同步通信
当USART以同步模式工作时,数据的传输是通过外部时钟进行同步的。发送端与接收端共享系统的CLK。
同步通信允许更高的数据传输速率和更精确的数据同步。
异步通信
当USART以异步模式工作时,与UART类似。
发送数据
在发送数据时,USART将数据字节从发送缓冲区发送到接收端。
发送过程包括按照数据格式发送起始位、数据位、校验位和停止位。发送端按照设定的波特率逐位发送数据,并在每个数据字节之间插入适当的起始位和停止位。
对于同步通信,数据位的传输由外部时钟信号同步。
对于异步通信,数据位的传输根据设定的波特率进行定时。
接收数据
在接收数据时,USART从发送端接收数据字节并传输到接收缓冲区。
接收过程包括按照数据格式接收起始位、数据位、校验位和停止位。接收端按照设定的波特率逐位接收数据,并根据起始位与停止位提取有效数据位和校验位。
错误纠正
USART也提供了一些机制来检测数据传输中的错误,与UART类似。
UART与USART的区别
- 同步通信支持:USART支持同步通信,而UART仅支持异步通信。
- 时钟需求:USART需要一个时钟信号(CLK)来同步数据传输,而UART不需要外部时钟信号。UART的数据传输完全依赖于波特率的设定,而USART通过时钟信号来确保数据传输的同步。
- 数据传输速率:由于USART支持同步通信,因此在相同的波特率下,USART能够实现更高的数据传输速率。相比之下,UART的数据传输速率受限于异步通信的性质,通常较低。
- 硬件复杂性:USART相对于UART具有更复杂的硬件实现。由于支持同步通信和更高的数据传输速率,USART需要更多的硬件资源来实现时钟信号的生成和同步处理。UART的硬件实现相对简单,适用于一些低复杂性和低速率的应用。