微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > i.MX6UL添加GPIO的方法基于飞凌嵌入式OKMX6UL开发板

i.MX6UL添加GPIO的方法基于飞凌嵌入式OKMX6UL开发板

时间:04-28 来源:互联网 点击:

注:i.MX6UL添加GPIO方法,使用平台为飞凌嵌入式OKMX6UL-C开发板,其它平台可参考使用

i.MX6UL开发板详情

http://www.forlinx.com/60.htm



方法一:采用iomux的方法

在设备树中iomux中添加复用gpio引脚如下,具体设置的上下拉电阻,驱动能力,查找i.MX6UL CPU手册,对应修改。

比如MX6UL_PAD_CSI_DATA00__GPIO4_IO21    0x3008

MX6UL_PAD_CSI_DATA01__GPIO4_IO22    0x1f0b1

MX6UL_PAD_CSI_DATA02__GPIO4_IO23    0x1f0b1

MX6UL_PAD_CSI_DATA03__GPIO4_IO24    0x1f0b1

MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09    0x1f0b1

MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08   0x1f0b1

MX6UL_PAD_JTAG_TDO__GPIO1_IO12        0x1f0b1

  

同时修改设备树文件中(其他地方复用引脚)

编译设备树。替换飞凌iMX6UL开发板中所用设备树。

此时可以使用echo命令进行控制:

命令为:

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

echo "out" > /sys/class/gpio/gpio$i/direction

或echo "in" > /sys/class/gpio/gpio$i/direction

echo "1" > /sys/class/gpio/gpio$i/value

echo "0" > /sys/class/gpio/gpio$i/value

echo $i > /sys/class/gpio/unexport

以控制GPIO4_IO22为例:

1. 计算对应sys/class/gpio的值GPIOn_IOx = (n-1)*32 + x

GPIO4_IO22=(4-1)*32+22=118

2. 将GPIO4_IO22设置为输出。

echo 118 > /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号

echo "out" > /sys/class/gpio/gpio118/direction 控制为输出

echo "1" > /sys/class/gpio/gpio118/value 输出为高电平

或者echo "0" > /sys/class/gpio/gpio118/value输出为低电平

echo 118  > /sys/class/gpio/unexport 通知系统取消导出

3. 将GPIO4_IO22设置为输入。

echo 118 > /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号

echo "in" > /sys/class/gpio/gpio118/direction 控制为输入

这时给该引脚接高电平,输入即为高电平,反之为低电平

echo 118  > /sys/class/gpio/unexport 通知系统取消导出

4. 另外客户可以自己通过shell文件来控制gpio做为输入或者输出。

4.1 GPIO输出测试

编写测试脚本 vi gpiotest_o.sh

#!/bin/bash

# gpio list gpio (bank-1)*32 + nr  

for test in 118 119 120 137 136 12

do

echo Exporting pin $test.

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

echo Setting pin $1.

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

echo  $1 > /sys/class/gpio/gpio$test/value

echo $test> /sys/class/gpio/unexport

done

echo complete

修改脚本执行权限:chmod u+x gpiotest_o.sh

测试gpio输出为低。进入到脚本所在路径:./gpiotest_o.sh  0

所有GPIO输出低电平 0V。

测试gpio输出为高电平。进入到脚本所在路径:./gpiotest_o.sh  1

所有GPIO输出高电平。输出的高电平,根据引脚所在的电源域不同,可能会有区别。

另外有些客户发现

echo 118 > /sys/class/gpio/export用于通知系统需要导出控制的GPIO引脚编号

echo "out" > /sys/class/gpio/gpio118/direction 控制为输出

echo "1" > /sys/class/gpio/gpio118/value 输出为高电平

cat /sys/class/gpio/gpio118/value 仍旧为0

原因如下图所示,客户可以从CPU手册中查找到相关内容:

输入模式读取的是psr的值。

读取output的value值是从PSR中读取的。而写入output值是写入到DR中的。可以通过设置SION位回环。

4.2 GPIO输入测试

编写测试脚本 vi gpiotest_i.sh

#!/bin/bash

# gpio list gpio (bank-1)*32 + nr  

for test in 118 119 120 137 136 12

do

echo Exporting pin $test.

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

echo  in > /sys/class/gpio/gpio$test/direction

gpioval=`cat  /sys/class/gpio/gpio$test/value`

echo GPIO $test = $gpioval

echo

echo $test> /sys/class/gpio/unexport

done

echo complete

修改脚本执行权限:chmod u+x gpiotest_i.sh

测试gpio输入为低。进入到脚本所在路径:./gpiotest_i.sh

所有GPIO输入为 0。

测试gpio输入为高电平,比如5v。进入到脚本所在路径:./gpiotest_i.sh

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top