You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux 5.10内核MCP23008设备irq类型不匹配问题求助

解决MCP23008在Jetson Xavier NX上的中断匹配问题

问题根源分析

报错irq: type mismatch, failed to map hwirq-24 for gpio@c2f0000!核心原因是:中断触发类型与父中断控制器(gpio_aon)的支持类型不匹配,同时设备树的中断配置参数存在不合理之处。

具体修复步骤

1. 修正中断触发类型参数

MCP23008的INT引脚为开漏输出,默认低电平有效。原配置中interrupts = <28 3>的3代表IRQ_TYPE_EDGE_BOTH(双边沿触发),与硬件特性冲突,需改为以下两种合法类型之一:

  • 低电平触发:interrupts = <28 2>(2对应内核定义的IRQ_TYPE_LEVEL_LOW)
  • 下降沿触发:interrupts = <28 1>(1对应内核定义的IRQ_TYPE_EDGE_FALLING)

2. 改用规范的中断父节点引用

避免使用数值<0xd>,直接用设备树标准别名&gpio_aon引用父中断控制器,避免不同内核版本下数值别名的兼容性问题:

interrupt-parent = <&gpio_aon>;

3. 添加驱动识别的中断极性属性

在设备树节点中添加microchip,irq-active-low属性,明确告知MCP23008驱动INT引脚为低电平有效,让驱动正确配置芯片内部中断逻辑:

my_input_gpios: gpio@20 {
    compatible = "microchip,mcp23008";
    gpio-controller;
    #gpio-cells = <2>;
    reg = <0x20>;
    interrupt-parent = <&gpio_aon>;
    interrupts = <28 2>;
    microchip,irq-active-low;
    status = "okay";
};

4. 验证父GPIO控制器的中断支持

  • 查找gpio_aon对应的芯片编号:cat /sys/class/gpio/gpiochip*/label | grep aon
  • 检查该芯片支持的中断触发类型:cat /sys/class/gpio/gpiochipXXX/edge(将XXX替换为查到的芯片编号)
    确保选择的触发类型(如low或falling)在输出的支持列表中

验证方法

重新编译设备树并烧录到Jetson Xavier NX,加载pinctrl-mcp23s08模块后,通过dmesg确认无中断映射报错,再用libgpiod工具测试GPIO事件监听:

gpiodetect  # 确认MCP23008的gpiochip被系统识别
gpiomon --num-events=1 gpiochipX Y  # X为MCP23008的chip编号,Y为要监听的引脚

内容的提问来源于stack exchange,提问作者riz94107

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:43:17