Atlas 300I通过iic forward读取温度失败问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:NA;
- 软件版本:社区330发行版本;
- 涉及功能:传感器读值,驱动加载;
- 触发条件:按照社区白牌包制作流程,制作的白牌包在web页面进行升级,升级完成后app.log查看日志。
- 业务表现:预期Atlas 300I NPU卡可以读到非零的温度、功率值;实际Atlas 300I通过iic forward读取温度值为全FF。
问题复现步骤
- 基于社区330发行版本,通过自发现加载了当前NPU卡,但是通过iic forward获取温度和功率失败。
关键日志信息
查看日志,确认报错如下:
定位过程
- 我们有两款switch板,一款通过9545扩展I2C,一款通过iic forward,现在插在9545的switch上可以读取到温度功率,通过iic forward实现的读取温度和功率失败。
- 同一张卡在9545扩展I2C读到的数据符合预期,排除卡硬件的问题
- 增加Chip的写延迟设置后可以正常读到温度和功率。
问题原因
BMC启动速度快于OS及NPU驱动加载,Compute组件在NPU驱动未完全初始化前即开始通过带外(SMBus)或混合方式访问 NPU 对象的属性,若此时NPU设备内部MCU还未完成初始化或未向BMC暴露完整数据接口,则会导致读取失败。
解决方案
在Chip对象中增加DrvWriteDelay属性,属性到位是毫秒,可以根据整机场景来灵活适配写完等待的时间。