RK3128红外遥控调试踩坑实录:解决按键无响应、无法唤醒、关机后不能开机三大难题

张开发
2026/5/16 23:59:09 15 分钟阅读
RK3128红外遥控调试踩坑实录:解决按键无响应、无法唤醒、关机后不能开机三大难题
RK3128红外遥控调试实战从按键映射到唤醒机制的深度解析红外遥控功能在嵌入式设备中看似基础但实际调试过程中往往会遇到各种坑。最近在RK3128平台上调试Android 7.1的红外遥控功能时我遇到了三个典型问题按键无响应、休眠后无法唤醒、关机后无法开机。本文将分享这些问题的排查思路和解决方案。1. 按键无响应从信号捕获到键值映射当遥控器按键没有反应时首先要确认红外信号是否被正确接收和解码。RK3128通过PWM模块处理红外信号我们需要从硬件到软件逐层排查。1.1 红外信号捕获与解码使用以下命令开启红外键值打印功能adb shell echo 1 /sys/module/rockchip_pwm_remotectl/parameters/code_print cat /proc/kmsg这时按下遥控器按键串口或adb会输出类似这样的信息rockchip-pwm-remotectl: USERCODE0xfe01, KEY0xaa这表示收到了用户码为0xfe01的遥控器发来的0xaa键值。如果没有输出说明硬件或驱动层有问题。1.2 DTS键值映射配置确认信号接收正常后需要在DTS中配置键值映射。以下是典型配置示例remotectl { status okay; handle_cpu_id 1; ir_key2 { rockchip,usercode 0xfe01; rockchip,key_table 0xaa KEY_POWER, 0xbb KEY_MENU, 0xcc KEY_BACK, 0xdd KEY_HOME, 0xee KEY_VOLUMEUP, 0xff KEY_VOLUMEDOWN; }; };常见问题排查表问题现象可能原因解决方案无任何键值输出PWM通道未启用检查DTS中status是否为okay键值输出错误用户码不匹配确认usercode与遥控器一致部分按键无响应键值未映射检查key_table是否完整1.3 Android键值映射DTS映射完成后还需要配置Android的键值布局文件(.kl)。首先确定输入设备名称getevent -l输出示例/dev/input/event2: 20050030.pwm然后在device/rockchip/rkxxxx/目录下创建或修改对应的.kl文件例如20050030_pwm.klkey 116 POWER key 139 MENU key 158 BACK key 102 HOME2. 休眠唤醒失效深入DTS唤醒配置设备休眠后无法通过遥控器唤醒是另一个常见问题这通常与电源管理和唤醒源配置有关。2.1 唤醒源配置原理RK3128的唤醒功能需要在DTS中配置rockchip,wakeup-config。关键点在于确保PWM通道作为唤醒源被启用正确设置唤醒触发条件示例配置rockchip_suspend { status okay; rockchip,wakeup-config (RKPM_GPIO_WKUP_EN | RKPM_PWM_WKUP_EN) ; rockchip,pwm-regulator-config PWM3_REGULATOR_EN; };2.2 唤醒功能验证步骤进入休眠echo mem /sys/power/state使用遥控器尝试唤醒检查唤醒源cat /sys/kernel/debug/pm_genpd/summary2.3 常见问题排查完全无法唤醒检查PWM通道是否在唤醒配置中启用确认PWM电源域未被关闭偶发性唤醒失败调整红外接收头供电稳定性检查PWM时钟源配置3. 关机后无法开机uboot层红外支持关机状态下系统完全断电需要uboot支持红外开机功能。3.1 uboot红外驱动修改关键修改文件u-boot/board/rockchip/common/rkloader/pwm_remotectl.c需要添加关机键值支持static struct rkxx_remote_key_table remote_key_table_bf[] { {0xff, KEY_POWER}, }; static struct rkxx_remotectl_button remotectl_button[] { { .usercode 0xfe01, .nbuttons 25, .key_table remote_key_table_fe01[0], }, { .usercode 0xbf00, .nbuttons 1, .key_table remote_key_table_bf[0], }, };3.2 电源管理配置确保uboot中红外开机功能已启用#define CONFIG_IR_REMOTE_WAKEUP3.3 验证流程完全关机使用遥控器开机检查uboot日志确认红外接收情况4. 进阶调试技巧与性能优化4.1 红外接收性能优化通过调整PWM参数可以改善红外接收灵敏度pwm3 { rockchip,irq-gpio gpio2 GPIO_B2 IRQ_TYPE_LEVEL_HIGH; rockchip,pwm-sample-time 0x03; rockchip,pwm-wait-time 0x1e; };参数说明参数作用推荐值pwm-sample-time采样时间0x02-0x04pwm-wait-time等待时间0x1e-0x3c4.2 多遥控器支持对于需要支持多个遥控器的场景可以配置多组键值表ir_key1 { rockchip,usercode 0xfe01; rockchip,key_table ...; }; ir_key2 { rockchip,usercode 0xbf00; rockchip,key_table ...; };4.3 低功耗优化在电池供电设备中可以通过以下方式降低红外待机功耗调整PWM中断触发方式优化唤醒间隔合理设置滤波参数

更多文章