IMX6ULL配置GPIO管脚和测试

本文详细介绍MY-IMX6-CB140P-6Y2D-256M-4G设备树配置过程,包括设备树文件解析、GPIO管脚配置及测试方法。适用于嵌入式开发人员理解和操作MYZRTechnology的IMX6ULL平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

MY-IMX6-CB140P-6Y2D-256M-4G,如下图:(6Y2D是IMX6ULL,256M是内存,4G是EMMC)

对于的设备树文件为arch/arm/boot/dts/myimx6ek140p-6y-256m-emmc.dts

文件内容:

/*

 

MYZR Technology Co.,Ltd

http://www.myzr.com.cn

Tang Bin tangb@myzr.com.cn

*/

/dts-v1/;

 

#include “myimx6y-pinfunc.h”

#include “myimx6y.dtsi”

 

#include “myimx6ek140p-iomuxc.dtsi”

#include “myimx6ek140p-6y-snvs.dtsi”

#include “myimx6cb140-nand4emmc.dtsi” /* myimx6cb140-nand4nand.dtsi /

#include “myimx6a7-lcd4wvga.dtsi” / myimx6a7-lcd4wqvga.dtsi /

#include “myimx6a7-enet4enet.dtsi” / myimx6a7-enet4uart.dtsi */

#include “myimx6ek140p.dtsi”

 

/ {

model = “MYIMX6EK140P-6Y-256M-eMMC Evaluation Kit”;

compatible = “myzr,myimx6cb140”, “myzr,myimx6ek140p”, “fsl,imx6ull”;

};

介绍说明:

myimx6y-pinfunc.h 是 imx6ull 全部预定义管脚都在这里(可以在这边复制管脚)

myimx6y.dtsi 是 imx6ull 核心注册设备信息

myimx6ek140p-iomuxc.dtsi 是 imx6ull 定义管脚功能(管脚修改,需要改到这个文件)

myimx6ek140p-6y-snvs.dtsi 是 imx6ull 定义管脚功能(管脚修改,需要改到这个文件)

myimx6a7-lcd4wvga.dtsi 是 RGB屏相关管脚和分辨率参数

myimx6a7-enet4uart.dtsi 是 配置一个以太网,配置uart6,7,8

myimx6a7-enet4enet.dtsi 是 配置两个以太网

myimx6ek140p.dtsi 是 imx6ull 注册设备信息 (增加驱动,需要改到这个文件)

 

配置GPIO管脚

这里讲解P21的34和36管脚,如下图

vim arch/arm/boot/dts/myimx6ek140p.dtsi

增加

&iomuxc {

pinctrl-names = “default”;

pinctrl-0 = <&pinctrl_nand_gpio &pinctrl_gpio_gpio &pinctrl_snvs_4g_rst &pinctrl_snvs_gpio>;

};

里面&pinctrl_gpio_gpio表示GPIO注册时,会注册&pinctrl_gpio_gpio里面的管脚。

 

arch/arm/boot/dts/myimx6ek140p-iomuxc.dtsi

定义了两个管脚

pinctrl_gpio_gpio: gpio_gpio_grp {

fsl,pins = <

MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x80000000 /* P21:36 /

MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0x80000000 / P21:35 */

>;

};

MX6UL_PAD_GPIO1_IO03__GPIO1_IO03分为两段,前面那段GPIO1_IO03是CPU管脚名,如下图

后面GPIO1_IO03代表功能,其实我们在myimx6y-pinfunc.h可以看到很多预定义的功能:

这里我们选择GPIO功能:MX6UL_PAD_GPIO1_IO03__GPIO1_IO03

测试

IMX6ULL代表每个BANK是32个管脚, io端口号= (((bank) - 1) * 32 + (nr))

GPIO1_IO03代表第1组gpio中的第3个gpio口,其中每组32个gpio口

io端口号为IMX_GPIO_NR(1,11)=32×(1-1)+3=3

 

root@myimx6ek140p:~# echo 3 > /sys/class/gpio/export

root@myimx6ek140p:~# echo out > /sys/class/gpio/gpio3/direction

root@myimx6ek140p:~# echo 1 > /sys/class/gpio/gpio3/value

root@myimx6ek140p:~# echo 0 > /sys/class/gpio/gpio3/value

### IMX6ULL QEMU GPIO 模拟配置与使用教程 #### 1. 准备工作 为了在QEMU中模拟IMX6ULLGPIO操作,首先需要准备合适的工具链环境。确保已经安装并配置好QEMU以及相应的交叉编译工具链。 对于启动带有图形界面的IMX6UL模拟器,在终端输入如下命令可以实现[^1]: ```bash ./qemu-imx6ull-gui.sh ``` 此脚本会启动一个预配置好的QEMU实例来仿真IMX6ULL平台,并允许通过`root`用户无密码登录进入系统。 #### 2. 编写简单的GPIO测试应用程序 编写一段C语言代码用于控制指定编号的GPIO引脚状态变化: ```c #include <stdio.h> #include <fcntl.h> /* File Control Options */ #include <unistd.h> /* UNIX Standard Definitions */ #include <sys/ioctl.h> /* I/O Control Definitions */ #define GPIO_BASE "/sys/class/gpio" #define EXPORT_FILE GPIO_BASE"/export" #define UNEXPORT_FILE GPIO_BASE"/unexport" int main(){ int fd; char buffer[3]; // 导出gpio号为78的引脚 (对应于具体硬件上的某个实际物理引脚) fd = open(EXPORT_FILE, O_WRONLY); write(fd, "78", sizeof("78")-1); close(fd); sleep(1); // 设置方向为输出模式 sprintf(buffer,"%d/value",78); fd=open(GPIO_BASE "/"buffer,O_WRONLY); ioctl(fd, _IOW('p', 'r', &direction), "out"); close(fd); while(1){ // 将该引脚设置为高电平 fd = open("/sys/class/gpio/gpio78/value",O_WRONLY); write(fd,"1",sizeof("1")); close(fd); printf("Set gpio high\n"); sleep(1); // 将该引脚设置为低电平 fd = open("/sys/class/gpio/gpio78/value",O_WRONLY); write(fd,"0",sizeof("0")); close(fd); printf("Set gpio low\n"); sleep(1); } return 0; } ``` 这段程序尝试导出特定编号(此处假设为78)的GPIO端口,并将其设为输出模式,之后不断切换其高低电平状态以形成周期性的信号波形。 请注意上述路径及文件名可能因不同版本内核而有所差异;另外由于是在虚拟环境中运行,某些功能或许无法完全按照预期表现出来。 #### 3. 构建并加载自定义模块 如果希望更深入地参与到底层驱动层面,则可以通过修改或创建新的Linux Kernel Module来进行更加复杂的逻辑处理。这通常涉及到对现有驱动源码的理解与调整,比如位于`drivers/gpio/gpiolib.c`中的通用GPIO库函数或是针对NXP i.MX系列处理器特化的部分[^3]。 完成模块编码后,利用Makefile构建目标二进制文件,并借助之前提到的方法将其部署到由QEMU所维护的目标文件系统当中去: ```bash cd ~/path_to_your_module/ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- cp your_module.ko /mnt/qemu_rootfs/lib/modules/$(uname -r)/kernel/drivers/your_path/ depmod -a insmod /lib/modules/$(uname -r)/kernel/drivers/your_path/your_module.ko ``` 以上步骤展示了如何在一个基于ARM架构的嵌入式平台上进行基本的GPIO编程实践,同时也介绍了怎样将自己的定制化组件集成进来以便进一步扩展系统的功能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值