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
看您更改的没什么问题,您那边是自制底板还是出常原一套开发板呢。
自己的板子上,三四个开发板上用的io,一样也无法操控 gavin_guo 发表于 2023-3-5 16:53
自己的板子上,三四个开发板上用的io,一样也无法操控
你看看在uboot中是不是之前的引脚还被复用着,之前本身就是拉高的。您要复用成lvds的需要重新改。
页:
[1]