UART 体系结构

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(物理层)
(类 16550 寄存器结构)
 
(未显示1个用户的41个中间版本)
第11行: 第11行:
 
<br><br>
 
<br><br>
  
== 逻辑层 ==
+
== 物理层 ==
  
 
;帧格式
 
;帧格式
第25行: 第25行:
  
  
具体位解析:
+
;具体位解析:
 +
 
  
<pre>
 
 
* 起始位 (1位,必须)
 
* 起始位 (1位,必须)
  
    起始位是TX告知RX,数据传输即将开始。而RX无论何时,只要检测到低电平,就开始逐位接收数据。
+
::起始位是TX告知RX,数据传输即将开始。而RX无论何时,只要检测到低电平,就开始逐位接收数据。
  
  
 
* 数据位  
 
* 数据位  
  
    顾名思义,数据位是用来传输信息的。长度可以说5、6、7、8位。收/发双方需要在数据传输前,对双方的数据位作一致的定义。最常用的是 8 位
+
::顾名思义,数据位是用来传输信息的。长度可以说5、6、7、8位。收/发双方需要在数据传输前,对双方的数据位作一致的定义。最常用的是 8 位
  
  
 
* 校验位 (1位,可选)
 
* 校验位 (1位,可选)
  
    为了保证数据传输的安全性而设。不是强制的,距离短确定无干扰的环境,为提高传输速度,可不用此位。
+
::为了保证数据传输的安全性而设。不是强制的,距离短确定无干扰的环境,为提高传输速度,可不用此位。
  
    在数据长距离传输时,UART使用 RS-232、RS-485 传输,在传输的导线较长时,如遇干扰,会导致传输的数据错误(1变0,0变1)。加上校验位的话,
+
::在数据长距离传输时,UART使用 RS-232、RS-485 传输,在传输的导线较长时,如遇干扰,会导致传输的数据错误(1变0,0变1)。加上校验位的话,接受端可做检验。如果校验出错,说明数据不可信,直接丢弃;校验通过的话,数据初步可信,进入下一级校验,通常在通信协议里再做一次校验
    接受端可做检验。如果校验出错,说明数据不可信,直接丢弃;校验通过的话,数据初步可信,进入下一级校验,通常在通信协议里再做一次校验
+
  
    收/发双方,事先应商定好是否需要校验位。不需要,则罢;需要,则可选奇校验或偶校验
+
::收/发双方,事先应商定好是否需要校验位。不需要,则罢;需要,则可选奇校验或偶校验
  
    偶校验:数据位中的“1”的个数为偶数时,校验位为 0;数据位中的“1”的个数为奇数时,校验位为 1;即:保证数据位和校验位中1的个数为偶数
 
  
    奇校验:数据位中的“1”的个数为偶数时,校验位为 1;数据位中的“1”的个数为奇数时,校验位为 0;即:保证数据位和校验位中1的个数为奇数
+
偶校验:数据位中的“1”的个数为偶数时,校验位为 0;数据位中的“1”的个数为奇数时,校验位为 1;即:保证数据位和校验位中1的个数为偶数
</pre>
+
 
 +
奇校验:数据位中的“1”的个数为偶数时,校验位为 1;数据位中的“1”的个数为奇数时,校验位为 0;即:保证数据位和校验位中1的个数为奇数
 +
 
  
  
第62行: 第62行:
  
  
<pre>
+
 
 
* 停止位
 
* 停止位
  
    停止位当然是告诉 RX 停止传输了。它的位数比较特别,可以说1位、1.5位、2位
+
::停止位当然是告诉 RX 停止传输了。它的位数比较特别,可以说1位、1.5位、2位
  
    停止位始终为逻辑 1 (高电平)
+
::停止位始终为逻辑 1 (高电平)
  
  
 
* 空闲位
 
* 空闲位
  
    TX 传输完成,RX 不能休息,其要始终盯着 URAT 总线上电平变化。。。
+
::TX 传输完成,RX 不能休息,其要始终盯着 URAT 总线上电平变化。。。
</pre>
+
 
  
  
 
<br><br>
 
<br><br>
  
 
+
== 电气层 ==
== 物理层 ==
+
  
 
UART 传输信号线最少只要两根线,TX 和 RX
 
UART 传输信号线最少只要两根线,TX 和 RX
 +
 +
=== TTL ===
 +
 +
TTL:Transistor-Transistor Logic
 +
 +
单片机 (MCU) 内一般皆实现仅有 TX/RX 两根线的串口,通常称这类串口为 TTL Serial
 +
 +
 +
* Signal = 1 (HIGH): +5V / +3.3V
 +
* Signal = 0 (LOW):  0V
 +
 +
<br><br>
  
 
=== RS232 ===
 
=== RS232 ===
第90行: 第101行:
  
 
RS-232 is practically identical to ITU V.24 (signal description and names) and V.28 (electrical)
 
RS-232 is practically identical to ITU V.24 (signal description and names) and V.28 (electrical)
 +
  
 
RS232 is an Active LOW voltage driven interface and operates at +12V to -12V where:
 
RS232 is an Active LOW voltage driven interface and operates at +12V to -12V where:
  
* Signal = 1 (HIGH) < -3.0V (MARK) (-15V ~ -3V)
+
* Signal = 1 (HIGH)< -3.0V (MARK) (-15V ~ -3V)
* Signal = 0 (LOW) > +3.0V (SPACE) (+3V ~ +15V)
+
* Signal = 0 (LOW)> +3.0V (SPACE) (+3V ~ +15V)
 +
 
 +
 
 +
除 TX 与 RX 线外,其还有多条其他的信号线:RTS, CTS, DSR, DTR, DCD, RI, GND 等
  
 
<br><br>
 
<br><br>
  
=== TTL ===
+
=== RS485 ===
  
* Signal = 1 (HIGH) +5V / +3.3V
+
RS485采用差分信号负逻辑:
* Signal = 0 (LOW)  0V
+
 
 +
* Signal = 1 (HIGH)+2V ~ +6V
 +
* Signal = 0 (LOW): -6V ~ -2V
 +
 
 +
 
 +
RS485有两线制 (A, B) 和四线制 (A, B, Y, Z) 两种接线,四线制只能实现点对点的通信方式,现很少采用。
 +
 
 +
现在多采用的是两线制接线方式。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。
 +
 
 +
RS485 的理论最长传输距离能达到 1200米,实际应用中要比1200米短,具体能传输多远视周围环境而定。在传输过程中可以采用增加中继的方法对信号进行放大,最多可以加 8 个中继,此时 RS485 的最大传输距离可以达到 9.6KM
  
 
<br><br>
 
<br><br>
第107行: 第131行:
 
== 常见芯片 ==
 
== 常见芯片 ==
  
UART 的常见芯片:
+
=== TTL RS232 一体 ===
 +
 
 +
目前 PC 平台上,最常见的就是类 16550A 实现,CPU 主要通过 D0 - D7  数据口、A0 - A2 寄存器选择口操控 8250/16550,8250/16550 出来的信号就是 RS232
 +
 
  
 
* 8250 老芯片,始于 IBM XT,最高波特率应该是 9600bps
 
* 8250 老芯片,始于 IBM XT,最高波特率应该是 9600bps
第116行: 第143行:
  
  
目前在 PC 平台和嵌入式平台上,最常见的就是类 16550A 实现
+
[[http://archive.pcjs.org/pubs/pc/datasheets/8250A-UART.pdf 8250 Datasheet]]
 +
 
 +
[[http://www.ti.com/lit/ds/symlink/pc16550d.pdf 16550 Datasheet]]
 +
 
 +
 
 +
<br>
 +
 
 +
=== TTL 转 RS232 ===
 +
 
 +
常用 SP232、MAX232、UT3232、 SP3232、 MAX3232...
 +
 
 +
 
 +
[https://www.exar.com/files/documents/sipex/datasheets/sp232_312a.pdf SP232 datasheet]
 +
 
 +
[https://www.sparkfun.com/datasheets/Components/General/sp3222_3232e.pdf SP3232 datasheet]
 +
 
 +
<br>
 +
 
 +
=== TTL 转 RS485 ===
 +
 
 +
常用  MAX485,ISL3152E,ADM2483,ISO3082,ADM2587
 +
 
 +
 
 +
硬件设计参考此页:[[RS485]]
  
 
<br><br>
 
<br><br>
  
== 参考 ==
+
== 类 16550 寄存器结构 ==
  
* http://whoshallwe.blog.163.com/blog/static/507441552012716102156950/
+
[[文件:Uart.reg.jpg]]
  
* http://hi.baidu.com/comcat/item/5a33fd2afef1b887ae48f583
+
 
 +
DLAB 是 LCR 寄存器的 LCR[7]
 +
 
 +
 
 +
[[UART Register]]
 +
 
 +
[http://www.ti.com/lit/ds/symlink/pc16550d.pdf 16550 Datasheet]
 +
 
 +
<br><br>
 +
 
 +
== 参考 ==
  
 
* http://www.lammertbies.nl/comm/info/serial-uart.html
 
* http://www.lammertbies.nl/comm/info/serial-uart.html
  
 
* http://www.lammertbies.nl/comm/info/RS-232_specs.html
 
* http://www.lammertbies.nl/comm/info/RS-232_specs.html
 +
 +
* http://www.rs485.com/rs485spec.html
  
 
* https://www.sparkfun.com/tutorials/215
 
* https://www.sparkfun.com/tutorials/215

2017年10月30日 (一) 14:46的最后版本

目录

[编辑] 1 概述

UART:Universal Asynchronous Receiver Transmitter,通用异步收发器

即为嵌入式领域最为常说的串口。最常用的波特率为 9600bps、115200bps

“异步”是指不需要额外的时钟线进行数据的同步传输,是一种串行总线接口,只用两根线就可以完成数据的收发:一根线上发送数据,另一根线接收数据

发送和接受时,数据是逐位传输



[编辑] 2 物理层

帧格式

由起始位、数据位、校验位和停止位组成

Uart.frame.jpg


UART 空闲(IDLE)时(没有数据传递),总线为高电平(逻辑1)

开始数据传输时,首先发送起始位(低电平,逻辑0),然后再逐位传输数据(LSB --> MSB),数据传输完成后,有校验位则传输1位校验位,再传一位停止位(逻辑1,高电平)。至此,数据传输完成,UART 重回 IDLE 状态,总线上的电平为高


具体位解析:


  • 起始位 (1位,必须)
起始位是TX告知RX,数据传输即将开始。而RX无论何时,只要检测到低电平,就开始逐位接收数据。


  • 数据位
顾名思义,数据位是用来传输信息的。长度可以说5、6、7、8位。收/发双方需要在数据传输前,对双方的数据位作一致的定义。最常用的是 8 位


  • 校验位 (1位,可选)
为了保证数据传输的安全性而设。不是强制的,距离短确定无干扰的环境,为提高传输速度,可不用此位。
在数据长距离传输时,UART使用 RS-232、RS-485 传输,在传输的导线较长时,如遇干扰,会导致传输的数据错误(1变0,0变1)。加上校验位的话,接受端可做检验。如果校验出错,说明数据不可信,直接丢弃;校验通过的话,数据初步可信,进入下一级校验,通常在通信协议里再做一次校验
收/发双方,事先应商定好是否需要校验位。不需要,则罢;需要,则可选奇校验或偶校验


偶校验:数据位中的“1”的个数为偶数时,校验位为 0;数据位中的“1”的个数为奇数时,校验位为 1;即:保证数据位和校验位中1的个数为偶数

奇校验:数据位中的“1”的个数为偶数时,校验位为 1;数据位中的“1”的个数为奇数时,校验位为 0;即:保证数据位和校验位中1的个数为奇数


两个校验位的示例图:


Uart.example.01.jpg


Uart.example.02.jpg


  • 停止位
停止位当然是告诉 RX 停止传输了。它的位数比较特别,可以说1位、1.5位、2位
停止位始终为逻辑 1 (高电平)


  • 空闲位
TX 传输完成,RX 不能休息,其要始终盯着 URAT 总线上电平变化。。。




[编辑] 3 电气层

UART 传输信号线最少只要两根线,TX 和 RX

[编辑] 3.1 TTL

TTL:Transistor-Transistor Logic

单片机 (MCU) 内一般皆实现仅有 TX/RX 两根线的串口,通常称这类串口为 TTL Serial


  • Signal = 1 (HIGH): +5V / +3.3V
  • Signal = 0 (LOW): 0V



[编辑] 3.2 RS232

RS232: Recommended Standard 232

RS-232 标准(TIA-232) 由 TIA (Telecommunications Industry Association) 定义。其定义了接口的物理特性和电气特性。

RS-232 is practically identical to ITU V.24 (signal description and names) and V.28 (electrical)


RS232 is an Active LOW voltage driven interface and operates at +12V to -12V where:

  • Signal = 1 (HIGH): < -3.0V (MARK) (-15V ~ -3V)
  • Signal = 0 (LOW): > +3.0V (SPACE) (+3V ~ +15V)


除 TX 与 RX 线外,其还有多条其他的信号线:RTS, CTS, DSR, DTR, DCD, RI, GND 等



[编辑] 3.3 RS485

RS485采用差分信号负逻辑:

  • Signal = 1 (HIGH): +2V ~ +6V
  • Signal = 0 (LOW): -6V ~ -2V


RS485有两线制 (A, B) 和四线制 (A, B, Y, Z) 两种接线,四线制只能实现点对点的通信方式,现很少采用。

现在多采用的是两线制接线方式。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。

RS485 的理论最长传输距离能达到 1200米,实际应用中要比1200米短,具体能传输多远视周围环境而定。在传输过程中可以采用增加中继的方法对信号进行放大,最多可以加 8 个中继,此时 RS485 的最大传输距离可以达到 9.6KM



[编辑] 4 常见芯片

[编辑] 4.1 TTL RS232 一体

目前 PC 平台上,最常见的就是类 16550A 实现,CPU 主要通过 D0 - D7 数据口、A0 - A2 寄存器选择口操控 8250/16550,8250/16550 出来的信号就是 RS232


  • 8250 老芯片,始于 IBM XT,最高波特率应该是 9600bps
  • 16450 最高波特率 38400bps,无收发缓存,收或发一个字节就要一次软件处理,高速下 CPU 负担会很重
  • 16550A 最高波特率 115200bps,收发各有一个 32 字节的 FIFO Buffer,高速下,CPU负担低


[8250 Datasheet]

[16550 Datasheet]



[编辑] 4.2 TTL 转 RS232

常用 SP232、MAX232、UT3232、 SP3232、 MAX3232...


SP232 datasheet

SP3232 datasheet


[编辑] 4.3 TTL 转 RS485

常用 MAX485,ISL3152E,ADM2483,ISO3082,ADM2587


硬件设计参考此页:RS485



[编辑] 5 类 16550 寄存器结构

Uart.reg.jpg


DLAB 是 LCR 寄存器的 LCR[7]


UART Register

16550 Datasheet



[编辑] 6 参考















个人工具
名字空间

变换
操作
导航
工具箱