GPIO 功能应用笔记 - 飞凌 OKMX6DL/Q

飞凌嵌入式应用笔记,基于 FETMX6DL/Q 核心版,Linux 3.0.35

原始文件: /工作相关/飞凌嵌入式imx6全部资料/嵌入式相关(小发光硬件部分)/20200219 孙润民/飞凌电子/OKMX6DL、Q系列产品应用笔记/GPIO 功能应用笔记.pdf 文件大小: 923 KB 页数: 13页 提取方式: PDF文本提取(pdf-inspector),text_based类型 处理日期: 2026-09-20


核心内容

本文档详细介绍了在飞凌 OKMX6DL/Q 开发板上使用 GPIO 的方法,包括用户空间操作和内核空间配置。

一、GPIO 用户空间操作

Linux 3.0.35 提供标准的 GPIO 接口:/sys/class/gpio/

目录结构:

  • export:导出 GPIO
  • unexport:撤销导出
  • gpiochip0~gpiochip192:GPIO 组(GPIO1~GPIO7)

GPIO 编号计算公式:

GPIO编号 = (BANK-1) × 32 + N

其中 BANK 为 GPIO 组号,N 为该组内引脚序号。

示例:GPIO7-IO03 → (7-1)×32+3 = 195

常用操作命令:

# 导出 GPIO
echo 195 > /sys/class/gpio/export
 
# 取消导出
echo 195 > /sys/class/gpio/unexport
 
# 配置方向(in/out/high/low)
echo out > /sys/class/gpio/gpio195/direction
 
# 读取值
cat /sys/class/gpio/gpio195/value
 
# 设置值
echo 1 > /sys/class/gpio/gpio195/value

二、修改 Pinmux 配置

关键文件:

  • 引脚复用定义:arch/arm/plat-mxc/include/mach/iomux-mx6q.h
  • 板级配置:arch/arm/mach-mx6/board-mx6q_sabresd.h

修改步骤:

  1. 在 board-mx6q_sabresd.h 中添加 GPIO 配置
  2. 注释掉原来的复用功能
  3. 重新编译内核并烧写

示例:释放 SD3 卡引脚作为 GPIO

/* GPIO 配置 */
MX6Q_PAD_SD3_CLK__GPIO_7_3,
MX6Q_PAD_SD3_CMD__GPIO_7_2,
MX6Q_PAD_SD3_DAT2__GPIO_7_6,
// ... 其他引脚
 
/* 注释掉原来的 USDHC3 配置 */
/* MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ, ... */

三、Datasheet 查表方法

GPIO 寄存器(8个32位寄存器):

寄存器描述
GPIOx_DR数据寄存器(输出)
GPIOx_GDIR方向控制
GPIOx_PSR状态寄存器(输入)
GPIOx_ICR1/ICR2中断触发方式
GPIOx_IMR中断屏蔽
GPIOx_ISR中断状态
GPIOx_EDGR_SEL边沿触发选择

查找配置步骤:

  1. 在 Datasheet 搜索引脚名称(如 EIM_A22)
  2. 找到 ALT Mode(如 ALT5)
  3. 查看 Pad Settings(PKE、PU/PD 等)
  4. 查找 IOMUXC_SW_MUX_CTL_PAD_XXXX 寄存器

四、常见问题处理

  1. Device or resource busy:引脚被其他功能占用,检查内核 pinmux 配置
  2. 功能异常:可能被串口等占用,检查硬件电路上拉下拉

关键要点

  • GPIO 编号 = (BANK-1)×32 + N
  • 导出前必须确认 pinmux 未配置为其他功能
  • 修改内核配置后需重新编译

关联知识