1). 简介
NXP iMX8是NXP去年底发布的基于Cortex-A72/A53和Coretex-M4异构多核架构的ARM处理器,本文就基于嵌入式Linux演示GPIO相关应用示例。
本文所演示的ARM平台来自于Toradex 基于NXP iMX8QM ARM处理器的Apalis iMX8QM ARM嵌入式平台。
2). 准备
a). Apalis iMX8QM ARM核心版配合Apalis Evaluation Board载板,连接调试串口UART1(载板X29)到开发主机方便调试。
b). Apalis iMX8 Cortex-A核心安装Toradex Ycoto Linux Console image V3.04版本,详细信息请参考这里。
d). Apalis Evaluation Board GPIO相关硬件连接
X2 MXM_3 <-> X34 LED1
X2 MXM_5 <-> X34 SW5
X2 MXM_11 <-> X34 SW1
3). GPIO 命令行测试
a). 嵌入式Linux系统下之前呗广泛应用的GPIO工具为sysfs GPIO接口(/sys/class/gpio),但是目前这个项目已经处于deprecated状态,经Linux Kernel Community确定其替代者就是GPIO字符设备API Libgpiod。因此,尽管本文测试使用的Toradex Ycoto Linux Console image V3.04版本依然支持sysfs GPIO接口,但是已经不建议使用,如果需要相关说明,可以参考这里。本文接下来的测试都是基于Libgpiod来进行。
b). GPIO 数字编码
./ ARM SOC定义GPIO管脚通常为一串字母数字的组合,之前sysfs API操作时候需要将不同SOC GPIO的字母数字命名转换为纯数字编码,对于不同的SOC转换规则的详细说明请见这里,而本文使用的libgpiod API则直接可以按照GPIO命名进行操作,更为直观和便利。
./ 首先根据 Apalis iMX8 datasheet 4.4章节的表格,找出所需要GPIO管脚的字母数字组合命名,比如本文涉及的三个GPIO管脚;在接下来的Libgpiod API中都需要使用对应的GPIO命名中的和这两个参数来操作对应的GPIO管脚
### GPIO字符数次串命名规则:LSIO.GPIO.IO
X2 MXM_3 -> LSIO.GPIO0.IO09
X2 MXM_5 -> LSIO.GPIO0.IO12
X2 MXM_11 -> LSIO.GPIO4.IO01
c). 在具体调试GPIO之前,还需要确认在Linux kernel device tree中,这个管脚被定义为GPIO且并没有被其他驱动功能占用,否则在具体操作GPIO的时候会出现冲突导致异常,关于device tree的说明本文不赘述,可以参考这里。本文所涉及的三个GPIO管脚默认即配置为GPIO,因此无需修改。
d). 调用Libgpiod API在命令行下进行GPIO测试
./ Apalis iMX8 上电开机进入嵌入式Linux系统,下面操作在调试串口下进行
./ 罗列GPIO banks,也就是对应的上面提到的controller。可以看到有8个banks,每个banks包含32 lines,也就是32 gpio。当然,实际上结合具体的SOC和模块定义,不一定每个banks和lines都有对应的GPIO管脚,有效的肯呢个只是一部分。
-----------------------------------
root@apalis-imx8:~# gpiodetect
gpiochip0 [5d080000.gpio] (32 lines)
gpiochip1 [5d090000.gpio] (32 lines)
gpiochip2 [5d0a0000.gpio] (32 lines)
gpiochip3 [5d0b0000.gpio] (32 lines)
gpiochip4 [5d0c0000.gpio] (32 lines)
gpiochip5 [5d0d0000.gpio] (32 lines)
gpiochip6 [5d0e0000.gpio] (32 lines)
gpiochip7 [5d0f0000.gpio] (32 lines)
-----------------------------------
./ 查看某个bank具体GPIO lines的情况
嵌入式Linux下Libgpiod 应用示例
最新推荐文章于 2025-02-14 10:00:00 发布