您的位置:首页 > 运维架构

openwrt-dts-gpio-控制LTE上电及LED点亮

2015-10-23 17:09 721 查看
记录一下

板子MT7620 16+64 

最近在弄LTE/4G的移植.当kernel添加了usb cdc-acm rndis以后。发现板子没有发现LTE模块。

在LTE模块上接上串口,没有打印输出。

测量电压发现电压也不对。

于是猜测LTE模块没有上电。

查找MT7620 datasheet 查找GPIO给LTE模块上电的GPIO口。

通过电路图发现,GPIO为 11 低电平 则给模块上电。

于是在/sys/class/gpio 下面 输入如下命令:

echo 11 > export

[ 1572.890000] rt2880-pinmux pinctrl: pin 66 is not set to gpio mux

[ 1572.910000] rt2880-pinmux pinctrl: request() failed for pin 66

[ 1572.920000] rt2880-pinmux pinctrl: pin-66 (pio:66) status -22

ash: write error: Invalid argument

提示如上错误。

这是因为11管脚被复用了.

所以要对它进行解复用.(这块我自已也搞糊涂了,不清楚是要解复用还是要复用。希望清楚的同学帮忙指证一下。)

于是就要想办法把管脚11的GPIO文件给搞出来。于是研究了一下DTS 中GPIO相关的东西。

//这篇文档给了我极大的帮助。

//它详细的解释了,如何解释了GPIO的对应关系,如何设置等方法
http://wiki.wrtnode.com/index.php?title=Released_multiused_GPIO_and_register_gpio-leds/zh-cn
直接把内容贴过来了。

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个;
对应GPIO4对应的是GPIO#72,仅有一个。










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



释放gpio引脚复用功能:



引脚复用的定义在$(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



同理,其他复用引脚的定义一样。



下面就来看如何在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)




通过上面的内容,了解了如何查看GPIO的值,以及映射关系。然后查看mt7620.c文件。

查找GPIO11是跟谁对应的。

从代码中可以看到,是uartf。

然后就是将uartf 添加到对应的DTS文件中.

改好了以后,重新编译。

烧到板子中去。

到/sys/class/gpio/下面去执行命令:

echo 11 > export

root@OpenWrt:/sys/class/gpio# ls

export      gpio11      gpiochip0   gpiochip24  gpiochip40  unexport

gpio11已经出来了。

cd gpio11

echo 0 > value  

这样就是把GPIO11设置为低电平:然后就看到串口出现了讨喜的打印:

[   88.000000] usb 1-1: new high-speed USB device number 2 using ehci-platform

a[   88.290000] cdc_acm 1-1:1.0: This device cannot do calls on its own. It is not a modem.

[   94.340000] usb 1-1: USB disconnect, device number 2

[   98.720000] usb 1-1: new high-speed USB device number 3 using ehci-platform

/[   98.910000] cdc_ether 1-1:2.0 eth1: register 'cdc_ether' at usb-101c0000.ehci-1, CDC Ethernet Device, 00:11:22:33:44:56

[   99.030000] cdc_acm 1-1:2.2: This device cannot do calls on its own. It is not a modem.

[   99.040000] cdc_acm 1-1:2.2: ttyACM0: USB ACM device

[   99.090000] cdc_acm 1-1:2.4: This device cannot do calls on its own. It is not a modem.

[   99.100000] cdc_acm 1-1:2.4: ttyACM1: USB ACM device

d[   99.110000] cdc_acm 1-1:2.6: This device cannot do calls on its own. It is not a modem.

[   99.130000] cdc_acm 1-1:2.6: ttyACM2: USB ACM device

root@OpenWrt:/sys/devices/10000000.palmbus/10000600.gpio/gpio/gpio11# ls /dev/ |

grep tty

tty

ttyACM0

ttyACM1

ttyACM2

ttyS0

ttyS1

已经可以看到ACM0 ACM1 ACM2了。

至此GPIO相关东西结束。

有送4G/LTE移植的相关东西.详见我的另一篇文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: