串口 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。

 

 

 

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UART(Universal Asynchronous Receiver/Transmitter)是一种通用异步收发器,可以将并行数据转换成串行数据,或将串行数据转换成并行数据。在串口通信中,UART通常用于将数据从微控制器或计算机发送到外设(如传感器、执行器等)或从外设接收数据并发送到微控制器或计算机。下面介绍UART串口通信实验原理UART串口通信的实验步骤如下: 1. 确定串口通信参数:通信波特率、数据位数、停止位数、校验位等。波特率是串口通信中的重要参数,表示数据传输的速率,通常选择常见的波特率(如9600、115200等)。 2. 连接串口通信的设备:将微控制器或计算机的串口与外设的串口连接,使用串口线连接即可。需要注意的是,串口线的连接方式必须与设备的串口通信参数相匹配。 3. 编写程序:使用编程语言(如C语言)编写程序,实现数据的发送和接收。在程序中,需要设置串口通信参数,并使用串口发送和接收函数进行数据的传输。发送数据时,将数据转换为串行数据,并通过UART发送到外设;接收数据时,通过UART接收串行数据,并将其转换为并行数据,保存在缓冲区中。 4. 调试程序:将程序下载到微控制器或计算机中,通过串口进行调试。在调试过程中,可以使用示波器或串口调试软件查看串口发送和接收的数据,检查程序是否正常运行。 需要注意的是,串口通信中,外设和微控制器或计算机的串口通信参数必须相同才能正常进行通信。同时,在数据的发送和接收过程中,需要注意数据的格式和传输顺序,以免出现数据丢失或错误的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值