GPIO资源

来自WRTnode Wiki
跳转至: 导航搜索
此页面有未被标记进行翻译的更改

其他语言:
English • ‎中文(中国大陆)‎

WRTnode1 GPIO

WRTnode1的GPIO的对应关系请参考mt7620的datasheet
WRTnode2的GPIO的对应关系请参考mt7688的datasheet

WRTnode1代的GPIO复用引脚定义

根据mt7620 datasheet中GPIO pin share schemes和WRTnode gpio引脚特征,可以用来自定义的gpio引脚如以下标注所示:
GPIO pin share schemes
GPIO1.png
GPIO2.png
注:红色框里的是结合WRTnode的接口参数得到的可以释放的gpio复用引脚。

DTS

mt7620n.dtsi里对gpio的注册
我们假定$(TOPDIR)为OpenWrt的编译目录
在$(TOPDIR)/target/linux/ramips/dts/mt7620n.dtsi里有对gpio的注册
注:结合mt7620的datasheet里GPIO pin share schemes以及在mt7620n.dtsi里我们看到有,将GPIO#0到GPIO#72(中间有仅仅做GPO或GPI的)分为四组GPIO0-GPIO3;
对应GPIO0是从GPIO#0开始到GPIO#23,一共有24个;对应GPIO1是从GPIO#24开始到GPIO#39,一共有16个;对应GPIO2是从GPIO#40开始到GPIO#71,一共有32个;
对应GPIO3对应的是GPIO#72,仅有一个。
Usergpio1.png
GPIO3.png
GPIO4.png

注册led、按钮等

在WRTNODE.dts里对led、keys等的注册
在$(TOPDIR)/target/linux/ramips/dts/WRTNODE.dts里可以来注册通过gpio接口控制的设备,如led、keys等
如果想用GPIO接口首先要使能GPIO并且释放gpio引脚复用功能:

使能GPIO

GPIO5.png

释放gpio引脚复用功能

GPIO6.png
引脚复用的定义在$(TOPDIR)/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620n/linux-3.10.28/arch/mips/ralink/mt7620.c
注:路径不一定为这个,根据你自己的内核版本,linux-3.10.xx
GPIO7.png
同理,其他复用引脚的定义一样。
GPIO8.png

dts里注册led、按钮

下面就来看如何在WRTNODE.dts里注册具体的gpio设备(led,key等等),注册的方法可以参照 $(TOPDIR)/target/linux/ramips/dts/RT-N14U.dts
注:dts里对设备的注册很简单,如gpio-leds的注册,compatible要与Led的驱动leds-gpio.c里compatible对应,label是设备的名字,设备注册成功,在WRTnode文件系统下就会有 /sys/class/leds/wrtnode:blue:wan ,
我们可以通过

echo 1 > /sys/class/leds/wrtnode\:blue\:wan/brightness
echo 0 > /sys/class/leds/wrtnode\:blue\:wan/brightness  来控制亮灭

gpios = <&gpio2 0 1>,这是指定对应的gpio引脚(GPIO#40)
GPIO9.png

WRTnode2R/2P GPIO

GPIO复用引脚定义

GPIO pin share schemes

2R-GPIO1.png
2R-GPIO3.png
2R-GPIO2.png
mt7628an.dtsi里对gpio的注册
我们假定$(TOPDIR)为OpenWrt的编译目录
在$(TOPDIR)/target/linux/ramips/dts/mt7628an.dtsi里有对gpio的注册,一共将GPIO分为三组,分别为gpio0、gpio1、gpio2
2R-GPIO4.png
每组gpio包含32个gpio;在WRTnode2R/2P上只用到了gpio0和gpio1两组。

添加led、按钮

注册

在WRTNODE2R.dts/WRTNODE2P.dts里对led、按键等的注册
在$(TOPDIR)/target/linux/ramips/dts/WRTNODE2R.dts(或WRTNODE2P.dts)里可以来注册通过gpio接口控制的设备,如led(gpio#44)、keys(gpio#5)等

         gpio-leds {
                compatible = "gpio-leds";
                indicator {
                label = "wrtnode:blue:indicator";
                gpios = <&gpio1 12 0>;
                };
          };	
          gpio-keys-polled {
		compatible = "gpio-keys-polled";
	 	#address-cells = <1>;
		#size-cells = <0>;
		poll-interval = <20>;
		reset {
			label = "reset";
			gpios = <&gpio0 5 1>;
			linux,code = <0x198>;
		};
	};

选择驱动

led驱动

Kernel modules  ---> LED modules    ---> <*> kmod-leds-gpio.......................................... GPIO LED support
                                         <*> kmod-ledtrig-usbdev............................... LED USB device Trigger

按键驱动

Kernel modules  --->Input modules   ---> <*>kmod-input-polldev........................... Polled Input device support
                                         -*- kmod-input-polldev........................... Polled Input device support
                                         -*- kmod-input-polldev........................... Polled Input device support

如果没有注册成功,可以查看mt7620.c,修改一下代码:
原代码:
̩$(TOPDIR)/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.20/arch/mips/ralink

static struct rt2880_pmx_func wled_kn_grp_mt7628[] = {
	FUNC("rsvd", 3, 35, 1),
	FUNC("rsvd", 2, 35, 1),
	FUNC("gpio", 1, 35, 1),
	FUNC("wled_kn", 0, 35, 1),
};
static struct rt2880_pmx_func wled_kn_grp_mt7628[] = {
	FUNC("rsvd", 3, 44, 1),
	FUNC("rsvd", 2, 44, 1),
	FUNC("gpio", 1, 44, 1),
	FUNC("wled_kn", 0, 44, 1),
};