DTSI 多个模块共用同一个 GPIO 引脚冲突 问题汇总

一、核心本质

 
同一个物理 GPIO 引脚,在设备树里被两个及以上驱动 / 模块同时申请、配置、使用。
 

 

二、直接出现的问题

1. 驱动注册失败、内核报错

 
  • 先加载的驱动成功占用 GPIO,后加载驱动调用gpiod_get()/gpio_request()直接失败
  • 打印 gpio already requested,模块初始化直接挂掉,功能失效
 

2. 电平互相篡改,逻辑完全错乱

 
  • A 模块拉高电平,B 模块误以为是自身触发信号
  • 按键、中断、指示灯、使能脚、复位脚互相干扰
  • 按键乱触发、指示灯乱闪、外设随机启停
 

3. 方向模式冲突(输入 / 输出打架)

 
  • 一个配为输出推高低电平
  • 另一个配为输入检测电平
  • 输出强拉电平,输入采样永远不准;甚至 IO 口电平僵持,灌电流异常
 

4. 中断冲突最严重

 
  • 双方都配置该 GPIO 为中断触发(上升沿 / 下降沿 / 双边沿)
  • 中断号重复注册,内核中断紊乱、丢失中断、频繁误触发
  • 严重直接系统卡顿、死机、内核 panic
 

5. 电气硬件损坏风险

 
  • 两个模块同时设为输出:一个拉高、一个拉低 → IO 口对拉灌大电流
  • 长期使用烧毁 GPIO 引脚、主控 IO 域电路
 

6. 休眠 / 唤醒逻辑异常

 
  • 休眠时一方拉电平唤醒,另一方误唤醒整机
  • 低功耗失效,待机功耗飙升
 

7. 设备树编译 & 合并隐性冲突

 
  • 多个 dts/dtsi 重复定义gpios = <&gpioxxx ...>
  • 覆盖原有配置,实际生效的只有最后一个配置,前期配置全部失效
 

 

三、常见冲突场景

 
  1. 按键 GPIO 同时被按键驱动 + 唤醒驱动使用
  2. 电源使能脚 同时被功耗管理 + 外设驱动配置
  3. LED 指示灯 被两个业务模块控制
  4. 串口 / 外设复位脚 多模块共用复位控制
  5. 外部中断输入脚 多个传感器共用同一中断 IO

posted on 2026-05-18 19:59  邗影  阅读(35)  评论(0)    收藏  举报

导航