gavin_guo 发表于 2023-1-17 18:01:36

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

本帖最后由 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)

#defineMX6Q_PAD_NANDF_CS1__RAWNAND_CE1N                        (_MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N | MUX_PAD_CTRL(NO_PAD_CTRL))
#defineMX6Q_PAD_NANDF_CS1__USDHC4_VSELECT                      (_MX6Q_PAD_NANDF_CS1__USDHC4_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#defineMX6Q_PAD_NANDF_CS1__USDHC3_VSELECT                      (_MX6Q_PAD_NANDF_CS1__USDHC3_VSELECT | MUX_PAD_CTRL(MX6Q_USDHC_PAD_CTRL))
#defineMX6Q_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))
#defineMX6Q_PAD_NANDF_CS1__GPIO_6_14                           (_MX6Q_PAD_NANDF_CS1__GPIO_6_14 | MUX_PAD_CTRL(MX6Q_KERNEL_PAD_CTRL))
#defineMX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT   (_MX6Q_PAD_NANDF_CS1__PL301_MX6QPER1_HREADYOUT | MUX_PAD_CTRL(NO_PAD_CTRL))


金色田野的灿烂 发表于 2023-2-27 16:43:23

看您更改的没什么问题,您那边是自制底板还是出常原一套开发板呢。

gavin_guo 发表于 2023-3-5 16:53:35

金色田野的灿烂 发表于 2023-2-27 16:43
看您更改的没什么问题,您那边是自制底板还是出常原一套开发板呢。

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

金色田野的灿烂 发表于 2023-3-14 13:50:38

gavin_guo 发表于 2023-3-5 16:53
自己的板子上,三四个开发板上用的io,一样也无法操控

你看看在uboot中是不是之前的引脚还被复用着,之前本身就是拉高的。您要复用成lvds的需要重新改。
页: [1]
查看完整版本: imx6q,3.0.35版本,特定一个GPIO在kenerl中可以控制,在uboot中无法控制