终端查看GPIO电平不变的解决方法 - 飞凌OKMX6DL/Q-S3

概述

本文档针对飞凌OKMX6DL/Q-S3平台(Linux 4.1.15)在复用GPIO时遇到的引脚电平状态异常问题,提供终端读取GPIO值不变的解决方案。

  • 平台: OKMX6DL/Q-S3 (i.MX6DL/Q)
  • 操作系统: Linux 4.1.15
  • 问题类型: GPIO复用配置

问题描述

在使用i.MX6系列芯片时,部分引脚具有复用功能。当引脚被配置为GPIO功能后,通过终端读取GPIO电平状态时发现数值不随实际电平变化而改变,这是典型的SION(软件输入禁用)位未正确配置导致的。

解决方案

核心原因

i.MX6系列芯片的IO配置寄存器中有一个SION(Software Input On)位。当SION=0时,引脚的输入功能可能被外设模块禁用,导致读取到的GPIO值与实际电平不符。

修改步骤

1. 定位引脚定义文件

修改内核源码中的引脚配置头文件:

vim arch/arm/boot/dts/imx6q-pinfunc.h

2. 找到对应引脚定义

以 MX6QDL_PAD_EIM_DA7__GPIO3_IO07 为例,找到其引脚配置行。

3. 修改SION位

将引脚定义中的控制值从 0x5 修改为 0x15:

// 修改前
#define MX6QDL_PAD_EIM_DA7__GPIO3_IO07  0x0054 0x026C 0x0000 0x5 0x0
 
// 修改后
#define MX6QDL_PAD_EIM_DA7__GPIO3_IO07  0x0054 0x026C 0x0000 0x15 0x0

原理:控制值第4位的 0x5 改为 0x15,即置位SION bit(bit 4),使能软件输入。

4. 应用到其他引脚

其他需要修改的引脚定义,同样将该位置的 0x5 改为 0x15。

5. 重新编译内核

make zImage dtbs

6. 烧录并验证

重新烧录内核镜像后,通过终端读取GPIO值应能正常反映实际电平状态。

行动点

  1. 遇到GPIO读取异常时,优先检查引脚复用配置中的SION位
  2. 对于需要同时作为GPIO输入和外设信号复用的引脚,务必启用SION功能
  3. 修改dtb文件后重新编译并测试,确认功能正常后再固化到产品中

关联知识


本文档版权归保定飞凌嵌入式技术有限公司所有