Blog
Technology Sharing
I3C Host adapter Pro+ (9)hits:6


Easyi3C is a leading supplier of embedded system tools that simplify the development and debugging of various communication protocols. The company offers a range of products designed to help engineers and developers use I3C/I2C , USB and MIPI, JEDEC, MCTP and other protocols more efficiently.


9. Automated Testing (3):

The following shows more complex automated test code for engineers to refer to and build more complex test code.

Because our Pro+ contains two I3C controllers, we can use the APIs of the two controllers together to complete more complex functions. For example, we can use the ez_debug_i3c_write() of the debug controller with adjusted parameters to perform a write operation, and then use the ez_i3c_write_read() of the main controller to read back the data. This can reversely verify whether the adjusted parameters affect the reading and writing of the bus:


# ==========================================================================
# --------------------------------------------------------------------------
# Copyright © 2025 by Easyi3C, Inc.
# All rights reserved.
# ==========================================================================

import sys

from ezi3c.api import *
from ezi3c.api_debug import *

# Notes: You must make modifications based on your actual salve address
slave_addr = 0x70

ez = ez_open()
if not ez:
    print("Cannot open Adapter")
    sys.exit(-1)

try:
    version = ez_get_version(ez)
    print("version:{:08X}".format(version))

    clk = ez_get_bus_clk_freq(ez)
    print("POR Default Clk Freq(100, 1000): {}".format(clk))
    clk = ez_set_bus_clk_freq(ez, 1000, 4000)
    print("Cur Clk Freq: {}".format(clk))

    duty = ez_get_bus_clk_duty(ez)
    print("POR Default Clk Duty(50, 50): {}".format(duty))
    duty = ez_set_bus_clk_duty(ez, 50, 40)
    print("Cur Clk Duty: {}".format(duty))

    ret = ez_set_io_voltage(ez, 1.0)
    assert ret == 0

    print("> RSTDAA ...")
    ez_ccc_rstdaa(ez)

    print("> i2c debug change timing parameter ...")
    ret = ez_debug_get_bus_od_clk_freq(ez)
    print("> i2c Default OD freq: {}".format(ret))
    ez_debug_set_bus_od_clk_freq(ez, clk_khz=800, clk_duty=50, tSU_DAT=180)
    ret = ez_debug_get_bus_od_clk_freq(ez)
    print("> i2c Cur OD freq: {}".format(ret))

    ret = ez_debug_get_od_ac_characteristics(ez, "tSU_STA")
    print("Default tSU_STA: {}ns".format(ret))
    ez_debug_set_od_ac_characteristics(ez, "tSU_STA", 1000)
    ret = ez_debug_get_od_ac_characteristics(ez, "tSU_STA")
    print("Cur tSU_STA: {}ns".format(ret))

    print("> i2c debug write & read ...")
    ret = ez_debug_i2c_write(ez, slave_addr, [0x40, 0xa1, 0xa2])
    assert ret == E_OK
    ret, data = ez_debug_i2c_write_read(ez, slave_addr, 0x40, 2)
    assert ret == 0
    assert data == (0xa1, 0xa2)

    print("> i2c debug insert spike ...")
    ret = ez_debug_i2c_write(ez, slave_addr, [0x40, 0xa1], spike_line="SDA",
                             addr_spike=[['20%', 10]], wave_preview=True)

    print("> SETAASA ...")
    ez_ccc_setaasa(ez)

    print("> i3c debug change timing parameter ...")
    ret = ez_debug_get_bus_pp_clk_freq(ez)
    print("> i3c Default PP freq: {}".format(ret))
    ret = ez_debug_set_bus_pp_clk_freq(ez, clk_khz=4000, clk_duty=50, tSU_DAT=20)
    ret = ez_debug_get_bus_pp_clk_freq(ez)
    print("> i3c Cur PP freq: {}".format(ret))

    print("> i3c debug write & read ...")
    ret = ez_debug_i3c_write(ez, slave_addr, [0x40, 0xb3, 0xb4])
    assert ret == 0
    ret, data = ez_debug_i3c_write_read(ez, slave_addr, 0x40, 2)
    assert ret == 0
    assert data == (0xb3, 0xb4)

    print("> i3c debug insert spike ...")
    ret = ez_debug_i3c_write(ez, slave_addr, [0x40, 0xa1], spike_line="SDA",
                             addr_spike=[['20%', 10]], wave_preview=True)
                             
    print("> i3c debug write & main controller read ...")
    ret = ez_debug_i3c_write(ez, slave_addr, [0x40, 0xb3, 0xb4])
    assert ret == 0
    ret, data = ez_i3c_write_read(ez, slave_addr, 0x40, 2)
    assert ret == 0
    assert data == (0xb3, 0xb4)

finally:
    ez_close(ez)



Service Line:

Address:Silicon Valley
Email:support@easyi3c.com

Copyright © Easyi3C Co., LTD