UART

来源:互联网 发布:xml html区别 知乎 编辑:程序博客网 时间:2024/06/11 18:30

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

2.UART的分类

           RS232

           RS422

           RS423

           RS449

           RS485

3.UART的实现

    3.1 Features

    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

优先级 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

         对于接收方的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  寄存器描述

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

原创粉丝点击