关于正点原子阿尔法IMX6ULL的第45章pinctrl和gpio子系统中的灯点不亮的解决办法

在【正点原子】I.MX6U 常见问题汇总V1.0.pdf  文档中的2.6.16中有对应的解决方法。

设备树修改:
                          pinctrl_enet1: enet1grp {
                        fsl,pins = <
                                MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN        0x1b0b0
                                MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER        0x1b0b0
                                MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00        0x1b0b0
                                MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01        0x1b0b0
                                MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN        0x1b0b0
                                MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00        0x1b0b0
                                MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01        0x1b0b0
                                MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1         0x4001b009
 +                               /*MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0*/

                        >;
                };

                pinctrl_enet2: enet2grp {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO07__ENET2_MDC                0x1b0b0
                                MX6UL_PAD_GPIO1_IO06__ENET2_MDIO        0x1b0b0
                                MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN        0x1b0b0
                                MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER        0x1b0b0
                                MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00        0x1b0b0
                                MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01        0x1b0b0
                                MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN        0x1b0b0
                                MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00        0x1b0b0
                                MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01        0x1b0b0
                                MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2         0x4001b009
     +                           /*MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08                0x10B0*/
                               
                        >;
                };

&iomuxc_snvs {
    pinctrl-names = "default_snvs";
        pinctrl-0 = <&pinctrl_hog_2>;
        imx6ul-evk {
        pinctrl_hog_2: hoggrp-2 {
                        fsl,pins = <
                                MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00      0x80000000

  +                              MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08       0x10B0

 +                              MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07     0x10B0
                        >;
                };

.............

        };
};
-----------------------------------------------------------------------------------------------------------

LED灯不亮的原因分析:


 (IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03)
Address: 20E_0000h base + 68h offset = 20E_0068h

(IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03)
Address: 20E_0000h base + 2F4h offset = 20E_02F4h

imx6ull-pinfunc-snvs.h中

#define MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07                        0x0024 0x0068 0x0000 0x5 0x0
#define MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08                        0x0028 0x006C 0x0000 0x5 0x0

 <mux_reg             conf_reg                 input_reg         mux_mode         input_val>

mux寄存器地址    PAD寄存器地址

上述的非SNVS引脚基地址是20E_0000h(SNVS引脚基地址是229_0000H)  ,因为

MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07                        0x0024 0x0068 0x0000 0x5 0x0中的PAD偏移地址是0x0068,

那么SNVS引脚放错到非SNVS时的地址就是20E_0000h base + 0x0068 offset = 20E_0068h 那么就会与LED使用的GPIO1_IO03的MUX寄存器的地址20E_0068h 一模一样,因此,就会引起冲突,导致设备树和驱动文件都编译没错,但是灯就是不亮的原因。

   所以,就要把设备树的中 MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 这个语句,放到iomuxc_snvs节点里面,所有有关SNVS的引脚都需要放到iomuxc_snvs节点里面!!!

        修改后就可以重新使led重新亮起来了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值