Zynq MPSOC中一个MIO冲突问题的解决方法记录

在Xilinx Zynq MPSOC项目中遇到MIO41管脚被硬件看门狗和SD卡共享导致冲突。通过查阅芯片手册和内核驱动,了解到MIO41的复用功能。通过打印代码查看管脚分配,并参考内核文档理解devicetree中的管脚定义。最终选择sdio1_2_grp避免冲突,修改devicetree后,成功解决了看门狗和SD卡的共用问题。

1、问题描述

环境:所采用的处理器:Xilinx的Zynq MPSOC—XCZU3EG,操作系统是嵌入式Linux。
在项目调试中发现:硬件看门狗芯片的喂狗信号使用了MPSOC的MIO41,而SD卡(SD1口,ff170000.mmc)的管脚中也使用到了MIO41,从而导致了:要么SD卡不能使用,要么不能喂狗系统反复重启。
这个问题并不难解决,合理的解决方法是:在kernel的devicetree中,重新分配MIO41管脚,避免冲突。
然而,devicetree中与管脚定义、分配的内容很多,如何修改呢?本文将解决的过程记录如下,期望对遇到类似的问题的人能有所帮助。

2、解决过程

1、查阅MPSOC的芯片手册《ug1085-zynq-ultrascale-trm.pdf》p789页“MIO Table at a glance”,可以看到MIO41有多个功能复用;

2、在内核驱动中增加打印代码,待pinctrl初始化完成后,将管脚的复用信息打印出。添加的printk代码在:drivers/pinctrl/pinctrl-zynqmp.c::zynqmp_pinctrl_group_add_pin()
与MIO41相关的输出是如下形式:

[    1.224792] ...After:grp_name: ethernet1_0_grp,  pin:41
[    1.224799] ...After:grp_name: sdio0_1_grp,  pin:41
[    1.224806] ...After:grp_name: sdio1_0_grp,  pin:41
[    1.224813] ...After:grp_name: gpio0_41_grp,  pin:41
[    1.224821] ...After:grp_name: can1_10_grp,  pin:41
[    1.224827] ...After:grp_name: i2c1_10_grp,  pin:41
[    1.224834] ...After:grp_name: pjtag0_3_grp,  pin:41
[    1.224841] ...After:grp_name: spi0_ss_9_grp,  pin:41
[    1.224848] ...After:grp_name: ttc3_wav_5_grp,  pin:41
[    1.224855] ...After:grp_name: uart1_10_grp,  pin:41
[    1.224862] ...After:grp_name: trace0_1_grp,  pin:41
[    1.224869] ...After:grp_name: sdio0_5_grp,  pin:41
[    1.224876] ...After:grp_name: sdio0_17_grp,  pin:41
[    1.224883] ...After:grp_name: sdio1_1_grp,  pin:41
[    1.224890] .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值