问题现象: - 1、在上电一段时间(毫秒级)后才出现了一个低电平(持续800ns左右),这个时候的电源是稳定的;
- 2、上电后在用POR引脚复位核心板,也是会出现这个脉冲的;
- 3、在软件上把这个引脚的配置去掉之后就没有这个脉冲了,但是过几秒之后这个电平会变成低电平;
- 4、将该引脚悬空,现象相同;
- 5、注释掉设置状态的代码,GPIO口会持续为低(ms级),注释掉配置GPIO口的代码后,会持续为高电平;
- 6、客户使用老版本资料uboot2015的时候就没有出现过脉冲的情况
-
- 排查根本原因:
imx_iomux_v3_setup_pad(MX6Q_PAD_GPIO_9__GPIO_1_9);
gpio_direction_output(IMX_GPIO_NR(1, 9),1);
实际测试与排查,该800ns脉冲与pin_mux的配置函数无关,因为适当在两个函数间加延时,测量会发现,800ns会累加到延时之后。所以800ns的延时是gpio_direction_output函数造成的。 先看uboot2016和uboot2015的实现逻辑
  可以通过以上知道,uboot2009有脉冲的原因是,在执行完成mxc_gpio_direction函数设置好gpio输出方向后再设置value值,gpio_set_value之前的这段时间没有需要输出的value值导致的,就默认拉低。uboot2015/uboot2016没有脉冲是因为他的操作是关闭gpio方向为输入的使能后,设置好value值,再设置方向为输出模式,中间没有间断。 可以知道这部分的区别已经在高版本的uboot中使用最新的方式了。由于uboot2009太老了,当时提供的mxc_gpio_direction函数本身就是存在这种问题的。 |