|
这3个问题相互关联,我一起回答
首先,dts/dtsi 存在 include 关系,上层的会覆盖掉下层的,比如
A include B include C,uart9 在 C 中是 enable,在 A 中是 disabled,那最终生效的结果是 disabled
其次,仅仅使能是不行的,还需要把复用的其他功能关闭,同时只能有一个功能开启
复用关系需要查看芯片的datasheet
pinctrl 很重要,它决定使用哪一个引脚
举例:
现在需要使用 UART9,查看硬件原理图,uart9 连接的引脚是 uart9_rx_m1 和 uart9_tx_m1
可以看到此处是 m1 ,查阅芯片手册 datasheet,uart9的m1组复用关系如下:
PWM12_M1/SPI3_MISO_M1/SATA1_ACT_LED/UART9_TX_M1/I2S3_SDO_M1/GPIO4_C5_d
PWM13_M1/SPI3_CS0_M1/SATA0_ACT_LED/UART9_RX_M1/I2S3_SDI_M1/GPIO4_C6_d
此时需要查看dts,pwm12是否开启?如果开启了,查看它的pinctrl是否使用了m1组?这里需要查看所有关联的dts和dtsi,不能只看一个,根据开头讲的include关系找出最终生效的结果:
假如pwm12最终生效是disable状态,那不管,不会起冲突
假如pwm12最终生效是enable状态,pinctrl是m0组,那不管,因为是m0组,也不会和uart9 m1起冲突
假如pwm12最终生效是enable状态,pinctrl是m1组,那就需要改为disabled才能使用uart9 m1
以此类推去排查pwm13,spi3,sata0,i2s3等等
排查结束,解决完冲突后,再把uart9 enable,并将pinctrl设置为m1,即
pinctrl-0 = <&uart9m1_xfer>;
所以pinctrl这句设置与否是根据实际情况来的 |
|