概述
本文我们讲述RK3506 Linux平台上在驱动适配的过程中,常常用到的引脚复用的配置方法。我第一次帮一个朋友解决RK3506 Linux上的引脚复用配置的时候,他写的引脚复用的配置信息跟我之前熟悉的RK3288、RK3399、RK3568、RK3588等平台都不一样,我当时就大言不惭的告诉他,写错了,后来,等我真正接触到RK3506的时候,才发现是我错了,是我用固有的经验去考虑问题了。这也反映出一个问题,作为一个技术人员,我们还是要不断的学习的,不断的提高自己的认识,这样才能不被这个社会淘汰;
引脚复用的配置
RK3506平台上IO引脚的复用配置,我们可以分为两种情况,通用IO引脚的复用配置和RM_IO引脚复用的配置。
通用IO复用的配置
通用IO的引脚配置,就是我们使用的IO引脚不是RM_IO类型的。比如:
在UART5的引脚复用配置中,它使用的GPIO3_B4和GPIO3_B3,我们添加uart5的引脚复用配置信息:&uart5 { pinctrl-0 = <&uart5m0_xfer_pins>; status = "okay";};
我们使用的了uart5m0_xfer_pins 这组引脚配置。我们可以从:RK3506_Linux/kernel/arch/arm/boot/dts/rk3506-pinctrl.dtsi文件中得到它的配置信息[......] uart5 { /omit-if-no-ref/ uart5m0_xfer_pins: uart5m0-xfer-pins { rockchip,pins =/* uart5_rx_m0 */ <3 RK_PB3 1 &pcfg_pull_up>, ---------------------(1)/* uart5_tx_m0 */ <3 RK_PB4 1 &pcfg_pull_up>; ----------------------(2) }; [......] };
(1)设置RK_PB3引脚作为UART5的RX引脚;
(2)设置RK_PB4引脚作为UART5的TX引脚;
我们可以总结一个小技巧,对于没有使用RM_IO引脚复用配置,我们直接在rk3506-pinctrl.dtsi中查找;
RM_IO引脚复用的配置
RM_IO这组io引脚,它的引脚复用功能非常多。因此RK单独用rk3506-pinctrl-rmio.dtsi文件进行管理,比如:
uart3我们使用了RM_IO15和RM_IO14引脚,因此它的IO引脚复用配置如下:&uart3 { pinctrl-0 = <&rm_io14_uart3_tx &rm_io15_uart3_rx>; ------------- (1) status = "okay"; ------------- (2)};
(1)设置RM_IO14引脚作为UART3的TX引脚;
(2)设置RM_IO15引脚作为UART3的RX引脚;
rm_io14_uart3_tx和rm_io15_uart3_rx,我们可以从RK3506_Linux/kernel/arch/arm/boot/dts/rk3506-pinctrl-rmio.dtsi文件中得到它的配置信息
rm_io14 {/omit-if-no-ref/ [......] /omit-if-no-ref/ rm_io14_uart3_tx: rm-io14-uart3-tx { rockchip,pins = <0 RK_PB6 20 &pcfg_pull_none>; }; rm_io15 { [.....] /omit-if-no-ref/ rm_io15_uart3_rx: rm-io15-uart3-rx { rockchip,pins = <0 RK_PB7 21 &pcfg_pull_up>; };
我们可以总结一个小技巧,对于使用RM_IO引脚复用配置,我们直接在rk3506-pinctrl-rmio.dtsi中查找;
RM_IO的引脚复用功能非常多,感兴趣的同学可以阅读rk3506-pinctrl-rmio.dtsi文件中获取详细的配一个引脚支持的功能;
总结
本文讲述了在RK3506 Linux平台上IO引脚复用的配置方法,下一章,我们开启CAN模块;