Atlas 300I通过iic forward读取温度失败问题分析
更新时间: 2026/05/28
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:社区330发行版本;
  • 涉及功能:传感器读值,驱动加载;
  • 触发条件:按照社区白牌包制作流程,制作的白牌包在web页面进行升级,升级完成后app.log查看日志。
  • 业务表现:预期Atlas 300I NPU卡可以读到非零的温度、功率值;实际Atlas 300I通过iic forward读取温度值为全FF。

问题复现步骤

  1. 基于社区330发行版本,通过自发现加载了当前NPU卡,但是通过iic forward获取温度和功率失败。

关键日志信息

查看日志,确认报错如下:

定位过程

  1. 我们有两款switch板,一款通过9545扩展I2C,一款通过iic forward,现在插在9545的switch上可以读取到温度功率,通过iic forward实现的读取温度和功率失败。
  2. 同一张卡在9545扩展I2C读到的数据符合预期,排除卡硬件的问题
  3. 增加Chip的写延迟设置后可以正常读到温度和功率。

问题原因

BMC启动速度快于OS及NPU驱动加载,Compute组件在NPU驱动未完全初始化前即开始通过带外(SMBus)或混合方式访问 NPU 对象的属性,若此时NPU设备内部MCU还未完成初始化或未向BMC暴露完整数据接口,则会导致读取失败。

解决方案

在Chip对象中增加DrvWriteDelay属性,属性到位是毫秒,可以根据整机场景来灵活适配写完等待的时间。