UART
2010-03-01 11:50
337 查看
1.UART 的原理与标准
在异步传输中,UART会发送起始位, 5bit-8bit的数据位,奇偶校验位,停止位(1bit、1.5bit、2bit)
起始位: 由transeiver 向receiver发出,以通知将有数据发出,双方都要同步时钟。 双方的时钟的误差不能超过10%,
为低(idle 状态为高),与idle状态时的电平相反
数据位:低位先发送(LSB)
每个bit发送的时间是相等的,这样receiver 就可以在每个bit 发送期一半的时候检测数据是1还是0.
例如,如果需要2s来发送1bit数据,receiver会在1s过去后检查是1还是0,再在2s后去检查下一个bit数据。
奇偶校验位: 用1把数据位为1的个数补为奇偶个。 奇校验更可靠点(至少有一个bit会传送)
停止位:为高,与idle状态的电平一样,在下一个字符开始发送前会有一个delay,以求同步
如果stop bit 没有出现, UART会向主处理器报告Framing error。 通常导致Framing error 的原因是:sender 和receiver的时钟没有跑在一个速度上。
无论数据是否被接收正确与否, UART都会丢弃start , parity ,stop bit。
如果没有数据传输时,tx 会处于idle状态
on = circuit closed = low voltage = current flowing = logical zero = space = 0
off = circuit open = high voltage = current stopped = logical one = mark = 1
RS422
RS423
RS449
RS485
3.2 HW
3.2.1 block diagram
clock generator, usually a multiple of the bit rate to allow sampling in the middle of a bit period
input and output shift registers
transmit/receive control
read/write control logic
transmit/receive buffers ( optional )
parallel data bus buffer ( optional )
FIFO buffer memory ( optional )
3.2.2 HW pins
TX transmit data
RX receive data
CTS clear to send : acknowleges RTS and allow DTE to transmit.
RTS request to send : tells DCE to prepare to accept data from DTE.
DCD data carrier detect : tells DTE that DCE is connected to phone line.
DSR data set ready : tells DTE that DCE is ready to received command/data
DTR data terminal ready : tells DCE that DTE is ready to be connected.
RI ring indicator : tells DTE that DCE has detected a ring indicator on the telephone line.
GND
3.3 功能描述
3.3.1 模式选择
3.3.2 Clock 与Baud rate
18.432 MHz: 300, 600, 1200, 2400, 4800, 9600, 19200 Bd
22.118400 MHz: 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200 Bd
16 MHz: 125000, 500000 Bd
24 MHz: 4800 Bd
3.3.2.2 auto baudrate
3.3.3 FIFO 管理
3.3.3.2 DMA
3.3.4 中断管理
IER ; enable the interrupt
IIR: 通过查询此寄存器,即可知道有什么interrupt
3.3.5 硬件流控
recevier block (A) 检测 receiver FIFO的数据, 如果低于设定的level, 则RTS被拉低,即对方(B)的sending block 的CTS 被拉低,如果对方(B)的sending block 有数据要发送,它会先查询它自己的CTS 的状态,如果有效(为低), 则发送数据给A
软件需要实现的地方:
1.响应Modem status 的中断
2.如果是CTS被置低了,则记录下来(用一个全局变量gCTS 记录下来)
3.在发送数据时,根据gCTS来判断是否enable tx interrupt
4.在tx中断中,根据gCTS 来判断是否要往THR写
3.3.6 软件流控
接收方发现接收不过来了,则发送XOFF给发送方,等可以接收了,再发送XON给发送方
对于接收方的transiver:在发送中断被触发时,先发送XON, 再发送数据
对于发送方的receiver:在收到XON时,enable tx 中断,收到XOFF时,disable 发送数据
3.3.7 Error Detection
通过读取LSR, 可以得知帧传送是否存在错误
1. BI Break condition – RX 超过一帧时间(包括start、parity bit、stop bit) + 1bit 为低
2. FE Framing error -- 接收数据没有合法的stop bit
3. PE Parity error -- 奇偶校验时错误
4. OE Overrun error -- 在接收FIFO满时,还有数据传来
3.3.8 Time out 与 Break conditions
Time out : 当RX 在4word + 12bit 的时间里为高, 则认为 RX 处于idle 状态;如果此时RX FIFO里有数据,则会产生timeout 中断。
Break: 见3.3.7.1
3.3.9 power management
Sleep mode:
3.4 寄存器描述
4.UART的软件实现
5.与UART相关的通信协议
5.1 xmodem
5.2 FBus
5.3 AT 命令
http://en.wikipedia.org/wiki/Hayes_command_set
6.UART 的应用
6.1 Infrared
6.2 Bluetooth
7.UART的心得
参考链接
http://en.wikipedia.org/wiki/Uart
在异步传输中,UART会发送起始位, 5bit-8bit的数据位,奇偶校验位,停止位(1bit、1.5bit、2bit)
起始位: 由transeiver 向receiver发出,以通知将有数据发出,双方都要同步时钟。 双方的时钟的误差不能超过10%,
为低(idle 状态为高),与idle状态时的电平相反
数据位:低位先发送(LSB)
每个bit发送的时间是相等的,这样receiver 就可以在每个bit 发送期一半的时候检测数据是1还是0.
例如,如果需要2s来发送1bit数据,receiver会在1s过去后检查是1还是0,再在2s后去检查下一个bit数据。
奇偶校验位: 用1把数据位为1的个数补为奇偶个。 奇校验更可靠点(至少有一个bit会传送)
停止位:为高,与idle状态的电平一样,在下一个字符开始发送前会有一个delay,以求同步
如果stop bit 没有出现, UART会向主处理器报告Framing error。 通常导致Framing error 的原因是:sender 和receiver的时钟没有跑在一个速度上。
无论数据是否被接收正确与否, UART都会丢弃start , parity ,stop bit。
如果没有数据传输时,tx 会处于idle状态
on = circuit closed = low voltage = current flowing = logical zero = space = 0
off = circuit open = high voltage = current stopped = logical one = mark = 1
2.UART的分类
RS232RS422
RS423
RS449
RS485
3.UART的实现
3.1 Features3.2 HW
3.2.1 block diagram
clock generator, usually a multiple of the bit rate to allow sampling in the middle of a bit period
input and output shift registers
transmit/receive control
read/write control logic
transmit/receive buffers ( optional )
parallel data bus buffer ( optional )
FIFO buffer memory ( optional )
3.2.2 HW pins
TX transmit data
RX receive data
CTS clear to send : acknowleges RTS and allow DTE to transmit.
RTS request to send : tells DCE to prepare to accept data from DTE.
DCD data carrier detect : tells DTE that DCE is connected to phone line.
DSR data set ready : tells DTE that DCE is ready to received command/data
DTR data terminal ready : tells DCE that DTE is ready to be connected.
RI ring indicator : tells DTE that DCE has detected a ring indicator on the telephone line.
GND
3.3 功能描述
3.3.1 模式选择
3.3.2 Clock 与Baud rate
18.432 MHz: 300, 600, 1200, 2400, 4800, 9600, 19200 Bd
22.118400 MHz: 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200 Bd
16 MHz: 125000, 500000 Bd
24 MHz: 4800 Bd
3.3.2.2 auto baudrate
3.3.3 FIFO 管理
3.3.3.2 DMA
3.3.4 中断管理
IER ; enable the interrupt
IIR: 通过查询此寄存器,即可知道有什么interrupt
优先级 | interrupt | source | reset method |
1 | recevier line status | 存在 OE, FE, PE or BI error | FE, PE, BI 可通过读取RHR , OE 要通过读取LSR |
2 | RX 超时(见3.3.8) | 在RX FIFO 中存在超时的数据 | 读取RHR |
2 | RHR 中断 | 不用FIFO :有字符传过来了 使用FIFO: FIFO 里的数据超过了设定的level | 读RHR 知道中断消失 |
3 | THR中断 | 不用FIFO:已经发送一个字符(THR为空) 使用FIFO: TX FIFO 低于设定的level | 给THR发数据, 知道中断消失 |
4 | Modem status | MSR中的DSR/CTS 不为零 | 读 MSR |
5 | XOFF 中断/特殊字符中断 | 收到XOFF/特殊字符 | 对于XOFF收到XON; 对于特殊字符,读IIR |
6 | CTS, RTS | CTS/RTS 从active(低) 变为inactive(高) | 读IIR |
3.3.5 硬件流控
recevier block (A) 检测 receiver FIFO的数据, 如果低于设定的level, 则RTS被拉低,即对方(B)的sending block 的CTS 被拉低,如果对方(B)的sending block 有数据要发送,它会先查询它自己的CTS 的状态,如果有效(为低), 则发送数据给A
软件需要实现的地方:
1.响应Modem status 的中断
2.如果是CTS被置低了,则记录下来(用一个全局变量gCTS 记录下来)
3.在发送数据时,根据gCTS来判断是否enable tx interrupt
4.在tx中断中,根据gCTS 来判断是否要往THR写
3.3.6 软件流控
接收方发现接收不过来了,则发送XOFF给发送方,等可以接收了,再发送XON给发送方
Code | Meaning | ASCII | Dec | Hex | Keyboard |
XOFF | Pause transmission | DC3 | 19 | 0x13 | CTRL+S |
XON | Resume transmission | DC1 | 17 | 0x11 | CTRL+Q |
对于发送方的receiver:在收到XON时,enable tx 中断,收到XOFF时,disable 发送数据
3.3.7 Error Detection
通过读取LSR, 可以得知帧传送是否存在错误
1. BI Break condition – RX 超过一帧时间(包括start、parity bit、stop bit) + 1bit 为低
2. FE Framing error -- 接收数据没有合法的stop bit
3. PE Parity error -- 奇偶校验时错误
4. OE Overrun error -- 在接收FIFO满时,还有数据传来
3.3.8 Time out 与 Break conditions
Time out : 当RX 在4word + 12bit 的时间里为高, 则认为 RX 处于idle 状态;如果此时RX FIFO里有数据,则会产生timeout 中断。
Break: 见3.3.7.1
3.3.9 power management
Sleep mode:
3.4 寄存器描述
Name | 功能 | 值 |
DLL | Divisor latches low | |
DLH | Divisor latches high | |
RHR | Receive holding register | |
THR | Transmit holding register | |
IER | interrupt enable register | |
IIR | Interrupt identification register | |
FCR | FIFO control register | |
LCR | Line Control Register | |
MCR | Modem Control Register | |
LSR | Line Status Register | |
MDR | Mode definition register | |
EFR | Enhanced feature register | |
TCR | Transmission Control register | |
MSR | Modem status register | |
SPR | Scratchpad register | |
TLR | Trigger level register | |
SFLSR | Status FIFO line status register | |
UASR | autobauding status register | |
SCR | Supplementary control register | |
SSR | Supplementary status register | |
XON/ADDR | ||
XOFF |
4.UART的软件实现
5.与UART相关的通信协议
5.1 xmodem
5.2 FBus
5.3 AT 命令
http://en.wikipedia.org/wiki/Hayes_command_set
6.UART 的应用
6.1 Infrared
6.2 Bluetooth
7.UART的心得
参考链接
http://en.wikipedia.org/wiki/Uart
相关文章推荐
- USB协议和UART对比分析
- UART的FIFO功能
- 测试uart_ldisc
- uart测试代码
- PIC24F32KA304-关于UART轮训发送数据出现数据发送不全问题的解决
- DM6467之UART1
- CC2540 UART数据失真分析
- STM32F103 UART4 DMA接收 终于调试成功,分享一下
- 协议中UART的两种模式 【转】
- UART0串口编程系列 串口编程(UART0)之中断方式(一)
- Tiny 6410 UART0 输出乱码
- ARM linux 内核更改uart波特率方法
- Linux tty驱动学习 - UART驱动的write操作流程
- 【iCore3 双核心板】例程三十二:UART_IAP_ARM实验——更新升级STM32
- Beaglebone Black–智能家居控制系统 LAS - 用 UART 连接 ESP8266 (ESP-01 版)
- UART分析与设计
- UART 初始化及使用示例代码
- TQ2440裸奔程序:串口UART打印printf测试程序
- stm32 UART串口
- Linux串口(serial、uart)驱动程序设计