请教openwrt系统gpio控制问题

shaneL90 2014-06-15 11:45:39

最近在调试openwrt(rt5350方案) gpio控制功能,系统启动后默认只有一个gpio(gpio0 led专用)口可以控制。于是仿照leds-gpio驱动做了两个相同的驱动,并开启两个不同的gpio口(gpio1 gpio2),程序启动后打印如下:
[ 8.210000] leds-gpio gpio-leds.5: pins are not configured from the driver //这个是leds-gpio驱动打印的,这个gpio0是可以控制的
[ 8.220000] leds-gpio gpio-zigbee0.6: pins are not configured from the driver //这个是仿照leds-gpio些的,gpio1不可控制
[ 8.240000] rt2880-pinmux pinctrl.1: pin 1 is not set to gpio mux //这里说是未设置gpio mux
[ 8.250000] rt2880-pinmux pinctrl.1: request() failed for pin 1
[ 8.260000] rt2880-pinmux pinctrl.1: pin-1 (pio:1) status -22
[ 8.270000] leds-gpio gpio-zigbee1.7: pins are not configured from the driver //这个也是仿照leds-gpio些的,gpio2不可控制
[ 8.290000] rt2880-pinmux pinctrl.1: pin 2 is not set to gpio mux
[ 8.300000] rt2880-pinmux pinctrl.1: request() failed for pin 2
[ 8.310000] rt2880-pinmux pinctrl.1: pin-2 (pio:2) status -22

于是通过打印信息找到\trunk\build_dir\target-mipsel_24kec+dsp_uClibc-0.9.33.2\linux-ramips_rt305x\linux-3.10.36\arch\mips\ralink\Rt305x.c中存在gpio mux相关设置信息
static struct rt2880_pmx_func i2c_func[] = { FUNC("i2c", 0, 1, 2) }; //默认i2c占用了gpio 1 和2
于是做如下调整
static struct rt2880_pmx_group rt5350_pinmux_data[] = {
GRP("i2c", i2c_func, 0,RT305X_GPIO_MODE_JTAG),//此处将第三个参数设置成0,之后上面的pin 1 /2 is not set to gpio mux信息未出现
GRP("spi", spi_func, 1, RT305X_GPIO_MODE_SPI),
GRP("uartf", uartf_func, RT305X_GPIO_MODE_UART0_MASK,
RT305X_GPIO_MODE_UART0_SHIFT),
GRP("uartlite", uartlite_func, 1, RT305X_GPIO_MODE_UART1),
GRP("jtag", jtag_func, 1, RT305X_GPIO_MODE_JTAG),
GRP("led", rt5350_led_func, 1, RT5350_GPIO_MODE_PHY_LED),
{ 0 }
};
此时gpio-zigbee0.6 及gpio-zigbee1.7 leds驱动可以操作gpio1 、2的设备节点,但对其设置高电平或低电平无效,怀疑是驱动问题,于是
删掉我写的驱动,重新编译,用/sys/class/gpio/export系统自带的gpio操作接口导出gpio后,改变其电压也无效,操作过程,及返回结果如下:
root@OpenWrt:/sys/devices/10000000.palmbus/10000600.gpio/gpio/gpio1# cat direction
out
root@OpenWrt:/sys/devices/10000000.palmbus/10000600.gpio/gpio/gpio1# cat value
0
root@OpenWrt:/sys/devices/10000000.palmbus/10000600.gpio/gpio/gpio1# echo "1">value
root@OpenWrt:/sys/devices/10000000.palmbus/10000600.gpio/gpio/gpio1# cat value
0


不知是否有其他位置需要调整,才能正常控制gpio,有知道的请告知!!!!
...全文
6307 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fans1314 2015-12-04
  • 打赏
  • 举报
回复
哥,,帖子写得真好!! 我的QQ:172809727,,殷切希望能和你交流
zhoushenglin520 2015-11-18
  • 打赏
  • 举报
回复
引用 12 楼 wangchenxicool 的回复:
您好!我也遇到了和您一样的问题。 但我按照您说的,修改dts文件,打开gpio。 没有效果呀。 您可以把具体的修改方法贴出来吗?
请问你的问题解决了吗?
wangchenxicool 2015-10-10
  • 打赏
  • 举报
回复
您好!我也遇到了和您一样的问题。 但我按照您说的,修改dts文件,打开gpio。 没有效果呀。 您可以把具体的修改方法贴出来吗?
saytal 2014-09-09
  • 打赏
  • 举报
回复
在 rt5350.dtsi文件中打开gpio功能?是指status="okay"吗?
u010333228 2014-08-19
  • 打赏
  • 举报
回复
楼主,请问是在哪个目录下找到t5350.dtsi文件的,如何开启gpio功能?
shaneL90 2014-08-11
  • 打赏
  • 举报
回复
ok 问题已经解决,主要是在 rt5350.dtsi文件中打开gpio功能就行了
刘杰克 2014-08-07
  • 打赏
  • 举报
回复
GPIO都有多种模式,Uboot里面或者kernel里面都可以设置,你最好找到芯片的datasheet看看,再修改kernel中关于gpio的代码
shaneL90 2014-06-30
  • 打赏
  • 举报
回复
引用 6 楼 maozheng110 的回复:
是不是要改uboot啊, 按理说有28个GPIO可用
请问 uboot 如何修改??一般主板启动后跟uboot应该没直接关系。
maozheng110 2014-06-27
  • 打赏
  • 举报
回复
是不是要改uboot啊, 按理说有28个GPIO可用
shaneL90 2014-06-18
  • 打赏
  • 举报
回复
其实关键问题不在 gpio控制程序,相同的控制代码,不同的控制结果,因此问题很有可能是在rt2880-pinmux pinctrl.1 系统中,该模块可能存在bug。多谢版主的耐心回答,这个可能需要个人深入研究了。
曹大夯 2014-06-17
  • 打赏
  • 举报
回复
不太明白具体细节。
引用 1 楼 a181622974 的回复:
系统启动后默认只有一个gpio(gpio0 led专用)口可以控制。于是仿照leds-gpio驱动做了两个相同的驱动,并开启两个不同的gpio口(gpio1 gpio2)
这个能再详细点描述一下么? 修改已有的驱动去控制更多的gpio口不可以么?
曹大夯 2014-06-17
  • 打赏
  • 举报
回复
那你说的“于是仿照leds-gpio驱动做了两个相同的驱动”是怎么做的? 修改leds-gpio的代码或者配置是不是比写新的驱动更合适?一个驱动程序驱动多个GPIO Pin应该是可以实现的。
shaneL90 2014-06-17
  • 打赏
  • 举报
回复
引用 2 楼 Huntercao 的回复:
不太明白具体细节。 修改已有的驱动去控制更多的gpio口不可以么?
这段话说的可能有点啰嗦,我想表达的意思是除了gpio0以外,其他的gpio(gpio1-24)均不能被使用,就算我用这个led驱动打开了他,还是无法使用,比如我用led驱动控制gpio1脚 为高电压但用 万用表检测时电压仍为低电压。
shaneL90 2014-06-16
  • 打赏
  • 举报
回复
自己顶下!!!

679

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧