串口 UART的Loopback测试原理

UART的Loopback测试原理

之前在X86的项目中,有现成的测试套件burnintest来完成UART的loopback测试。其中的原理可能并不是很命令。只是简单的认为只会是TX-RX数据对传,并判断发送接收的数据的一致性。其实,真正测试的时候,并不是如此千篇一律。

 

目前在MIPS架构上测试UART,需要编译测试程序出来。大概的研究了下原理。下面是UART loopback测试的环节,以Function的方式呈现。

  /* Set of available UART tests */

testDesc tests[] = {

       /*loopbackinternal*/

    { "SetLoopback",    test_uart_loopback,     UART1, 1,0, 0},

    {"Signal Check",    test_uart_signals,      UART1, 1,0, 0},

    { "LineBREAK",       test_uart_break,        UART1, 1, 0, 0},

    {"Internal RX FIFO", test_uart_rx_fifo,      UART1, 1, 0, 0},

    {"Internal TX FIFO", test_uart_tx_fifo,      UART1, 1, 0, 0},

    {"ASCII",           test_uart_data,         UART1, 1,0, 0},

    { "Commformats",    test_uart_comm_formats, UART1, 1, 0, 0},

    { "Baudrates",      test_uart_baud_rates,   UART1, 1,0, 0},

    {"Interrupts",      test_uart_interrupts,   UART1, 1,0, 0},

    /*loopbackexternal*/

    { "SetExternal",     test_uart_external,     UART1, 1, 0, 0},

    {"Signal Check",    test_uart_signals,      UART1, 1,0, 0},

    {"ASCII",           test_uart_data,         UART1, 1,0, 0},

    { "Commformats",    test_uart_comm_formats, UART1, 1, 0, 0},

    { "Baudrates",      test_uart_baud_rates,   UART1, 1,0, 0},

    {"Interrupts",      test_uart_interrupts2,  UART1, 1,0, 0},

 

    { NULL,NULL, 0, 0, 0, 0}

};

 

 

测试UART loopback还需要弄清楚下面几个问题:

1、 UART的接口定义和各个Register。

2、 测试治具。UART上需要插上什么治具?

3、 测试中涉及到的autoflow。

 

这里先解决这几个问题吧。

UART全称为通用的异步收发装置。有9Pin,各个定义如下:

DB-9 Pin

EIA abbreviation

Description

1

DCD

Data carrier detect

2

RXD

Receive data

3

TXD

Transmit data

4

DTR

Data terminal ready

5

GND

Signal ground

6

DSR

Data set ready

7

RTS

Request to send

8

CTS

Clear to send

9

RI

Ring Indicator

 

其他各个Register的说明还是参阅spec吧。

参考: http://retired.beyondlogic.org/serial/serial.htm

 

测试治具:

Loopback原理本来就是tx-rx对接完成,完整的连接会涉及到CTS/RTS。下图是一般使用的loopback治具。

其中连接的方式是这样的:

1、 RX—TX;

2、 RTS—CTS;

3、 DCD—DTR—DSR.

这个剖面是母头的接口,公头的接口顺序反过来。

 

至于autoflow的功能,主要涉及到RTS和CTS的运作。RTS表示请求发送,CTS则是清零发送。在正常工作的时候,此UART的RTS会连接到另外UART的CTS。如果autoRTS功能打开,当RX FIFO的数据量达到设置的FIFO trigger,则会让RTS处于不工作状态。对面的UART的CTS则会检测到这个状态,停止TX的数据发送,直到RX的FIFO中清空了。

 

下面简单的描述一下uart loopback测试程序的各个环节。

1、 signalcheck

internal和external的信号检测都是一样的,主要是RTS和CTS信号状态的动态设定和检测,通过内部register来设定:MCR和MSR。

2、 ASCII

通过分别对TX和RX的Write 和Read,比较数据的一致性。

3、 commformats

UART不同的基本设定:数据长度、stopbit、奇偶校验等。设定之后在通过ASCII方式测试,并检测是否有error。

4、 Baudrate

不同波特率的设置,在通过ASCII方式验证。并检测是否有error。

5、 Interrupts

通过设定内部register来使能各种中断,并将中断程式注册到CIU中。再通过相应的方式触发中断,使其进入中断程序中做相应动作:比如printf。

在external interrupt测试环节,主要应该有两种方式:1、FIFO enable,通过RTS和CTS控制数据流,并适时的触发FIFO level Trigger,从而产生中断。2、FIFO disable,通过单字节的传输,RX有数据则产生中断。

6、 LineBreak

指在internal loopback中特意发一个break信号,将TX线保持低电位。同时会产生一个中断,并造成有数据发送的假象,如果rx有实际的数据接收到,则failed。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值