当前位置: 首页 > news >正文

Tower I3C Host Adapter 使用范例 (19)

Easyi3C是一家领先的嵌入式系统工具供应商,可简化各种通信协议的开发和调试。公司提供一系列产品,旨在帮助工程师和开发人员更高效地使用I3CI2C等协议。

基于Tower I3C Host Adapter 测试DDR5 RCD (3)

二 基于Tower I3C Host Adapter 测试 DDR5 RCD I2C

依据上面一节节选的JEDEC Spec I2C写入和读取格式,我们专门为DDR5 RCD I2C归纳了下面的API:

通过我们支持的API,可以很方便的测试DDR5 RCD I2C。

三 测试环境搭建

利用Tower I3C Host Adapter如下图搭建测试环境:

首先将Easyi3C Host I3C/I2C adapter 通过USB Type-C 数据线连上电脑,安装好所需要的USB驱动程序,然后通过官方配送的Cable线连上target。

四 API安装

从官方网站下载对应的软件包,Easyi3C Tower I3C Host Adapter DDR5 Device API。

Easyi3C 为 DDR5 设备提供了一套 Python API。使用 API 时,用户必须先安装 Python。Easyi3C 支持从 Python3.8 到 Python3.13。

Notes:Easyi3C DDR5 设备 API 基于 Easyi3C 标准 API。安装前,您必须确保已安装标准的 Easyi3C API 包。

Easyi3C DDR5 设备 API 以 Python wheel包的形式提供。名称是:

在用户电脑安装 Python 后,执行以下命令安装 Easyi3C 的 DDR5 设备包 API:

Notes:红色框代表对应的Python版本。比如你的 Python 版本是 3.8,你必须安装 ddr5-x.x.x-cp38-cp38-win-amd64.whl。

上述命令也用于升级新版本的API包。

要卸载该包,请运行:

五 I2C测试参考代码:

利用上面安装的wheel包,通过支持的API进行I2C协议测试。

# ========================================================================== # Easyi3C Tower USB to I3C Host Adapter Interface Library # -------------------------------------------------------------------------- # Copyright © 2026 by Easyi3C, Inc. # All rights reserved. # -------------------------------------------------------------------------- # ========================================================================== import sys from ezi3c.api import * from ddr5 import Rcd from ddr5 import Pmic0 import time from ezi3c import crc ez = ez_open() if not ez: print("Cannot open Adapter") sys.exit(-1) clk = ez_set_bus_clk_freq(ez, 1000, 4000) print("Cur Clk Freq: {}".format(clk)) ret = ez_set_io_voltage(ez, 1.0) assert ret == 0, "Faield to set IO voltage" hid = 7 pmic0 = Pmic0(ez, hid=hid) rcd = Rcd(ez, hid=hid) try: print("switch to i2c") rcd.switch_to_i2c(send_ccc=True) assert ret == 0, "Failed to reset DAA: addr:{:02X}".format(rcd.addr) # VR Enable pmic0.i2c_write_reg(0x32, 0xa0) time.sleep(1) # make sure power is ready print("I2C Read Test") channel = 0 page = 3 device_id_reg = 0x6c DEVICE_ID = (0x00, 0x51) print("I2C Block Mode Read Test") ret, data = rcd.i2c_block_read(channel, page, device_id_reg) assert data[2:] == DEVICE_ID print("I2C Block Mode Read Test with PEC") rcd.enable_pec(send_ccc=False) # I2C enable pec no need send ccc ret, data = rcd.i2c_block_read(channel, page, device_id_reg) assert data[2:] == DEVICE_ID rcd.disable_pec(send_ccc=False) # I2C disable pec no need send ccc print("I2C Block Mode Read optimized Test") ret, data = rcd.i2c_block_read_optimized(channel, page, device_id_reg) assert data[2:] == DEVICE_ID print("I2C Byte Mode Read Test") ret, data = rcd.i2c_byte_read(channel, page, device_id_reg) assert data[2:] == DEVICE_ID print("I2C Byte Mode Read Test with PEC") rcd.enable_pec(send_ccc=False) # I2C enable pec no need send ccc ret, data = rcd.i2c_byte_read(channel, page, device_id_reg) assert data[2:] == DEVICE_ID rcd.disable_pec(send_ccc=False) # I2C disable pec no need send ccc print("I2C Block Mode Write Byte Test") channel = 0 page = 0 reg = 0x40 value = 0x50 ret = rcd.i2c_block_write_byte(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[3] print("I2C Block Mode Write Byte Test with PEC") rcd.enable_pec(send_ccc=False) # I2C enable pec no need send ccc value = 0x51 ret = rcd.i2c_block_write_byte(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[3] rcd.disable_pec(send_ccc=False) # I2C disable pec no need send ccc print("I2C Block Mode Write Word Test") value = 0x5152 ret = rcd.i2c_block_write_word(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[2] << 8 | data[3] print("I2C Block Mode Write Word Test with PEC") rcd.enable_pec(send_ccc=False) # I2C enable pec no need send ccc value = 0x5354 ret = rcd.i2c_block_write_word(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[2] << 8 | data[3] rcd.disable_pec(send_ccc=False) # I2C disable pec no need send ccc print("I2C Block Mode Write DWord Test") value = 0x55565758 ret = rcd.i2c_block_write_dword(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] print("I2C Block Mode Write DWord Test with PEC") rcd.enable_pec(send_ccc=False) # I2C enable pec no need send ccc value = 0x50515253 ret = rcd.i2c_block_write_dword(channel, page, reg, value) ret, data = rcd.i2c_block_read(channel, page, reg) assert value == data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3] rcd.disable_pec(send_ccc=False) # I2C disable pec no need send ccc finally: rcd.ccc_rstdaa() ez_close(ez) print("Adapter closed.")

六 总结

利用Tower I3C Host Adapter的官方API,可以很容易测试RCD I2C协议,工程师可以利用我们的API做很多复杂的测试。接下来我们再讲解通过Tower I3C Host Adapter测试RCD I3C协议。

http://www.jsqmd.com/news/459400/

相关文章:

  • 轻量级AI服务落地实战:Qwen2.5-0.5B-Instruct私有化部署与性能调优指南
  • 8集自然纪录片--Our Planet
  • “养虾”热潮的AB面:大厂抢滩、造富神话和万元账单
  • Java基础面试题之===集合篇
  • LoRaWAN协议-MAC帧加密与校验机制深度解析
  • OpenClaw大龙虾又爱又恨?揭秘两大开源神器,让你的AI智能体智商暴增、Token消耗狂降96%!
  • 【Apple】苹果新品盘点
  • “养龙虾”选模型指南:从OpenRouter榜单看AI Agent选型
  • Java基础面试题之===高并发
  • Windows Hello 登录功能 (简单示例)
  • 鸿蒙 架构摘要2-arkui源码追踪
  • (100分)- 攀登者1(Java JS Python C)
  • OBS美颜设置在哪里打开?
  • 大模型落地应用:揭秘国内头部实践,抢占AI先机!
  • 高并发计数性能提升26倍!LongAdder如何用分段CAS颠覆AtomicLong?
  • 中科大少年班记(2026年3月)
  • Redis学习日志--不断学习,不断补充
  • 笔记:使用yaml文件进行K8s服务部署:资源控制器篇
  • 1.OAG(本体增强生成)技术研究学习笔记
  • What_s_New_in_PSCAD_X4__pscad说明书_DeepSeek翻译
  • 2026 年,海南注册公司代理机构 top10,“e 登记” 适配服务实力排名
  • 曾经神器又回来了?最新开源修复版,一键轻松OCR图片提取文字,支持翻译,完全免费 天若OCRV6.0
  • 腾视科技TS-SG-SM7系列AI算力模组:32TOPS算力引擎,开启边缘智能新纪
  • 2026 年,洋浦企业注册代办十佳,服务效率榜单,推荐哪些公司
  • 3p2w_tx_pscad说明书_DeepSeek翻译
  • 【ROS2】YDLidar X2的HELLO WORLD步骤总结
  • 高频-链表
  • 第十六届蓝桥杯大赛软件赛省赛Java 大学 B 组
  • 耳内EEG技术:便携性与信号质量的综合评估
  • 公司办公固定资产管理办法(框架草案)