1. PSE芯片驱动移植中的IIC通信故障排查实录
去年在参与某款网络视频录像机(NVR)的国产化替代项目时,遇到了一个典型的I2C通信故障案例。当时我们需要将原本使用的Si3459和Max5980两款进口PSE(Power Sourcing Equipment)芯片替换为国产的IP808AR和IP804方案。这个看似简单的驱动移植工作,却因为一个隐蔽的硬件设计错误导致I2C通信始终无法建立。下面我就详细还原整个排查过程,希望能给遇到类似问题的同行提供参考。
注:PSE芯片是PoE(Power over Ethernet)供电系统中的关键部件,负责检测、分类并为PD(Powered Device)设备提供48V供电。其与主控芯片通常通过I2C接口进行通信和控制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题现象与初步分析
2.1 故障现象描述
在Hi3536D平台上移植IP808AR驱动时,发现通过I2C读取芯片寄存器始终失败,内核日志中出现以下错误信息:
code复制HIKDRV_PoeChipI2cRead:144 ret[fffffffb]...
hibvt-i2c 120c0000.i2c: wait idle abort!, RIS: 0x611
这个错误表明I2C控制器在等待总线空闲时超时,通信链路未能正常建立。值得注意的是,该问题是100%复现的,排除了偶发干扰的可能性。
2.2 基础排查三板斧
面对I2C通信问题,我通常会按照以下顺序进行排查:
-
物理层检查:
- 测量SCL/SDA线电压(正常应为3.3V)
- 检查上拉电阻值(通常4.7kΩ)
- 用示波器观察信号波形
-
协议层检查:
- 确认I2C地址设置正确
- 检查时钟频率配置(标准模式100kHz,快速模式400kHz)
- 验证读写时序符合规范
-
器件状态检查:
- 确认器件供电正常
- 检查复位信号和使能信号
- 验证器件是否进入正确工作模式
在本案例中,首先排除了Linux I2C驱动本身的问题,因为同一控制器其他从设备通信正常。接着重点检查了PSE芯片的工作状态。
3. 深入问题定位过程
3.1 电源与工作模式验证
使用万用表测量IP808AR的各路
