IR_DebugSop
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 12/04/2024 |
1. Debug流程¶
1.1 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