IPCM UART使用参考

Version 1.0


1. 概述

本文主要介绍IPCM UART以及其使用,包括简单的原理以及多路串口的配置说明,方便配合用户端使用多路串口。


2. 关键词

UART ttyS0 ttyS1 ttyS2 ttyS3 ttyS4


3. HW 原理图介绍


3.1. 公版电路图说明

关于UART的电路图做简单的说明, BGA package EVB board,对应chip来说我们是有一路UART port : CON2 for debug UART

如下图:


3.2. EVB uart pad介绍

在内部有一路debug uart,公版电路图上显示pad,对应EVB的board有一路pad,对应CON2。Debug UART 仅供系统 logging 与 debug 使用。

每一个具体的board上对应的接口都可以配置具体的uart(可以通过缓存器将所有的uart都通过一个pad 来测试,可以通过敲缓存器实现测试)。


4. IPCM UART SW配置方法

IPCM 的uart与具体的pad配置流程如下:

  1. 首先在linux-4.9\arch\arm\boot\dts\infinity6e.dtsi
    aliases {
        console = &uart0;
        serial0 = &uart0;
        serial1 = &uart1;
        serial2 = &fuart;
        serial3 = &uart2;
        serial4 = &uart3;
    };
    Console(用于定义使用的终端为uart0serial0为终端设备)
    …….
        uart0: uart@1F221000 {
            compatible = "sstar,uart";
            reg = <0x1F221000 0x100>;
            interrupts= <GIC_SPI INT_IRQ_UART_0 IRQ_TYPE_LEVEL_HIGH>;
            status = "ok";
            clocks = <&CLK_uart0>;
        };
    
        uart1: uart1@1F221200 {
            compatible = "sstar,uart";
            reg = <0x1F221200 0x100>;
            interrupts= <GIC_SPI INT_IRQ_UART_1 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&CLK_uart1>;
            status = "ok";
        };
    
        fuart: fuart@1F220400 {
            compatible = "sstar,uart";
            reg = <0x1F220400 0x100>, <0x1F220600 0x100>;
            interrupts = <GIC_SPI INT_IRQ_FUART IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI INT_IRQ_URDMA IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&CLK_fuart>;
            sctp_enable = <0>;//rts cts enable is 1
            dma = <1>;
            status = "ok";
        };
    
        uart2: uart2@1F221400 {
            compatible = "sstar,uart";
            reg = <0x1F221400 0x100>;
            interrupts= <GIC_SPI INT_IRQ_UART_2 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&CLK_uart2>;
            status = "ok";
        };
    
        uart3: uart3@1F221600 {
            compatible = "sstar,uart";
            reg = <0x1F221600 0x100>;
            interrupts= <GIC_SPI INT_IRQ_UART_3 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&CLK_uart3>;
            status = "ok";
        };
    

该文件是linux系统的设备树配置文件,该档中的uart0对应在系统中通过命令查看到的ttyS0。

如下:

对应配置文件说明如下:

在板子中查看uart设备相关信息可直接cat ms_uart文件,如下:

也可以通过命令行查看如下:


5. 测试UART

  1. 在网上dump一个开源的测试程序,点击获取参考程序

    按照如下方式下载即可:

    下载后的文件如下linux-serial-test.c

  2. 编译下载的.c文件

    使用serial_test.tar.gz,里面包含makefile以及serial_test.c档,然后操作如下步骤:

    tar xzvf serial_test.tar.gz
    cd serial_test
    make
    

    然后去bin目录下取可执行文件serial_test

    具体操作如下:

  3. EVB上对应的JP-Connection都可以配置具体的uart,具体如下:

    uart选取pad方式:

    以uart1举例:

    Uart1有7种mode

    选择mode6时,uart1会从PAD_GPIO10 PAD_GPIO11出;

    查原理图有:

    对应到板子的jp71:如下图所示

    对应pc端的连接

  4. 将服务器mount的一个目录mount到板子上,如下目录mount到board上:

    /home/user/serial_test
    

    用在board上执行:mount -t nfs -o nolock 172.21.28.81:/home/user/system/vendor

    然后进入:cd /system/vendor/serial_test 测试。