From 1e05bc230017ca09d18bd67d7ebc45fdcb6a1a2e Mon Sep 17 00:00:00 2001 From: peng1 chen Date: Thu, 14 Jan 2021 15:36:00 +0800 Subject: [PATCH] i2c_test: add a testcase to test i2c api for microchip board test i2c api on microchip mec15xxevb_assy6853 board by writing and reading data with nxp pca95xx device on board. Signed-off-by: peng1 chen --- .../mec15xxevb_assy6853.dts | 2 +- .../i2c_api/CMakeLists.txt | 8 +++ .../mec15xxevb_assy6853/i2c_api/README.txt | 23 ++++++ .../mec15xxevb_assy6853/i2c_api/prj.conf | 2 + .../mec15xxevb_assy6853/i2c_api/src/main.c | 71 +++++++++++++++++++ .../mec15xxevb_assy6853/i2c_api/testcase.yaml | 6 ++ 6 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt create mode 100644 tests/boards/mec15xxevb_assy6853/i2c_api/README.txt create mode 100644 tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf create mode 100644 tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c create mode 100644 tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml diff --git a/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts b/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts index 1f83562f622..8db6cdfd179 100644 --- a/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts +++ b/boards/arm/mec15xxevb_assy6853/mec15xxevb_assy6853.dts @@ -93,7 +93,7 @@ label = "GPIO_P0"; /* Depends on JP53 for device address. - * Pin 1-2 = A2, pin 3-4 = A1, pin 5-6 = A0. + * Pin 1-2 = A0, pin 3-4 = A1, pin 5-6 = A2. * Address is: 0100b. * * Default has pin 1-2 on JP53 connected, diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt b/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt new file mode 100644 index 00000000000..db76b6e98e0 --- /dev/null +++ b/tests/boards/mec15xxevb_assy6853/i2c_api/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.13.1) +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(i2c_api) + +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt b/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt new file mode 100644 index 00000000000..72edd861d4a --- /dev/null +++ b/tests/boards/mec15xxevb_assy6853/i2c_api/README.txt @@ -0,0 +1,23 @@ +I2C Test For Microchip board +############################ + +This application test is used to test the I2C driver on Microchip +mec15xxevb_assy6853 board. + + +Board Hardware Setup +#################### + +As the I2C slave device NXP pca95xx on mec15xxevb_assy6853 is connected +to I2C00 port, however, I2C00 port is shared with UART2 RS232 to TTL +converter used to catch serial log, so it's not possible to use UART2 +and I2C00 port simultaneously. +We need to change to use I2C01 port by making some jumpers setting as below: + + * JP99 1-2 Connected Connect I2C01_SDA from CPU to header J5 + * JP99 13-14 Connected Connect I2C01_SCL from CPU to header J5 + * JP25 21-22 Connected External pull-up for I2C01_SDA + * JP25 23-24 Connected External pull-up for I2C01_SCL + * + * JP44.1 J5.1 Connected Connect NXP PCA95xx to I2C01 + * JP44.3 J5.3 Connected Connect NXP PCA95xx to I2C01 diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf b/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf new file mode 100644 index 00000000000..4b19609ecfb --- /dev/null +++ b/tests/boards/mec15xxevb_assy6853/i2c_api/prj.conf @@ -0,0 +1,2 @@ +CONFIG_I2C=y +CONFIG_ZTEST=y diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c b/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c new file mode 100644 index 00000000000..344394d62b3 --- /dev/null +++ b/tests/boards/mec15xxevb_assy6853/i2c_api/src/main.c @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#define I2C_DEV_NAME DT_LABEL(DT_ALIAS(i2c1)) + +/* command to configure port direction of NXP PCA95xx */ +#define REG_CONF_PORT0 0x06U + +/* test data used to write into registers */ +uint8_t test_data[2] = {0xAA, 0xAA}; + +/** + * @brief Test i2c api by communicating with pca95xx + * @details + * - get i2c mainline device + * - write data into pca95xx + * - read data from pca95xx + * - check read data whether correct + */ +void test_i2c_pca95xx(void) +{ + int32_t ret; + uint8_t datas[3]; + uint32_t i2c_cfg = I2C_SPEED_SET(I2C_SPEED_STANDARD) | I2C_MODE_MASTER; + + /* get i2c device */ + const struct device *i2c_dev = device_get_binding(I2C_DEV_NAME); + + zassert_true(i2c_dev, "Cannot get i2c device"); + + /* configure i2c device */ + ret = i2c_configure(i2c_dev, i2c_cfg); + zassert_true(ret == 0, "Failed to configure i2c device"); + + /* write configuration to register 6 and 7 of PCA95XX*/ + (void)memset(datas, 0, 3); + datas[0] = REG_CONF_PORT0; + datas[1] = test_data[0]; + datas[2] = test_data[1]; + ret = i2c_write(i2c_dev, datas, 3, 0x26); + zassert_true(ret == 0, "Failed to write data to i2c device"); + + /* read configuration from register 6 and 7 */ + (void)memset(datas, 0, 3); + datas[0] = REG_CONF_PORT0; + ret = i2c_write(i2c_dev, datas, 1, 0x26); + zassert_true(ret == 0, "Failed to write data to i2c device"); + + (void)memset(datas, 0, 3); + ret = i2c_read(i2c_dev, datas, 2, 0x26); + zassert_true(ret == 0, "Failed to read data from i2c device"); + + /* check read data whether correct */ + ret = memcmp(datas, test_data, 2); + zassert_true(ret == 0, "Read data is different to write data"); +} + +void test_main(void) +{ + ztest_test_suite(i2c_test, + ztest_unit_test(test_i2c_pca95xx) + ); + ztest_run_test_suite(i2c_test); +} diff --git a/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml b/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml new file mode 100644 index 00000000000..03726ebc834 --- /dev/null +++ b/tests/boards/mec15xxevb_assy6853/i2c_api/testcase.yaml @@ -0,0 +1,6 @@ +tests: + boards.mec15xxevb_assy6853.i2c: + depends_on: i2c + tags: drivers i2c + filter: dt_compat_enabled("nxp,pca95xx") + platform_allow: mec15xxevb_assy6853