IR_DebugSop

REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 12/04/2024

    1. Debug流程

    1.1 Debug流程图

    图1-1 IR Transmitter发送信号后无反应的Debug流程图

    1.2 信号是否接收成功的判断方法

    首先通过启动log可以判断IR节点绑定的event事件,比如IR0绑定了event0

    输入命令hexdump /dev/input/event0

    信号未成功接收时,没有任何log,如下图:

    信号成功接收时,可以看到16进制的log

    2. Debug流程说明

    2.1 协议匹配

    目前硬件解码仅支持NEC/RC5协议,除此之外的协议需要用软件解码,软件解码需要适配decoder才能解码出customer code和command code,

    适配decoder的方法有两种:

    • 使用Linux原生的decoder,该方法详见文档IR使用参考中的5.3章节

    • 如果没有适配的decoder,请联系FAE开发

    2.2 硬件问题

    检查IR transmitter发送信号后无反应时,可操作寄存器将对应PIN脚设为GPIO并拉高拉低(请注意某些PIN脚GPIO功能优先级并不是最高的,此时需要先清除更高优先级),如果实际输出电平没有变化,则可判断为硬件问题,可按照如下顺序排查:

    2.2.1 HW-A 检查电阻

    查看原理图的对应PIN脚是否有电阻漏焊,漏焊则需要补焊电阻,否则PIN脚不通,如下图,R1766处需要接上100R电阻,否则无法接收IR信号

    2.2.2 HW-B 检查焊接情况

    如果更换Board后,GPIO是可以拉高拉低的,那么可能是芯片虚焊,需要rework

    2.2.3 HW-C 请求协助

    联系硬件同事协助排查并重焊芯片

    2.2.4 HW-D 缺陷上报

    如果更换Board后,GPIO仍然无法拉高拉低,联系FAE上报问题单

    2.3 软件问题

    判断为软件问题时,可按照如下顺序排查:

    2.3.1 SW-A 检查IR寄存器配置

    dump IR bank,检查寄存器设定是否已经完成初始化,

    Bus Bank
    0 0x1671
    1 0x1672
    2 0x1673
    3 0x1673
    4 0x3D

    未初始化的寄存器设定:

    已初始化的寄存器设定:

    主要查看offset 0x40~0x4c的数值,如果寄存器未完成初始化,请检查IR驱动是否加载或者设备节点是否被disabled,详见文档IR使用参考中的5.2和5.3章节

    2.3.2 SW-B 检查PADMUX

    检查IR寄存器正确配置后,transmitter发送信号后仍然无反应,则需要检查PADMUX是否存在冲突,详见Gpio_DebugSop中的PADMUX冲突检查内容

    2.3.3 SW-C 检查IR信号与map table数值是否匹配

    使用逻辑分析仪或者示波器抓取IR PIN脚输入chip端的信号,如下图:

    逻辑分析仪获取到该次IR输入信号的customer code为0x807F,command code为0x4A85,

    因此配置map table时的数值应为0x807F4A,查看dts的rc-map-table的配置:

    红框处是需要配置的IR信号的customer code和command code,如果采样获取的IR信号没有配置到rc-map-table,那么input子系统将不会上报处理该信号对应的键值,0x807F4A已经配置,且对应的键值是KEY_EPPG,那么每次接收IR信号,会上报处理键值KEY_EPPG

    有时可能受到镜像没有更新等情况,导致borad上跑的rc-map-table与代码中期望的不一致,这样也会因为map table未匹配而接收不到IR信号,可以通过如下路径查看实际绑定的rc-map-table:

    可以对比rc-map-table的第一个数组0x00FFA8 KEY_POWER(宏值为0x74)与hexdump出来的结果是否一致

    2.2.4 SW-D 请求协助

    上述步骤SW-A,SW-B,SW-C均检查OK,请提供相关LOG以及IR BANK信息,联系FAE debug