PSE芯片驱动移植过程中IIC问题定位分享

一  案例简述

         在国产方案替换和降本的前提下,原有的PSE芯片(POE芯片,用于NVR等设备),如Si3459,Max5980等方案,逐步由国产PSE替代。在调试国产PSE驱动过程中,出现IIC不能通信等问题,本文意在阐述问题的发现、定位和处理的相关方法和思路。

二 案例分析和解决过程

背景知识说明

         PSE芯片IP808AR主要替换原来的Si3459芯片(8路POE接口),IP804主要替换Max5980芯片(4路POE接口)。开发的主平台还是Hi3536D,由于新老芯片不是pin to pin,所以硬件都需要重新设计打版,PSE芯片驱动需要重新开发和适配,保证兼容性。

         PSE芯片和CPU通信采用IIC通信,同时CPU可以硬件复位PSE和获取PSE GPIO中断信号。硬件连接如下:

         驱动实现的基础就是IIC通信,通过IIC获取和配置PSE芯片进行相关检测和工作。问题:采用IIC读取PSE芯片数据时,返回错误信息如下:

         HIKDRV_PoeChipI2cRead:144  ret[fffffffb]...

         hibvt-i2c 120c0000.i2c: wait idle abort!, RIS: 0x611

问题分析

         IIC读取或者写入都是返回错误,问题是必现的。

初步分析

从错误信息返回看,IIC是异常的,没有正常通信上。分析:

  1. IIC驱动是Linux默认驱动,驱动正常,故排除IIC驱动本身问题;
  2. IIC通信地址是否正确?读写地址不一致?
  3. PSE芯片工作是否正常?

        综上只需要确认2,3即可。

        首先排除PSE工作是否正常,PSE提供48V电源,所有供电电源是否正常??PSE芯片的3.3V是否正常,PSE芯片的1.8V是否正常??

        经过确认,电源异常采用了12V电源,所以导致48V的PSE芯片工作异常,替换48V电源后依然不能正常工作,错误依旧。确认其他电源也是正常,硬件方式将PSE切换到自动模式(不需要CPU干预可直接驱动POE工作),POE管脚工作正常,能够提供48V电源。

        结论:PSE芯片工作正常,硬件外围工作正常。

        所以大概率问题出现在PSE驱动软件上,IIC地址检查发现也是正常的。到此似乎找不到根源,硬件排查正常,IIC地址正常,但是读取IIC数据是异常。

进一步深入分析

IP808AR(IP804A)PSE芯片采用手动模式(Manual Mode),IIC才能有效,区别于之前的si系列和MAX系列的PSE芯片。从芯片文档可以看出,Auto mode时IIC不能支持,同时SCAN<1:0>决定是工作在Auto mode还是Manual Mode。

         文档显示SCAN<1:0>管脚00b是Auto Mode,01b是Manual Mode,查看原理图发现工作模式正确。

        

         排查IIC的地址是否错误,7bit地址的低三位由AD2-AD0管脚决定,原理图AD2-AD0全部拉高,实际只有AD2拉高,那么IP808AR的7bit地址应该是0x74,8bit地址是0xE8,IP804A地址MSB 4bit固定1010,所以7bit地址应该是0x54,8bit地址是0xA8。根据地址检查代码地址设置也是正确的。

         至此,已经排除了硬件的联通性,外面电路,软件的基本设置,IIC地址等,如果上述问题全部正常IIC是没有理由不通的。PSE没有进入auto mode可以判断(POE接上设备是否供电即可检查),显示工作模式是正常的,所以SCAN管脚电平应该是正常的。

         目前对IIC操作直接采用IIC驱动接口直接进行读写,且IIC的驱动正常,所以软件接口不存在问题,为了可能性是IIC的地址错误。

        以IP808AR为例,AD2-AD0只有8种可能的地址,即0x70-0x77,如果AD2-AD0地址电平错误,也只能是其中的一种地址。所以果断采用软件地址遍历的方式,再次检查硬件地址是否设置错误,从0x70开始逐个发送IIC数据进行测试,果然在0x71的地址上可以通信成功。IIC地址(7Bit地址)0x71表示AD2-AD0是001,也就是硬件AD2和AD0的设置相反了,立即将问题反馈给硬件设计。硬件设计查询电路图是正常的(显然是正常的,一直在看电路图),核对bom出现错误,AD2和AD0管脚相反。

        通过上诉办法,一步步分析IIC的通信失败的可能性,倒退测试硬件的错误,到最终查到应该硬件设计人员的失误,最终解决IIC通信问题。

四 经验总结、预防措施及建议

  1. 硬件驱动调试时,尽可能让硬件人员提供原理图和PCB图。
  2. 针对需要开发的驱动程序,了解基本的通信原理和可能发生问题的应对措施;
  3. 开发驱动过程中,需要认真的仔细阅读芯片文档资料。部分芯片厂商,资料可能不全,需要提出问题才能进一步提供资料。本例中芯片就是一个例子。
  4. 在软件异常情况下,可以先进行模块测试,或者局部测试,将问题定位到最小化,最后找到问题根源;
  5. 在软件排查和经验不足情况下,可以借助测试工具,如示波器,万用表等。

五 从本文可导出的检查项(checklist)

原理图,PCB,BOM统一性检测,为何出现不统一情况,原因是什么。

参考文献、标准、案例

附录        参考文献

《IP808AR-DS-R01-20181210》

《IP804A-DS-R02-20181210》

《IP808 Hardware design Guide 181221》

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐