推荐产品
联系我们
北京立萨科技有限公司

咨询热线:010-82488292

公司电话:010-82488292

公司传真:010-82611646

企业邮箱:sales@lisatech.cn

地址:北京市海淀区中关村大街19号 新中关大厦B座南翼15层1509室

当前位置:立萨科技首页 » 新闻资讯 » 常见问题简答 » I.MX6 评估板 开发指导(GPIO)

I.MX6 评估板 开发指导(GPIO)

文章出处:立萨科技 人气:9
摘要 : I.MX6 GPIO的值计算方法是(所在的组 - 1) * 32 + 序号,所以GPIO_1_20的管脚值为 (1 – 1) * 32 + 20 = 20。

  I.MX6 评估板 开发指导(GPIO)IF">[size=0.875em]

  目录[size=12.502px] [隐藏]

  1GPIO输出和输入

  1.1修改.h文件

  1.2配置内核

  1.3编译

  1.4重新烧写系统并启动

  1.5设备操作

  1.5.1查看gpio目录

  1.5.2向系统注册GPIO

  1.5.3GPIO输出控制

  1.5.4GPIO输入设置

  1.5.5注销GPIO接口

  2GPIO LED

  2.1进入内核目录

  2.2添加代码

  2.2.1修改.h文件

  2.2.2修改.c文件

  2.3内核配置

  2.4编译

  2.5重新烧写系统并启动

  2.6GPIO_LED操作

  2.6.1设备文件目录

  2.6.2操作示例

  3GPIO按键

  3.1修改.h文件

  3.2修改.c文件

  3.3内核配置

  3.4编译

  3.5重新烧写系统并启动

  3.6GPIO按键操作

  3.6.1GPIO_KEYS设备

  3.6.2查看设备信息

  3.6.3设备文件

  3.6.4操作示例

  GPIO输出和输入

  GPIO输入输出以SD1_CLK管脚为例。

  修改.h文件

  1)检查头文件中对SD1_CLK的配置

  示例如下:

  $ sed -n "/PAD_SD1_CLK/p" arch/ARM/mach-mx6/board-mx6q_sabresd.h

  2)注释头文件中对SD1_CLK的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_SD1_CLK/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加对SD1_CLK的配置

  配置SD1_CLK功能为MX6Q_PAD_SD1_CLK__GPIO_1_20

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_SD1_CLK__GPIO_1_20,"

  arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改结果

  示例如下:

  $ sed -n "/PAD_SD1_CLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置内核

  菜单定位

  Device Drivers ---> -*- GPIO Support ---> /sys/class/gpio/... (sysfs inteRFace)

  编译

  make uImage

  重新烧写系统并启动设备操作查看gpio目录

  在/sys/class/gpio/目录下可以看到已经导出的GPIO

  $ ls /sys/class/gpio/

  向系统注册GPIO

  使用echo注册GPIO_1_20到系统,即可看到gpio目录下多出一个gpio20目录。

  提示:I.MX6 GPIO的值计算方法是(所在的组 - 1) * 32 + 序号,所以GPIO_1_20的管脚值为 (1 – 1) * 32 + 20 = 20。

  $ echo 20 > /sys/class/gpio/export

  GPIO输出控制

  设置管脚为输出状态

  $ echo out > /sys/class/gpio/gpio20/direction

  设置管脚为输出为高电平

  echo 1 > /sys/class/gpio/gpio20/value

  设置管脚为输出为低电平

  echo 0 > /sys/class/gpio/gpio20/value

  GPIO输入设置

  设置管脚为输入状态

  echo in > /sys/class/gpio/gpio20/direction

  获取输入值

  cat /sys/class/gpio/gpio20/value

  注销GPIO接口

  注销GPIO_1_20

  echo 20 > /sys/class/gpio/unexport

  GPIO LED

  说明:GPIO LED以PAD NANDF_CS0为例。

  进入内核目录

  $ cd ~/MY-I.MX6/linux-3.0.35/

  添加代码修改.h文件

  1)查找头文件中对NANDF_CS0的配置

  示例如下:

  $ sed -n "/PAD_NANDF_CS0/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  2)注释头文件中对NANDF_CS0的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_NANDF_CS0/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加对NANDF_CS0的配置

  配置NANDF_CS0功能为MX6Q_PAD_NANDF_CS0__GPIO_6_11

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_NANDF_CS0__GPIO_6_11," arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改结果

  示例如下:

  $ sed -n "/PAD_NANDF_CS0/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  修改.c文件

  1)检查.c文件中GPIO是否被重复使用

  示例如下:

  $ sed -n ‘/IMX_GPIO_NR(6,.11)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)在.c文件中增加GPIO的宏定义

  增加#define SABRESD_USER_LED IMX_GPIO_NR(6, 11)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_USER_LED IMX_GPIO_NR(6, 11)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)检查gpio_led类型的数据定义

  示例如下:

  $ sed -n ‘/struct gpio_led /,/}/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  3)增加user_led的数据定义

  static struct gpio_led imx6q_gpio_leds[] = {

  GPIO_LED(SABRESD_USER_LED, "user_led", 0, 1,

  "charger"),

  };

  内核配置

  菜单定位

  Device Drivers ---> LED Support ---> <*> LED Support for GPIO connected LEDs

  编译

  make uImage

  重新烧写系统并启动GPIO_LED操作设备文件目录

  启动系统后即存在/sys/class/leds/user_led目录,使用ls即可看到

  $ ls /sys/class/leds/user_led

  操作示例

  1)置NANDF_CS0为1

  $ echo 1 > /sys/class/leds/user_led/brightness

  2)置NANDF_CS0为0

  $ echo 0 > /sys/class/leds/user_led/brightness

  GPIO按键

  GPIO按键以GPIO_4、EIM_BCLK、CSI0_DATA_EN为例,分别是原理图的按键SW2,SW3和SW4。

  修改.h文件

  1)查找头文件中对PAD的配置

  示例如下:

  $ sed -n "/PAD_GPIO_4/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_EIM_BCLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_CSI0_DATA_EN/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  2)注释头文件中对PAD的配置

  示例如下:

  $ sed -i "s/MX6Q_PAD_GPIO_4/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -i "s/MX6Q_PAD_EIM_BCLK/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -i "s/MX6Q_PAD_CSI0_DATA_EN/// &/g" arch/arm/mach-mx6/board-mx6q_sabresd.h

  3)在mx6q_sabresd_pads中添加对PAD的配置

  配置GPIO_4功能为MX6Q_PAD_GPIO_4__GPIO_1_4

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_GPIO_4__GPIO_1_4," arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置EIM_BCLK功能为MX6Q_PAD_EIM_BCLK__GPIO_6_31

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_EIM_BCLK__GPIO_6_31," arch/arm/mach-mx6/board-mx6q_sabresd.h

  配置CSI0_DATA_EN的PAD功能为MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  示例如下:

  $ sed -i "/mx6q_sabresd_pads/a\ MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20," arch/arm/mach-mx6/board-mx6q_sabresd.h

  4)查看修改结果

  示例如下:

  $ sed -n "/PAD_GPIO_4/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_EIM_BCLK/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  $ sed -n "/PAD_CSI0_DATA_EN/p" arch/arm/mach-mx6/board-mx6q_sabresd.h

  修改.c文件

  1)检查.c文件中GPIO是否被重复使用

  示例如下:

  $ sed -n ‘/IMX_GPIO_NR(1,.4)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  $ sed -n ‘/IMX_GPIO_NR(6,.31)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  $ sed -n ‘/IMX_GPIO_NR(5,.20)/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  2)在.c文件中增加GPIO的宏定义

  MX6Q_PAD_GPIO_4__GPIO_1_4

  在.c文件中添加#define SABRESD_POWER_OFF IMX_GPIO_NR(1, 4)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_POWER_OFF IMX_GPIO_NR(1, 4)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  在.c文件中添加#define SABRESD_VOLUME_UP IMX_GPIO_NR(6, 31)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_VOLUME_UP IMX_GPIO_NR(6, 31)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  MX6Q_PAD_CSI0_DATA_EN__GPIO_5_20

  在.c文件中添加#define SABRESD_VOLUME_DN IMX_GPIO_NR(5, 20)

  示例如下:

  $ GPIO_DEFINE="#define SABRESD_VOLUME_DN IMX_GPIO_NR(5, 20)"

  $ sed -i "1,/#define/{/#define/s/#define/${GPIO_DEFINE} &/}" arch/arm/mach-mx6/board-mx6q_sabresd.c

  3)检查gpio_keys_button类型的数据定义

  示例如下:

  $ sed -n ‘/gpio_keys_button/,/}/p‘ arch/arm/mach-mx6/board-mx6q_sabresd.c

  4)增加volume-up、volume-down、power的数据定义

  static struct gpio_keys_button imx6q_buttons[] = {

  GPIO_BUTTON(SABRESD_VOLUME_UP, KEY_VOLUMEUP, 1, "volume-up", 0, 1),

  GPIO_BUTTON(SABRESD_VOLUME_DN, KEY_VOLUMEDOWN, 1, "volume-down", 0, 1),

  GPIO_BUTTON(SABRESD_POWER_OFF, KEY_POWER, 1, "power", 1, 1),

  };

  内核配置

  菜单定位:

  Device Drivers ---> Input device support ---> Keyboards ---> <*> GPIO Buttons

  编译

  make uImage

  重新烧写系统并启动GPIO按键操作GPIO_KEYS设备

  启动系统后即存在/sys/devices/platform/gpio-keys目录,使用ls即可看到

  $ ls /sys/devices/platform/gpio-keys

  查看设备信息

  在proc文件系统下可以看到相关信息

  $ cat /proc/bus/input/devices

  设备文件

  event0即对应gpio按键对应的设备文件,使用ls可以查看:

  $ ls /dev/input/event0 –la

  操作示例

  见Linux测试手册

我要评论:  
*内 容:
验证码: 换一张
 

共有0条评论

还在等什么,赶紧来评论!