RZ/G2UL微处理器配备Cortex-A55(1.0 GHz)CPU、16位DDR3L/DDR4接口以及简单的LCD控制器。此外,这款微处理器还配备有大量接口,如摄像头输入、显示输出、USB 2.0和千兆以太网,因此特别适用于入门级工业网关控制器和具有简单GUI功能的嵌入式设备等应用。


G2UL共有361个引脚,分布着不同的功能。


对于刚接触产品的用户或者在PCB调试前期,对引脚的使用不可避免有各种疑惑和问题,比如,规格标有361个引脚,但是GPIO为什么只支持82个?单个引脚又如何确认使用的是哪个功能?

为什么要有引脚复用和重定义功能?
节省资源:引脚复用和重定义功能可以允许多个功能共享相同的物理引脚,从而节省了硬件资源。
灵活性和适应性:引脚复用和重定义功能使得设计能够灵活地适应不同的需求和变化的规格。通过重新配置引脚功能,可以实现不同的连接和交互方式,提高了系统的适应性和灵活性。
减少设计复杂性:引脚的复用和重定义功能可以简化电路板布局和设计。通过减少所需的物理引脚数量,可以降低设计的复杂性和成本,并简化整体设计流程。
在PCB板功能调试中,如果某个外围端口功能异常,我们首先需要排查的是引脚功能配置是否正确。下面介绍一些常用的手段。
我们以P5_0引脚举例分析,该引脚支持4个功能,软件该如何配置?

在Linux系统中,内核都使用设备树(DTS)配置功能引脚和pinctrl软件框架进行初始化,但最终本质都是操作寄存器。
P5_0配做scif2 Tx端口,如RZG2L_PORT_PINMUX,(5,0,2),为引脚配置接口,对应GPIO P5_0 Function2:

如果终端打印出以下信息,可以直接在.r9a07g043u11-smarc.dtb.dts.tmp文件中查找冲突,在源文件把不需要的配置屏蔽:



对如上(5)*8详细理解,参考WIKI链接。

另外一种方法查找手册,分析寄存器值。主要涉及PMC(端口模式控制)/PFC(端口功能控制)寄存器。
通过手册查找P5_0引脚对应的PMC和PFC寄存器偏移地址和对应的bit位信息。




查取A55寄存器基地址:

Linux系统可以使用devmem(可以在yocto工程内编译)工具读取寄存器值(寄存器地址为基地址加偏移地址):

上边获取的两个值为十六进制,0x1D和0x51101,转换为二进制如下:


Pinctrl驱动加调试信息分析调用关系,内核节点分析。
左右滑动查看完整内容
diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
index 30140def2e28..fc9753419163 100644
--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
@@ -349,6 +349,13 @@ staticintrzg2l_pinctrl_set_mux(struct pinctrl_dev *pctldev,
dev_dbg(pctrl->dev, "port:%u pin: %u PSEL:%u
",
RZG2L_PIN_ID_TO_PORT(pins[i]), RZG2L_PIN_ID_TO_PIN(pins[i]),
psel_val[i]);
+ if(5 == RZG2L_PIN_ID_TO_PORT(pins[i]))
+ {
+ dev_err(pctrl->dev, "port:%u pin: %u PSEL:%u
",
+ RZG2L_PIN_ID_TO_PORT(pins[i]), RZG2L_PIN_ID_TO_PIN(pins[i]),
+ psel_val[i]);
+ dump_stack();
+ }
rzg2l_pinctrl_set_pfc_mode(pctrl, RZG2L_PIN_ID_TO_PORT_OFFSET(data),
RZG2L_PIN_ID_TO_PIN(pins[i]), psel_val[i]);
}
左右滑动查看完整内容
[ 0.193120] pinctrl-rzg2l 11030000.pinctrl: pinctrl-rzg2l support registered [ 0.193788] pinctrl-rzg2l 11030000.pinctrl: port:5 pin: 0 PSEL:1 [ 0.193819] CPU: 0 PID: 78 Comm: kworker/0:3 Not tainted 5.10.184-cip36-yocto-standard #1 [ 0.193836] Hardware name: Renesas SMARC EVK based on r9a07g043u11(DT) [ 0.193867] Workqueue: events deferred_probe_work_func [ 0.193885] Call trace: [ 0.193902] dump_backtrace+0x0/0x1c0 [ 0.193917] show_stack+0x18/0x38 [ 0.193933] dump_stack+0xf0/0x12c [ 0.193948] rzg2l_pinctrl_set_mux+0xec/0x2b0 [ 0.193964] pinmux_enable_setting+0x118/0x290 [ 0.193979] pinctrl_commit_state+0x94/0x178 [ 0.193992] pinctrl_select_state+0x1c/0x30 [ 0.194008] pinctrl_bind_pins+0xf4/0x148 [ 0.194023] really_probe+0x84/0x3e8 [ 0.194036] driver_probe_device+0x58/0xf0 [ 0.194050] __device_attach_driver+0xb8/0xe0 [ 0.194063] bus_for_each_drv+0x7c/0xd0 [ 0.194077] __device_attach+0xec/0x180 [ 0.194089] device_initial_probe+0x14/0x20 [ 0.194103] bus_probe_device+0x9c/0xa8 [ 0.194116] deferred_probe_work_func+0x88/0xc0 [ 0.194132] process_one_work+0x1e8/0x380 [ 0.194147] worker_thread+0x210/0x4a0 [ 0.194160] kthread+0x154/0x158 [ 0.194174] ret_from_fork+0x10/0x30 ……
Linux系统节点信息确认:


以上就是常用的引脚使用分析方法。
全部0条评论
快来发表一下你的评论吧 !