基于安霸CV2芯片车载板机硬件接口电路测试设计与实现

  1. 文档概述

本文档主要介绍COROS-SOLO-MB主板测试方法,包含系统框架、测试项、与测试方法三部分。

如下1-1 COROS-SOLO-MB系统测试框架图,主要包括Windows-PC测试端,主板测试MCU,CV2,FPGA模块,及其主要有Sensor,HDMI,SD Card,I2C,SPI,UART,WIFI,AUDIO,NAND,GPIO,ALS,LED,RTC,PSOC,TMP,TPM,PWR_SW,PWR_WKP,DDR测试项组成。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

qt_temp

1-1 COROS-SOLO-MB系统测试框架图

  1. 测试模块

2.1 Sensor测试模块

测试标准:外接HDMI显示器查看是否出图。

2-1 Sensor测试方法图

测试原理:

如上2-1 Sensor测试方法图示,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,CV2I2C0通道寄存器数据。

步骤3,读寄存器函数返回值。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果。

步骤6,测试标准参看HDMI显示器是否出图,则整个测试完成。

测试实现:

Sensor测试命令:

请求:leopard sensor 1\r\n

响应:$response sensor 1 1$

功能:摄像头出图。

接口函数:static UINT32 sensor_test()

函数功能:读取sensor驱动寄存器接口函数返回值

参数说明:输入Sensor id,区别多路sensor

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    sensor_test

 * Purpose:     Camera sensor test .We need someone to look at the monitor

 * Parameter:

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark:

 *

*/

static UINT32 sensor_test()

{

         UINT32    RetVal = SVC_OK;

         UINT8   RxData = 0;

    RetVal = LeoPard_Imx334_RegRead(0x3030, &RxData, 1, AMBA_I2C_CHANNEL0);

    AmbaPrint_PrintUInt5("===> sensor_0_test,read reg[0x3030]:%d", RxData, 0U, 0U, 0U, 0U);

 

         return RetVal;

}

2.2 HDMI测试模块

测试标准:外接HDMI显示器查看是否出图。

2-2 HDMI测试方法图

测试原理:

如上2-2 HDMI测试方法图示,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,CV2调用AMBA-HDMI API 得到HDMI状态值。

步骤3,CV2响应测试结果。

步骤4,上位机PC端解析响应命令并保存显示测试结果。

步骤5,测试标准参看HDMI显示器是否出图,则整个测试完成。

测试实现:

HDMI测试命令:

leopard HDMI 1 \r\n

$response HDMI 1 1$

功能:SENSOR出图,HDMI连接显示器显示图像。

接口函数:static UINT32 hdmi_test(UINT32 HdmiPort)

函数功能:获取视频表示码。

参数说明:输入UINT32 HdmiPort表示HDMI端口

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    hdmi_test

 * Purpose:    Leopard command test

 * Parameter:   UINT32 HdmiPort

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark: For this test case that We need someone to look at the monitor

 *

*/

static UINT32 hdmi_test(UINT32 HdmiPort)

{

         UINT32 RetVal = SVC_OK;

         UINT32 HotPlugDetect;

         UINT32 EdidDetect;

         AMBA_HDMI_SINK_INFO_s SinkInfo;

         RetVal = AmbaHDMI_TxGetSinkInfo(HdmiPort, &HotPlugDetect, &EdidDetect, &SinkInfo);

         if (0 == HotPlugDetect) {

                  RetVal = SVC_NG;

         }

         return RetVal;

}

2.3 SD测试模块

测试标准:SD卡是否可读写数据且比较数据是否相等。

2-3 SD测试方法图

测试原理:

如上2-2 SD测试方法图示,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,在SD创建和写入数据文件。

步骤3,读文件且比较数据大小。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

SD测试命令:

leopard sd 1\r\n

$response sd 1 1$

功能:读取SD卡内数据实现。

接口函数:static UINT32 SDCard_Test(void)

函数功能:向SD卡写文件,读文件比较读写内容一致性。

参数说明:输入无

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    SDCard_Test

 * Purpose:    SDCard Test case main function to leopard request command test case.

 * Parameter:

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark: support multi-channels

 *

*/

static UINT32 SDCard_Test(void)

{

         AMBA_FS_FILE *Fp = NULL;

         UINT32 RetVal = SVC_OK, NumSuccess;

         UINT8 SdData[20] = { 0 };

         /* 1 write */

         /* 1.1 create and open file.This function is from CV2 SDK. */

         RetVal = AmbaFS_FileOpen("c:\\leopard-sdcard-test.txt", "wb", &Fp);

         if (SVC_OK != RetVal) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaFS_FileOpen fail!!\n", 0U, 0U);

                  return SVC_NG;

         }

         /* 1.2 write some data to this file.This function is from CV2 SDK. */

         RetVal = AmbaFS_FileWrite("leopard sdcard test", 1U, 19U, Fp, &NumSuccess);

         if (SVC_OK != RetVal) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaFS_FileWrite fail!!\n", 0U, 0U);

                  return SVC_NG;

         }

         /* 1.2 close this file.This function is from CV2 SDK. */

         (void)AmbaFS_FileClose(Fp);

         /* 2 read */

         /* 2.1 open file.This function is from CV2 SDK. */

         RetVal = AmbaFS_FileOpen("c:\\leopard-sdcard-test.txt", "rb", &Fp);

         if (SVC_OK != RetVal) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaFS_FileOpen fail!!\n", 0U, 0U);

                  return SVC_NG;

         }

         /* 2.2 read data from this file.This function is from CV2 SDK. */

         RetVal = AmbaFS_FileRead(SdData, 1U, 19U, Fp, &NumSuccess);

         if (SVC_OK != RetVal) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaFS_FileRead fail!!\n", 0U, 0U);

                  return SVC_NG;

         }

         /* 2.2 close this file.This function is from CV2 SDK. */

         (void)AmbaFS_FileClose(Fp);

         /* 3 compare data */

         SvcLog_NG(SVC_LOG_CONTROL_TASK, SdData, 0U, 0U);

         if (0 == strcmp(SdData, "leopard sdcard test")) {

                  return      SVC_OK;

         }

         return      RetVal;

}

2.4 I2C测试模块

测试标准:读写FPGA寄存器,判断读写是否一致。

2-4 I2C测试方法图

测试原理:

该I2C接口测试主要有I2C0与I2C3接口测试。如上2-4 I2C测试方法图示,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,写FPGA寄存器数值。

步骤3,保存读寄存器数值并判断读写是否一致。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

I2C0测试命令:

leopard i2c 0 60 0\r\n

$response I2C 0 1$

功能:读取FPGA寄存器数值。

I2C3测试命令:

leopard i2c 3 61 0\r\n

$response I2C 3 1$

功能:读取FPGA寄存器数值。

接口函数:static UINT32 I2C_Test(UINT32 channel, UINT8 devAdd, UINT16 regAddr)

函数功能:由FPGA读写I2C通讯方式验证。

参数说明:输入UINT32 channel表示通道位,UINT8 devAdd为设备地址,UINT16 regAddr寄存器地址

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    I2C_Test

 * Purpose:    I2C Test case main function to leopard request command test case.

 * Parameter:  UINT32 channel,UINT8 devAdd,UINT16 regAddr

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark: support multi-channels

 *

*/

static UINT32 I2C_Test(UINT32 channel, UINT8 devAdd, UINT16 regAddr)

{

         UINT32    RetVal = SVC_OK;

    UINT8      value[2];

         UINT8      tx[4];

         if ((0 == channel && 0x3C == devAdd) || (3 == channel && 0x3D == devAdd)) {

                  tx[0] = 0x01;

                  tx[1] = 0x23;

        tx[2] = 0x01;

        tx[3] = 0x2B; 

        RetVal = FpgaRegRead(devAdd, regAddr, value, channel);

                  SvcLog_OK(SVC_LOG_CONTROL_TASK, "===> re[%d]: 0x%04x ", regAddr, (value[0] << 8) | value[1]);//value & 0xffff

        SvcLog_OK(SVC_LOG_CONTROL_TASK, "===> I2C channel %d read dev[%d] ", channel, devAdd);

       

                  if (RetVal != I2C_ERR_NONE) {

                          RetVal = SVC_NG;

                  }      

        else if (((value[0] << 8) | value[1]) == ((tx[0] << 8) | tx[1])){

            SvcLog_OK(SVC_LOG_CONTROL_TASK,"FpgaRegRead value is coincident\n", 0U,0U);

            RetVal = SVC_OK;

        }

       

        else if (((value[0] << 8) | value[1]) == ((tx[2] << 8) | tx[3])) {

            SvcLog_OK(SVC_LOG_CONTROL_TASK,"FpgaRegRead value is coincident\n", 0U,0U);

            RetVal = SVC_OK;

        }

           

        else {

            SvcLog_OK(SVC_LOG_CONTROL_TASK,"FpgaRegRead value is not coincident\n", 0U,0U);

            RetVal = SVC_NG;

        }

         }

         else {

                  SvcLog_OK(SVC_LOG_CONTROL_TASK,"I2C_Test input parameter error\n", 0U,0U);

         }

         return RetVal;

}

2.5 SPI测试模块

测试标准:SPI连接设备寄存器读写。

2-5 SPI测试方法图

测试原理:

SPI测试包含SPI0与SPI2(MTK,TPM)两个测试接口。如上图2-5 SPI测试方法图示流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,SPI读写MTK,TPM寄存器。

步骤3,保存寄存器返回值并判断结果。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:详细参考2.16章节TPM测试模块。

SPI0 测试命令:

leopard spi0 0

$response spi0 0 1$

功能实现:TPM测试模块做SPI0测试。

接口函数:static UINT32 Spi0_Test(void)

函数功能:读取TPM SPI寄存器信息。

参数说明:输入无

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    Spi0_Test

 * Purpose:    Spi0 Test case main function for leopard command test case and call AmbaGPIO_SetFuncGPO api parameters method

 * Parameter: 

 * Return:  SVC_OK:success  SVC_NG:failed

 * Remark:

 *

*/

static UINT32 Spi0_Test(void)

{

    UINT32 RetVal = SVC_OK;

    /* 調用TPM的測試函數 zwc*/

    RetVal = TPM_Test(0,1,0);

         return RetVal;

}

测试实现:

详细参见2.8章节WIFI测试模块。

SPI2 测试命令:

leopard spi 2

$response spi 2 1$

功能实现:WIFI测试模块做SPI2测试。

接口函数:static UINT32 Spi2_Test(void)

函数功能:读取MTK-WIFI网络接口配置信息。

参数说明:输入无

返回值:成功1,失败0

/*

 * Function Name:    Spi2_Test

 * Purpose:          Spi2 Test case for MTK case

 * Parameter:       

 * Return:           SVC_OK:success  SVC_NG:failed

 * Remark:           suport multi-channels

 *

*/

static UINT32 Spi2_Test(void)

{

    /* 調用 mtk ifconfig zwc */

    UINT32 RetVal = SVC_OK;

         AmbaPrint_PrintStr5("====leopard_get_wifi!!! ====\n", NULL, NULL, NULL, NULL, NULL);

         RetVal = mtk_ifconfig();

         if (0 == RetVal) {

                  RetVal = SVC_OK;

         }

         else {

                  RetVal = SVC_NG;

         }

         delay_ms(3 * 1000);

         return RetVal;

}

2.6 FLASH模块测试

测试标准:调用AMBA-API 读取Nand Flash ID,比较ID是否正确。

2-6 FLASH测试方法图

测试原理:

如上图2-6 FLASH 测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,读取Nand Flash ID。

步骤3,解析Nand Flash ID。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

程序实现:

Flash 测试命令:

leopard nand 0\r\n

$response nand 1 1$

功能:读取Nand ID并校验正确性实现。

接口函数:static UINT32 Nand_Test(void)

函数功能:读取Nand Flash ID,比较ID是否正确。

参数说明:

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    Nand_Test

 * Purpose:    Read and compare NAND_ID for nand flash test case

 * Parameter: 

 * Return:  SVC_OK:success  SVC_NG:failed

 * Remark:

*/

static UINT32 Nand_Test(void)

{

         UINT32    RetVal = SVC_OK;

    UINT8 nand_id[3] = {0};

         memset(nand_id,0,3);

         AmbaNAND_ReadID(0xff, nand_id, 2);

        

         if (RetVal != 0) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "===> AmbaNAND_ReadID failed", 0U, 0U);

                  return SVC_NG;

         }

         if(nand_id[0] != 0x00 && nand_id[1] != 0xDC)

                  RetVal = SVC_NG;

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "Nand ID = 0x%02x%02x", nand_id[0], nand_id[1]);  

         return      RetVal;

}

2.7 UART测试模块

测试标准:UART接口写入数据是否成功。

2-7 UART测试方法图

测试原理:

COROS-SOLO-MB共五个UART接口,其中UART与UART0用于RTOS和LINUX通讯接口,UART1 (未使能),UART2用于MTK固件烧录,UART3 (未使能)。UART2测试在WIFI测试项的MTK固件烧录时,即该功能测试完毕。

如上图2-7 UART测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,调用AMBA API写入Uart Data。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

2.8 WIFI测试模块

测试标准:获取MAC,IP,Gateway等网络接口信息。

2-8 WIFI测试方法图

测试原理:

如上图2-8 WIFI测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,调用MTK SDK 连接WIFI ,取得 MAC与IP Data。

步骤3,返回MAC与IP。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

WIFI设置命令:

leopard setwifi ssid passwd ntp\r\n

$reponse setwifi 1$

功能:设置WIFI AP用户名,密码,NTP时间服务器信息。

接口函数:static UINT32 leopard_set_wifi(UINT8 *SSID, UINT8 *Password, UINT8 *pNTPSServer)

函数功能:设置WIFI配置信息。

参数说明:UINT8 *SSID表示AP用户名, UINT8 *Password表示AP密码, UINT8 *pNTPSServer表示NTP时间服务器。

返回值:成功1,失败0

WIFI 获取命令:

leopard getwifi 0\r\n

$response getwifi 0 1$

功能:获取网络接口信息IP,子网掩码,网关,MAC地址。

接口函数:static UINT32 leopard_get_wifi(void)

函数功能:获取WIFI网络接口信息。

参数说明: 输入参数无

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    leopard_set_wifi

 * Purpose:    To set wifi parameters of ssid, passwd, ntpserver

 * Parameter:   UINT8 *SSID, UINT8 *Password, UINT8 *pNTPSServer

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark:

 *

*/

static UINT32 leopard_set_wifi(UINT8 *SSID, UINT8 *Password, UINT8 *pNTPSServer)

{

         UINT32 RetVal = SVC_OK;

         AmbaPrint_PrintStr5("===leopard_set_wifi!!! ===\n", NULL, NULL, NULL, NULL, NULL);

         RetVal = mtk_init();

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "mtk_init()---Ret Val:%d\n", RetVal, 0);

         delay_ms(2 * 1000);

         RetVal = CoROSWiFi_SetParams(SSID, Password, pNTPSServer);

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "CoROSWiFi_SetParams---Ret Val:%d\n", RetVal, 0);

         delay_ms(1000);

         if (0 == RetVal) {

                  RetVal = SVC_OK;

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "RetVal:%d\n", RetVal, 0);

         } else {

                  RetVal = SVC_NG;

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "RetVal:%d\n", RetVal, 0);

         }

         return RetVal;

}

/*

 * Function Name:    leopard_get_wifi

 * Purpose:    To get wifi interface informations

 * Parameter:

 * Return:

 *   SVC_OK : success

 *   SVC_NF : failed

 * Remark:

 *

*/

static UINT32 leopard_get_wifi(void)

{

         UINT32 RetVal = SVC_OK;

         AmbaPrint_PrintStr5("=== leopard_get_wifi!!! ===\n", NULL, NULL, NULL, NULL, NULL);

         RetVal = mtk_ifconfig();

    RetVal = CoROSWiFi_GetRSSI();

         delay_ms(3 * 1000);   

    /* get  rssi */  

    //RetVal = CoROSWiFi_GetRSSI();

    if (0 == RetVal) {

                  RetVal = SVC_OK;

         }

         else {

                  RetVal = SVC_NG;

         }

         return RetVal;

}

2.9 Audio测试模块

测试标准:是否听到测试音频文件播放声音为准。

2-9 Audio测试方法图

测试原理:

如上图2-9 Audio 测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,调用AMBA audio API接口函数播放pcm文件。

步骤3,AMBA API播放音频测试文件。

步骤4,侦听测试文件有声音输出。

步骤5,CV2下位机响应测试结果并反馈至上位机。

步骤6,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

AUDIO 测试命令:

leopard audio 3\r\n

$response audio 3 1$

功能:读取AUDIO声卡数据实现。

接口函数:static UINT32 AUDIO_Test(UINT32 channel)

函数功能:设置声卡寄存器,且获取音频流播放。

参数说明:UINT32 channel表示声卡通道。

返回值:成功1,失败0

程序源码:

/*

* Function Name:   AUDIO_Test

* Purpose:    AUDIO test case to leopard command test case

* Parameter:  UINT32 channel

* Return:  SVC_OK:success  SVC_NG:failed

* Remark: i2c channel (0-3)

*/

static UINT32 AUDIO_Test(UINT32 channel)

{

         UINT32 ret = SVC_OK;

         UINT32  audio_type = SVC_AUDIO_TYPE_PCM;

         UINT32 play_time = 1000;

        

         if (CheckAudioFile(audio_type) == SVC_NG) {

                  return SVC_NG;

         }

        

    ret |= MAX9744_RegWrite_8(channel, 0x96, 0x20); 

    ret |= MAX9744_RegWrite_8(channel, 0x96, 0x41);

   

         if (ret == SVC_OK) {

                  /* start play media file. This file in SDCard ,and this name is sample.pcm.This function is from CV2 SDK.*/

                  SvcADecFlow_Start(audio_type);

                  delay_ms(play_time);

                  /* stop play. This function is from CV2 SDK.*/

                  SvcADecFlow_Stop();

         }

         return ret;

}

2.10 GPIO测试模块

测试标准:获取FPGA或MCU 的GPIO的IO Timing

2-10 GPIO测试方法图

测试原理:

如上图2-10 GPIO测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,调用FPGA或MCU设置GPIO Timing IO pinX。

步骤3,设置其他IO Timing as PINX。

步骤4,得到一个比较的IO Timing。

步骤5,CV2下位机响应测试结果并反馈至上位机。

步骤6,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

PSOC 测试命令:

leopard psocgpio 1\r\n

$response psocgpio 1 1$

功能:取得PSOC GPIO寄存器高低电平状态。

接口函数:Psoc_gpio_test

函数功能:取得PSOC GPIO寄存器高低电平状态。

参数说明:

返回值:成功1,失败0

程序源码:

/*

* Function Name:   Psoc_test

* Purpose:    PSOC-MCU GPIO test

* Parameter:  NULL

* Return:  SVC_OK:success  SVC_NG:failed

* Remark:

*/

static UINT32 Psoc_gpio_test(void)

{

    UINT32 RetVal = SVC_OK;

    UINT32 RetVal_h;

    UINT32 RetVal_l;

   

         RetVal_h = AmbaGPIO_SetFuncGPO(PSOC_GPIO_43, AMBA_GPIO_LEVEL_HIGH);

         delay_ms(2);

         RetVal_h = Read_IO(PSOC_GPIO_158);

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "RetVal = 0x%08x \n", RetVal_h, 0);

   

         RetVal_l = AmbaGPIO_SetFuncGPO(PSOC_GPIO_43, AMBA_GPIO_LEVEL_LOW);

         delay_ms(2);

         RetVal_l = Read_IO(PSOC_GPIO_158);

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "RetVal = 0x%08x \n", RetVal_l, 0);

         if (0 == RetVal_l && 1 == RetVal_h) {

                  AmbaPrint_PrintUInt5("PSOC_GPIO_158 status is equal!!!\n", 0, 0, 0, 0, 0);

                  RetVal = SVC_OK;

         }

    else {

                  AmbaPrint_PrintUInt5("Read PSOC_GPIO_158 and PSOC_GPIO_43 status Failed!!!\n", 0, 0, 0, 0, 0);

                  RetVal = SVC_NG;

         }

         return RetVal;

}

2.11 ALS 测试模块

测试标准:取得光感寄存器与光感强度值。

2-11 ALS测试方法图

测试原理:

如上图2-11 ALS测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,读取Als_Opt3001寄存器。

步骤3,取得寄存器返回值与光感强度LUX值。

步骤4,CV2下位机响应测试结果并反馈至上位机。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现

ALS测试命令:

leopard als 0\r\n

$response als 1$

功能:读取SENSOR光感器寄存器数据。

接口函数:static UINT32 Als_Opt3001_test(UINT32 Channel)

函数功能:读取光感Opt3001寄存器状态值。

参数说明:输入UINT32 Channel表示通道数。

返回值:成功1,失败0

程序源码:

/*

* Function Name:   Als_Opt3001_test

* Purpose:    Read Als Opt3001 Register for test case

* Parameter:  UINT32 Channel

* Return:  SVC_OK:success  SVC_NG:failed

* Remark:  support multi-channels

*/

static UINT32 Als_Opt3001_test(UINT32 Channel)

{

         UINT32 Retval = SVC_OK;

         UINT16 Data = 0;

    double LUX;

   

    /* write config reg 0x01 */

    Data = 0xCE10;

    Als_Opt3001_RegisterWrite(0x45 << 1, 0x01, Data, Channel);

    /* 1 read 0x00 val ,16bit ;read 0x01 val*/

         Retval = Als_Opt3001_RegisterRead(0x45 << 1, 0x00, &Data, Channel);

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "> Als_Opt3001_RegisterRead ===> Data: %d ===> Retval:%d", Data, Retval);

   

    /* 2 convert and get ALS value */

    if (0 == Retval) {

        LUX = Als_Opt3001_Value(Data);

        SvcLog_NG(SVC_LOG_CONTROL_TASK, ">>> LUX : %d\n", LUX, 0U);

    }

    else {

        AmbaPrint_PrintStr5("ALS not work!!!\n", NULL, NULL, NULL, NULL, NULL);

    }  

         return  Retval;

}

2.12 LED测试模块

测试标准:设置LED GPIO高低电平状态值。

2-12 LED测试方法图

测试原理:

LED测试主要包括CPU LED,MCU LED,NAND LED,BOARD LED,CAMERA BOARD LED。

如上图2-12 LED测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,获取LED GPIO状态值。

步骤3,取得GPIO状态返回值。

步骤4,CV2下位机响应测试结果并反馈至上位机,且有测试人员目测LED闪灯状态。

步骤5,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

LED测试命令:

leopard led 1\r\n

$response led 1 1 $

功能:获取MCU控制的主板LED GPIO工作状态。

接口函数:static UINT32 Led_test(void)

函数功能:主板Led测试,改变GPIO状态值。

参数说明:输入无

返回值:成功1,失败0

程序源码:

/*

* Function Name:   Led_test

* Purpose:    LED CONTROL TEST WHICH INCLUDE CPU LED,MCU LED,NAND LED,BOARD LED

* Parameter:  NULL

* Return:  SVC_OK:success  SVC_NG:failed

* Remark:

*/

static UINT32  Led_test(void)

{

         UINT32    RetVal = SVC_OK;

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS LOW!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_LOW);

         delay_ms(2);

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS HIGH!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_HIGH);

         delay_ms(2);

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS LOW!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_LOW);

         delay_ms(2);

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS HIGH!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_HIGH);

         delay_ms(2);

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS LOW!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_LOW);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_LOW);

         delay_ms(2);

         AmbaPrint_PrintUInt5("Setting LED GPIO STATUS IS HIGH!!!\n", 0, 0, 0, 0, 0);

         RetVal = AmbaGPIO_SetFuncGPO(CPU_STAT_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(NAND_CE_LED, AMBA_GPIO_LEVEL_HIGH);

         RetVal = AmbaGPIO_SetFuncGPO(CAM_D26_LED, AMBA_GPIO_LEVEL_HIGH);

         return RetVal;

}

2.13 RTC 测试模块

测试标准:获取系统当前时间差值验证RTC工作正常。

2-13 RTC测试方法图

测试原理:

如上图2-13 RTC测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,取得时钟差值。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

RTC 测试命令:

leopard rtc 1\r\n

$response rtc 1 1$

功能:获取系统时间信息。

接口函数:static UINT32 RTC_Test(void)

函数功能:获取系统时钟。

参数说明:输入无。

返回值:成功1,失败0

程序源码:

/*

* Function Name:   RTC_Test

* Purpose:    RTC Test case main function to leopard command test case

* Parameter:  NULL

* Return:  SVC_OK:success  SVC_NG:failed

* Remark:  support multi-channels

*/

static UINT32 RTC_Test(void)

{

         //AmbaRTC_Config

    UINT32 Sec1, Sec2;

         UINT32 ret = SVC_OK;

         AMBA_RTC_DATE_TIME_s pCurrTime;

         pCurrTime.Year = 1999;

         pCurrTime.Month = 8;

         pCurrTime.Day = 01;

         pCurrTime.WeekDay = 01;

         pCurrTime.Hour = 7;

         pCurrTime.Minute = 3;

         pCurrTime.Second = 1;

         (void)AmbaRTC_Config(NULL, NULL, NULL, NULL);

         AmbaRTC_SetSysTime(&pCurrTime);

         ret = AmbaRTC_GetSysTime(&pCurrTime);

         if (0U == ret) {

                  AmbaPrint_PrintStr5("AmbaRTC_GetSysTime return successfully!!!", NULL, NULL, NULL, NULL, NULL);

         }

         else if (RTC_ERR_0000 == ret) {

                  AmbaPrint_PrintStr5("AmbaRTC_GetSysTime return Invalid argument!!!", NULL, NULL, NULL, NULL, NULL);

         }

         else if (RTC_ERR_0002 == ret) {

                  AmbaPrint_PrintStr5("AmbaRTC_GetSysTime return User-define error reported by Callback!!!", NULL, NULL, NULL, NULL, NULL);

         }

         else {

                  AmbaPrint_PrintStr5("AmbaRTC_GetSysTime return Exception!!!", NULL, NULL, NULL, NULL, NULL);

         }

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaRTC_GetSysTime --- pCurrTime-Year:%d\n,pCurrTime-Month:%d\n", pCurrTime.Year, pCurrTime.Month);

    RTC_GetSystemTime(&Sec1);

    SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaRTC_GetSysTime --- Before -- pSysTime:%d\n", Sec1, 0U);

    delay_ms(1000);

    RTC_GetSystemTime(&Sec2);

    SvcLog_NG(SVC_LOG_CONTROL_TASK, "AmbaRTC_GetSysTime --- After -- pSysTime:%d\n",Sec2, 0U);   

   

    if (Sec1 != Sec2) {

        ret = SVC_OK;

        AmbaPrint_PrintStr5("AmbaRTC Has Button Cell!!!", NULL, NULL, NULL, NULL, NULL);

    }

    else {

        ret = SVC_NG;

        AmbaPrint_PrintStr5("AmbaRTC Has not Button Cell!!!", NULL, NULL, NULL, NULL, NULL);

    }   

         return ret;

}

2.14 PSOC测试模块

测试验证:PSOC电路状态控制。

2-14 PSOC测试方法图

测试原理:

如上图2-14 PSOC 测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,读取MCU控制PSOC-I2C寄存器数值。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

PSOCI2C 测试命令:

leopard psoci2c 18\r\n

$response psoci2c 18 1$

功能:读PSOC-I2C data且获取状态值。

接口函数:static UINT32 get_psociic(UINT8 devAdd)

函数功能: 读取MCU控制PSOC-I2C data与保存状态值。

参数说明:输入参数无

返回值:成功1,失败0

程序源码:

/*

* Function Name:   get_psociic

* Purpose:    Get PSOCIIC date and Status value from MCU .

* Parameter:  UINT8 devAdd

* Return:  SVC_OK:success  SVC_NG:failed

* Remark:

*/

static UINT32 get_psociic(UINT8 devAdd)

{

         UINT32    RetVal;

         UINT16  Getval;

    UINT16  Get_status;

   

         /* Get psociic date */

         RetVal = PSOCIIC_Read(devAdd, &Getval);

/* read psociic Status */

    Get_status = Getval & 00000001;

   

    SvcLog_NG(SVC_LOG_CONTROL_TASK, "PSOCIIC_Read Getvalue: 0x%04x\n", Getval, 0U);

    SvcLog_NG(SVC_LOG_CONTROL_TASK, "PSOCIIC_Read Get_status: 0x%04x\n", Get_status, 0U);

         if (RetVal != I2C_ERR_NONE) {

                  AmbaPrint_PrintStr5("get_psociic failed!!!!!", NULL, NULL, NULL, NULL, NULL);

         }

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "get_psociic value: 0x%04x\n", Getval, 0U);

    

    if (0 == Get_status) {

        RetVal = SVC_NG;

    }   

    else if (1 == Get_status) {

        RetVal = SVC_OK;

    }   

    else {

        AmbaPrint_PrintStr5("PSOCIIC_Read exception!!!!!", NULL, NULL, NULL, NULL, NULL);

    }

         return      RetVal;

}

2.15 TPM 测试模块

测试标准:读取SLB9670 TPM 寄存器数据。

2-15 TPM测试方法图

测试原理:

如上图2-15 TPM测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,SLB9670 TPM寄存器VID/PID。

步骤3, CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试方法:

TPM测试命令:

leopard tpm 0 1 0\r\n

$ response tpm 0 1$

功能:读取SLB9670加密芯片寄存器vid_rid。

接口函数:static UINT32 TPM_Test(void)

函数功能:读取SLB9670加密芯片寄存器vid_rid。

参数说明:输入参数无

返回值:成功1,失败0

程序源码:

/*

* Function Name:   TPM_Test

* Purpose:         SLB9670 TPM TEST by Reading register of vid_rid

* Parameter:       NULL

* Return:          SVC_OK:success  SVC_NG:failed

* Remark:          support multi-channels

*/

static UINT32 TPM_Test(UINT32 channel,UINT32 spi_mode,UINT32 lsb_msb)

{

         UINT32 ret = SVC_OK;

         UINT8 RxData[4] = {0};

    UINT16 vid_rid = 0;

    SvcLog_NG(SVC_LOG_CONTROL_TASK, "channel=%d\t",channel,0U);

    SpiConfig_SLB9670.ClkMode = spi_mode;

         SpiConfig_SLB9670.FrameBitOrder = lsb_msb;  

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "SpiConfig_SLB9670.ClkMode:%d\t,SpiConfig_SLB9670.FrameBitOrder:%d",SpiConfig_SLB9670.ClkMode,SpiConfig_SLB9670.FrameBitOrder);

         /* 0x80:read  , 0x00:write  */

         /* read data */

         SLB9670_RegisterRead(channel, TPM_RID(0), RxData, 1);

         SLB9670_RegisterRead(channel, TPM_DID_VID(0), RxData, 4);   

    vid_rid = ((RxData[0]<<8) | RxData[1]) & 0xffff;

         if (0 != vid_rid) {

                  ret = SVC_OK;

         }

         else {

                  ret = SVC_NG;

         }

         return ret;

}

2.16 TMP测试模块

测试标准:获取温度传感器I2C寄存器值与转换的温度值。

2-16 TMP测试方法图

测试原理:

TMP测试包括Sensor温度传感器与CV2主板温度传感器两部分。如上图2-16 TMP测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,读取TMP102寄存器值与温度值。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

TMP SEN0测试命令:

leopard tmp 1 1\r\n

$response tpm 1 1$

功能:获取温度传感器sensor0温度。

TMP SEN1测试命令:

leopard tmp 1 3\r\n

$response tpm 1 1$

功能:获取温度传感器sensor1温度。

接口函数:static UINT32 CapTmp_Test(UINT32 ispos, UINT32 Channel)

函数功能:UINT32 ispos 温度转换标值,UINT32 Channel温感ID。

参数说明:输入参数无

返回值:成功1,失败0

程序源码:

/*

* Function Name:   CapTmp_Test

* Purpose:    read TMP102's register data

* Parameter:  UINT32 ispos, UINT32 Channel

* Return:  SVC_OK: success   SVC_NG: failed

* Remark:

  add: 1001 000X

  reg: 0000 0000    temperature reg 16bit(all)

  reg: 0000 0001    configure reg

  reg: 0000 0010    T Low reg

  reg: 0000 0011    T Hig reg

*/

static UINT32 CapTmp_Test(UINT32 ispos, UINT32 Channel)

{

         UINT32 retval = SVC_OK;

         UINT16 tmp = 0;

         UINT16 Data = 0;

    /* read configure register */

         retval = TMP102_RegisterRead(0x90, 0x01, &Data, Channel);

    Data = 0;

         /* read  temperature register */

         retval = TMP102_RegisterRead(0x90, 0x00, &Data, Channel);

   

         /* convert tmp */

         ispos = Data >> 15;

         Data = (Data >> 4) & 0x7ff;

         if (0 == ispos) {

                  tmp = Data * 0.0625;

         }

         else {

                  tmp = 0 - (Data * 0.0625);

         }

         SvcLog_NG(SVC_LOG_CONTROL_TASK, "TMP102_RegisterRead ===> Data: %d", tmp, 0);

         if (0 == tmp) {

                  SvcLog_NG(SVC_LOG_CONTROL_TASK, "TMP102_RegisterRead ===> Data: %d", tmp, 0);

                  retval = SVC_NG;

                  return retval;

         }

         return retval;

}

2.17 PWR_SW测试模块

测试标准:电源开关SW22的GPIO通断状态。

2-17 PWR_SW测试方法图

测试原理:

如上图2-17 PWR_SW测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,由MCU控制PSOC-GPIO通断(LED-D25)状态。

步骤3,CV2下位机响应测试结果并反馈至上位机,提示测试人员按下SW22,能看到D25亮灯。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试方法:

Power switch测试命令:

leopard pwrsw 1 \r\n

$response pwrsw 1 1$

功能: 电源开关按键测试。

接口函数:static UINT32 Pwr_sw_test(void)

函数功能:SW22电源开关按键测试。

参数说明:无。

返回值:成功1,失败0

程序源码:

/*

* Function Name:   Pwr_sw_test

* Purpose:         Power switch control test by MCU-PSOC-GPIO

* Parameter:       NULL

* Return:          SVC_OK:success  SVC_NG:failed

* Remark:

*/

static UINT32 Pwr_sw_test (void)

{

         UINT32 RetVal = SVC_OK;

         SvcLog_NG(SVC_LOG_CONTROL_TASK, " Power switch test, Please press down SW22,then look at D25!!!\n", 0, 0);

         return RetVal;

}

2.18 PWR_WKP测试模块

测试标准:主板电源唤醒电路SW20开关键功能测试。

2-18 PWR_WKP测试方法图

测试原理:

如上图2-18 PWR_WKP测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,调用AMBA API 获取PWR_WKP状态。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

Power Wakeup测试命令:

leopard pwrwkup 1\r\n

$response pwrwkup 1 1$

功能:主板电源唤醒电路测试。

接口函数:static UINT32 Power_wakeup_Test(void)

函数功能:电源唤醒测试。

参数说明:输入无。

返回值:成功1,失败0

程序源码:

/*

 * Function Name:   Power_wakeup_Test

 * Purpose:    Power wakeup switch control test

 * Parameter:  NULL

 * Return:  SVC_OK:success  SVC_NG:failed

 * Remark:

 *  AmbaSYS_GetWakeUpInfo()

 *  System wakeup information

 *   0:No power-up sequence involved

 *   1:Wake-Up by RTC alarm

 *   2:Wake-Up by PWC_WKUP pin

 *   3:Wake-Up by PWC_WKUP1 pin

 *   4:Wake-Up by PWC_WKUP2 pin

 *   5:Wake-Up by PWC_WKUP3 pin

 */

static UINT32  Power_wakeup_Test(void)

{

         UINT32 val_tx = SVC_OK;

         UINT32 pWakeUpInfo;

         val_tx = AmbaSYS_GetWakeUpInfo(&pWakeUpInfo);

SvcLog_NG(SVC_LOG_CONTROL_TASK, "===Power wakeup test, Please press down SW20,then implement test command !!!===\n", 0, 0);

         AmbaPrint_PrintUInt5("AmbaSYS_GetWakeUpInfo()---AmbaSYS_GetWakeUpInfo(),pWakeUpInfo: %d\n!!!\n", pWakeUpInfo, 0, 0, 0, 0);

         AmbaPrint_PrintUInt5("AmbaSYS_GetWakeUpInfo()---AmbaSYS_GetWakeUpInfo(),val_tx: %d\n!!!\n", val_tx, 0, 0, 0, 0);   

         if ((0 == val_tx) && (3 == pWakeUpInfo)) {

                  val_tx = SVC_OK;

         }

         else {

                  val_tx = SVC_NG;

         }

         return val_tx;

}

2.19 LPDDR测试模块

测试标准:写入与读取内存数据且比较是否一致。

2-19 LPDDR测试方法图

测试原理:

如上图2-19LPDDR测试方法图示包含主要流程,主要流程包含以下步骤。

步骤1,上位机PC测试工具下发串口测试指令于CV2下位机。

步骤2,分配一个内存buffer,写入与读取buffer数据且比较一致性。

步骤3,CV2下位机响应测试结果并反馈至上位机。

步骤4,上位机PC端解析响应命令并保存显示测试结果,则整个测试完成。

测试实现:

DDR测试命令:

请求:leopard ddr 0 300\r\n

响应:$response ddr 0 1$

功能:读取指定内存数据实现。

接口函数:static UINT32 LPDDR_Test(UINT32 read_or_write, UINT32 count)

函数功能:分配一段内存,读取内存。

参数说明:输入read_or_write内存分配开始位,count分配内存大小。

返回值:成功1,失败0

程序源码:

/*

 * Function Name:    LPDDR_Test

 * Purpose:    Spi Test case main function for leopard command test case

 * Parameter:  UINT32 read_or_write,UINT32 count

 *           read_or_write : read or write flag  count              : write or read data size (MB).

 * Return:  SVC_OK:success  SVC_NG:failed

 * Remark:   LPDDR test The application layer can get read and write time.

 *

*/

static UINT32 LPDDR_Test(UINT32 read_write, UINT32 count)

{

         UINT32    RetVal = SVC_OK;

         UINT8      lp_str[1024] = { 0 };

         UINT8     read_temp;

         UINT32    i = 0, j = 0;

         UINT32   size = count * 1024 * 1024;

        

    /* write memory*/

    if (0 == read_write) {       

        for (i = 0; i < size; i++) {

        for (j = 0; j < 1024; j++) {

            lp_str[j] = 0xff;

           }

              }

else {

        /* read memory */

        for (i = 0; i < size; i++) {

        for (j = 0; j < 1024; j++) {

            read_temp = lp_str[j];

            if(0xff != read_temp)

                RetVal = SVC_NG;

        }

    }

  }

         return RetVal;

}

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿达前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值