您的位置:首页 > Web前端

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

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
优先级interruptsourcereset method
1recevier line status  存在 OE, FE, PE or BI error FE, PE, BI 可通过读取RHR , OE 要通过读取LSR
2RX 超时(见3.3.8)在RX FIFO 中存在超时的数据读取RHR
2RHR 中断不用FIFO :有字符传过来了
使用FIFO: FIFO 里的数据超过了设定的level
读RHR 知道中断消失
3THR中断不用FIFO:已经发送一个字符(THR为空)
使用FIFO: TX FIFO 低于设定的level
给THR发数据, 知道中断消失
4Modem statusMSR中的DSR/CTS 不为零读 MSR
5XOFF 中断/特殊字符中断收到XOFF/特殊字符对于XOFF收到XON; 对于特殊字符,读IIR
6CTS, RTSCTS/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给发送方
CodeMeaningASCIIDecHexKeyboard
XOFFPause transmissionDC3190x13CTRL+S
XONResume transmissionDC1170x11CTRL+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 功能
DLLDivisor latches low 
DLHDivisor latches high 
RHRReceive holding register 
THRTransmit holding register 
IERinterrupt enable register 
IIRInterrupt identification register 
FCRFIFO control register 
LCRLine Control Register 
MCRModem Control Register 
LSRLine Status Register 
MDRMode definition register 
EFREnhanced feature register 
TCRTransmission Control register 
MSRModem status register 
SPRScratchpad register 
TLRTrigger level register 
SFLSRStatus FIFO line status register 
UASRautobauding status register 
SCRSupplementary control register 
SSRSupplementary 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息