本文档主要介绍 iMX6 板子 gpio 引脚读写配置。有关平台文件的设备注册的资料可以参
考“iTOP-iMX6-平台文件注册设备”文档。注册的设备名称是“gpio_ctl”。
硬件环境:iMX6 开发板:核心板 v_1.2、底板 v_2.2(以及 v_2.1 底板)。
软件环境:Ubuntu12.04。
1.4 平台文件修改
进入 iTOPiMX6_android4.4.2/kernel_imx/arch/arm/mach-mx6/目录,使用 vi
board-mx6q_topeet.c 命令,打开 board-mx6q_topeet.c 文件。
搜索关键词“CONFIG_LEDS_CTL”,按照 leds 模块,添加 gpio 的配置。如下如所示。
修改完成后,保存退出。再次打开 board-mx6q_topeet.c 文件。
搜索关键词“LEDS_CTL”,按照 leds 模块,添加 gpio 配置。如下图所示。
添加完成后,保存退出。
接着进入“iTOP-iMX6_android4.4.2/kernel_imx/drivers/char”目录,使用“vi
Kconfig”命令打开 Kconfig 文件。
搜索关键词”LEDS_CTL”,按照 leds 模块,添加 gpio 配置。如下图所示。
修改完成后,保存退出。
可按下面步骤验证一下。
进入内核目录,依次使用命令”cp config_for_iTOPiMX6_linux .config”、” export
ARCH=arm”、”make menuconfig”。进入 Device Drivers →Character devices 目
录,可以看见新添加的配置。如下图所示。
选中,退出,按照”iTOP-i.MX6 开发板之全能版使用手册”中的内核编译步骤,进行编
译内核。重新烧写到开发板。
开发板启动后,使用命令“ls /sys/devices/platform/”可以查看到新注册的 gpio_ctl 设
备。如下图所示。
至此,设备注册完成。
1.5 驱动加载及应用测试
1.5.1 读操作
具体编译过程不再赘述。依然可以参考“iTOP-iMX6-GPIO 读取 GPIO 以及拨码开关状
态”文档。下面讲解加载过程和测试过程。
可以通过挂载 nfs 共享目录、tftp 传输文件和 U 盘挂载等方法,把 iTOP-
iMX6_gpio_read.ko 文件上传到开发板。
使用 insmod 命令加载驱动模块。如下图。
在 probe 函数中,有获取 gpio 状态的函数,然后打印出来。如下图。
下面使用”./iMX6_gpio_read”命令运行应用测试程序,检测 gpio 状态。如下图。
此时检测到的状态和刚加载驱动时状态一致。
通过驱动程序,我们可以得知,第一个 gpio 为 1 号拨码开关。后面依次为 U38 接口,1
号、2 号、3 号、10 号、12 号引脚。如下图。
由上图可知,和我们预期相同。
使用引线连接 11 号引脚和 12 号引脚、使用引线连接 4 号引脚和 2 号引脚。然后使用
“./iMX6_gpio_read”命令,运行测试程序。结果如下图。
测试完成。
1.5.2 写操作
与读操作类似。具体编译过程不再赘述。依然可以参考“iTOP-iMX6-GPIO 读取 GPIO
以及拨码开关状态”文档。下面讲解加载过程和测试过程。
可以通过挂载 nfs 共享目录、tftp 传输文件和 U 盘挂载等方法,把 iTOP-
iMX6_gpio_write.ko 文件上传到开发板。
使用 insmod 命令加载驱动模块。如下图。
在 probe 函数中,我们已经将各个 gpio 状态设置为 1,也就是高电平,如下图。
现在 U38 上的五个引脚均为高电平。通过万用表测量电压均为 3.3v(4 号、9 号引脚为
地)。下面调用应用程序,改变引脚的电压值。使用”./iMX6_gpio_write 0 1”命令改变 1
号引脚的电压值。如下图。
此时使用万用表测量引脚 1 的电压值。为 0V。
下面说明一下运行应用程序时,传递的两个参数。第一参数 cmd 表示状态。1 表示高电
平、0 表示低电平。第二个参数 arg 表示对应操作的 gpio。arg 为 0 表示 1 号拨码开关、为
1~5 表示 U38 接口的 1 号、2 号、3 号、10 号、12 号引脚。
下面把 1 号引脚拉高,10 号引脚拉低。使用命令”./iMX6_gpio_write 1 1”
和”./iMX6_gpio_write 0 4”。如下图。
使用万用表测量这两个引脚的电压。1 号引脚为 3.3v,10 号引脚为 0v。
测试完成。