嵌入式爱好者

查看: 3376|回复: 3

[Linux] imx6q,3.0.35版本,特定一个GPIO在kenerl中可以控制,在uboot中无法控制

[复制链接]

7

主题

14

帖子

55

积分

A40i/T3/T507/T527通行证i.MX6Q通行证AM335x通行证

扫一扫,手机访问本帖
发表于 2023-1-17 18:01:36 | 显示全部楼层 |阅读模式
本帖最后由 gavin_guo 于 2023-1-17 18:13 编辑

使用的是开发板上定义为LCD_nPWREN(NAND_CS1)的PIN,配置用做GPIO,用来控制LVDS背光电路的使能控制,现象是在kernel中可以有效操作该IO,但是在uboot中操作该IO,不起作用。目前的现象,看起来是setup_pad没有成功,因为reboot和上电启动,都是uboot无法操作成功,但是启动后kernel是操作成功的,此时使用看门狗直接复位系统,uboot里就可以成功操作该IO了。
特意使用kernel中一模一样的pad参数,依旧无法在uboot里成功操作。
kernel中使用如下:
在mx6_sabresd_board_init函数中PAD_CTL初始化为MX6Q_PAD_NANDF_CS1__GPIO_6_14,参数配置为最大上拉和中间性质的驱动能力:
#define MX6Q_HIGHEST_DRV        (PAD_CTL_PUS_22K_UP | PAD_CTL_DSE_60ohm)
#define SABRESD_DISP_PWR_EN        IMX_GPIO_NR(6, 14)
gpio_request(SABRESD_DISP_PWR_EN, "BL_PW_EN");
gpio_direction_output(SABRESD_DISP_PWR_EN, 0);

在uboot中的board_init函数中的setup_uart();初始化后面,执行如上的类似的代码,无法成功操作该IO:
mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT1__GPIO_1_17);        //lvds pwm
        mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_CMD__GPIO_1_18);        //hot
        mxc_iomux_v3_setup_pad(MX6Q_PAD_SD1_DAT3__GPIO_1_21);        //buzzer
        mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS1__GPIO_6_14);        //backlight

        //gpio_direction_input(GPIO_VOL_DN_KEY);
        gpio_direction_output(GPIO_LVDS_PWM, 0);
        gpio_direction_output(GPIO_HOT_PWR, 0);
        gpio_direction_output(GPIO_BUZZER_PWR, 0);

        gpio_request(SABRESD_DISP_PWR_EN, "BL_PW_EN");
        gpio_direction_output(SABRESD_DISP_PWR_EN, 0);        // 高电平关闭    2023.1.16
        gpio_set_value(SABRESD_DISP_PWR_EN, 0);

用直接操作寄存器的方法,也是同样的结果:
mxc_iomux_v3_setup_pad(MX6Q_PAD_NANDF_CS1__GPIO_6_14);

        reg = readl(GPIO6_BASE_ADDR + GPIO_GDIR);
        reg |= (1 << 14);
        writel(reg, GPIO6_BASE_ADDR + GPIO_GDIR);

        reg = readl(GPIO6_BASE_ADDR + GPIO_DR);
        reg &= ~(1 << 14);
        //reg |= (1 << 14);
        writel(reg, GPIO6_BASE_ADDR + GPIO_DR);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MX6Q_KERNEL_PAD_CTRL        (PAD_CTL_PUS_22K_UP | PAD_CTL_DSE_60ohm)

#define  MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N                        (_MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N | MUX_PAD_CTRL(NO_PAD_CTRL))
#define  MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT                      (_MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#define  MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT                      (_MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#define  MX6Q_PAD_NANDF_CS1__PCIE_CTRL_DIAG_STATUS_BUS_MUX_3     (_MX6Q_PAD_NANDF_CS1__PCIE_CTRL_DIAG_STATUS_BUS_MUX_3 | MUX_PAD_CTRL(NO_PAD_CTRL))
#define  MX6Q_PAD_NANDF_CS1__GPIO_6_14                           (_MX6Q_PAD_NANDF_CS1__GPIO_6_14 | MUX_PAD_CTRL(MX6Q_KERNEL_PAD_CTRL))
#define  MX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT   (_MX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT | MUX_PAD_CTRL(NO_PAD_CTRL))


回复

使用道具 举报

0

主题

32

帖子

123

积分

发表于 2023-2-27 16:43:23 | 显示全部楼层
看您更改的没什么问题,您那边是自制底板还是出常原一套开发板呢。

点评

自己的板子上,三四个开发板上用的io,一样也无法操控  详情 回复 发表于 2023-3-5 16:53
点评回复 支持 反对

使用道具 举报

7

主题

14

帖子

55

积分

A40i/T3/T507/T527通行证i.MX6Q通行证AM335x通行证

 楼主| 发表于 2023-3-5 16:53:35 | 显示全部楼层
金色田野的灿烂 发表于 2023-2-27 16:43
看您更改的没什么问题,您那边是自制底板还是出常原一套开发板呢。

自己的板子上,三四个开发板上用的io,一样也无法操控

点评

你看看在uboot中是不是之前的引脚还被复用着,之前本身就是拉高的。您要复用成lvds的需要重新改。  详情 回复 发表于 2023-3-14 13:50
点评回复 支持 反对

使用道具 举报

0

主题

32

帖子

123

积分

发表于 2023-3-14 13:50:38 | 显示全部楼层
gavin_guo 发表于 2023-3-5 16:53
自己的板子上,三四个开发板上用的io,一样也无法操控

你看看在uboot中是不是之前的引脚还被复用着,之前本身就是拉高的。您要复用成lvds的需要重新改。
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-23 21:17

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表