UART0 作为调试串口的同时与普通串口 UART3 对接测试的方案

缘由

在硬件自动化测试中,数据通信接口最好有对接的方式,由程序自动完成数据收发与校验,从而实现对硬件接口的测试验证。这里讲到的 UART0 与 UART3 的测试,由于为了保留 UART0 作为调试串口的功能,便于维修人员使用,所以需要特别的处理方案。

硬件连接原理

这里 UART0 是调试串口,CP2108 是 USB 转串,用于接上位机进行使用调试串口。UART3 是一个普通的待测串口。连线中间加的元器件是为了电平信号传输的稳定。

测试程序设计

  • 为了避免测试程序严重干扰内核对调试串口的使用,UART0 以普通文件方式打开,不配置串口参数。UART3 以串口方式打开读写。

  • 第一轮:往 UART0 打开的 fd write 一组数据(1234567890abcdef),等待 5 ms,从 UART3 打开的 fd read 数据,核对写和读的数据是否一致。实现测试检验 UART0 往 UART3 发送数据功能。也就是测试了 UART0 的 Tx 以及 UART3 的 Rx。

  • 第二轮:往 UART3 打开的 fd write 一组数据,,等待 5 ms,从 UART3 打开的 fd read 数据,核对写和读的数据是否一致。这里发生的情况是,UART3 的 Tx 接入 UART0 的 Rx,UART0 收到的数据被把 UART0 打开作为调试串口的内核读取,然后通过 UART0 的 Tx 回显,同时,UART0 的 Tx 连接了 UART3 的 Rx,所以 UART3 能够收到数据。其实第二轮这里已经把 UART0、UART3 的 Tx、Rx 都验证了,只是出现问题时不好定位,所以先进行第一轮验证。

程序运行效果如下图:

参考代码:

#!/usr/bin/env python
# Copyright 2019 Tronlong Elec. Tech. Co. Ltd. All Rights Reserved.
# Description:
#   Test with TWO uart device, the first one is console tty.
#   i.e. console tty S0, normal tty S3. S0 Tx connect to S3 Rx, S3 Tx connect to S0 Rx.

import os, sys, time
import serial

if (len(sys.argv) != 3):
    print("Usage: {0} <console tty> <uart tty>".format(sys.argv[0]))
    sys.exit(10)

UART_PATH1 = sys.argv[1]
UART_PATH2 = sys.argv[2]

dev1 = open(UART_PATH1, "w", buffering=0)
#dev1 = serial.Serial(UART_PATH1, 115200, serial.EIGHTBITS,
#                     serial.PARITY_NONE, serial.STOPBITS_ONE, 3)
dev2 = serial.Serial(UART_PATH2, 115200, serial.EIGHTBITS,
                     serial.PARITY_NONE, serial.STOPBITS_ONE, 3)

wbuf = '1234567890abcdef'

for _ in range(10):
    # Test dev1 Tx and dev2 Rx
    dev1.write(wbuf)
    time.sleep(0.02)
    rbuf = dev2.read(len(wbuf))
    # Check data.
    if not rbuf or rbuf != wbuf:
        print('Test failed for dev1 Tx and dev2 Rx')
        dev1.close()
        dev2.close()
        sys.exit(3)

    # Test dev2 Tx and dev1 Rx
    # Kernel read dev1 Rx and echo back, at the same time, send to dev2 Rx.
    # So, we write dev2 and then read dev2.
    dev2.write(wbuf)
    time.sleep(0.02)
    rbuf = dev2.read(len(wbuf))
    # Check data.
    if not rbuf or rbuf != wbuf:
        print('Test failed for dev2 Tx and dev1 Rx')
        dev1.close()
        dev2.close()
        sys.exit(3)

dev1.close()
dev2.close()
print '\nTest pass!'
sys.exit(0)

2019年11月14日

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页