TI中文支持网
TI专业的中文技术问题搜集分享网站

如何修改am335x的.dts文件

各位高手:

在用最新版本的processorSDK,想针对自己的板子对pinmux进行修改, 有几个小问题:

1) 哪里有文档说明如何修改.dts文件的吗?

2) 感觉pinmux的如何调用很不清楚,

    –    以uart0为例,am335x-evm.dts里面现有uart0_pins的定义,然后还有一个&uart0的定义,其中引用了uart0_pins;

    –    在mux.c里面还有一个 static struct module_pin_mux uart0_pin_mux[]的定义。

  搞不清楚.dts中的语法,究竟一个借口可以使用要怎么操作。

谢谢

Chris

Chris Zhao2:

有个例子就比较好了,想知道 .dts 和mux.c是怎么对应起来的

Jian Zhou:

回复 Chris Zhao2:

dts里面每个接口模块都有他的pinmux设置,参考我们EVM板的dts文件就可以。

Chris Zhao2:

回复 Jian Zhou:

我拷贝了一部分的evm的dts,如果我想加个什么东西,是不是要同时改&am33xx_pinmux {} 和外边的&mmc3 {}?

&am33xx_pinmux {

mmc3_pins: pinmux_mmc3_pins {pinctrl-single,pins = <0x44 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a1.mmc2_dat0, INPUT_PULLUP | MODE3 */0x48 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a2.mmc2_dat1, INPUT_PULLUP | MODE3 */0x4C (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a3.mmc2_dat2, INPUT_PULLUP | MODE3 */0x78 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_ben1.mmc2_dat3, INPUT_PULLUP | MODE3 */0x88 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_csn3.mmc2_cmd, INPUT_PULLUP | MODE3 */0x8C (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_clk.mmc2_clk, INPUT_PULLUP | MODE3 */>;};

}

&mmc3 {/* these are on the crossbar and are outlined in thexbar-event-map element */dmas = <&edma 12&edma 13>;dma-names = "tx", "rx";status = "okay";vmmc-supply = <&wlan_en_reg>;bus-width = <4>;pinctrl-names = "default";pinctrl-0 = <&mmc3_pins &wlan_pins>;ti,non-removable;ti,needs-special-hs-handling;cap-power-off-card;keep-power-in-suspend;

#address-cells = <1>;#size-cells = <0>;wlcore: wlcore@0 {compatible = "ti,wl1835";reg = <2>;interrupt-parent = <&gpio3>;interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;};};

对于mux.C,如果我想在里面用我在dts里定义好的mmc3,要怎么写呐?evm的默认的mux文件里面有这些定义,这个如何和我的mmc3对应起来?

static struct module_pin_mux mmc0_pin_mux[] = {{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD *///{OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)}, /* MMC0_WP */ //comment for mipi sb//{OFFSET(spi0_cs1), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* GPIO0_6 */{-1},};

static struct module_pin_mux mmc0_no_cd_pin_mux[] = {{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */{OFFSET(mcasp0_aclkr), (MODE(4) | RXACTIVE)}, /* MMC0_WP */{-1},};

static struct module_pin_mux mmc0_pin_mux_sk_evm[] = {{OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */{OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */{OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */{OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */{OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */{OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */{OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)}, /* MMC0_CD */{-1},};

static struct module_pin_mux mmc1_pin_mux[] = {{OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT3 */{OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT2 */{OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT1 */{OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE | PULLUP_EN)}, /* MMC1_DAT0 */{OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CLK */{OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CMD */{OFFSET(gpmc_csn0), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* MMC1_WP */{OFFSET(gpmc_advn_ale), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* MMC1_CD */{-1},};

谢谢

Chris

Steven Liu1:

回复 Chris Zhao2:

am33xx_pinmux {} 只是关于pinmux的定义,用以规划管教的定义。

mmc3 {}中间的是关于mmc3模块的相关功能定义,包括,中断号,EDMA事件等模块本身的相关配置属性。

写法就是照葫芦画瓢呗,印象中,在linux的Documentation文件夹下是有些文档介绍dts的相关模块配置的。

Chris Zhao2:

回复 Steven Liu1:

那mux.c文件如何处理呐?

昨天做了试验,把am33xx_pinmux {} 里面的所有内容都删掉,然后发现SPI0(从SPI启动),emmc接口和网络接口还是正常的,彻底迷茫了

user4953334:

ti有提供一个pinmux的工具,可以直接生成所需的pinmux的dts文件。如下:

/* This file was auto-generated by TI PinMux on 2017/5/24 at 下午3:49:20. */

/* This file should only be used as a reference. Some pins/peripherals, *//* depending on your use case, may need additional configuration. */

myrgmii1_pins_default: myrgmii1_pins_default { pinctrl-single,pins = < 0x114 ( PIN_OUTPUT | MUX_MODE2 ) /* (A13) mii1_tx_en.rgmii1_tctl */ 0x118 ( PIN_INPUT | MUX_MODE2 ) /* (A15) mii1_rx_dv.rgmii1_rctl */ 0x12c ( PIN_OUTPUT | MUX_MODE2 ) /* (D14) mii1_tx_clk.rgmii1_tclk */ 0x130 ( PIN_INPUT | MUX_MODE2 ) /* (D13) mii1_rx_clk.rgmii1_rclk */ 0x128 ( PIN_OUTPUT | MUX_MODE2 ) /* (B15) mii1_txd0.rgmii1_td0 */ 0x124 ( PIN_OUTPUT | MUX_MODE2 ) /* (A14) mii1_txd1.rgmii1_td1 */ 0x120 ( PIN_OUTPUT | MUX_MODE2 ) /* (C13) mii1_txd2.rgmii1_td2 */ 0x11c ( PIN_OUTPUT | MUX_MODE2 ) /* (C16) mii1_txd3.rgmii1_td3 */ 0x140 ( PIN_INPUT | MUX_MODE2 ) /* (F17) mii1_rxd0.rgmii1_rd0 */ 0x13c ( PIN_INPUT | MUX_MODE2 ) /* (B16) mii1_rxd1.rgmii1_rd1 */ 0x138 ( PIN_INPUT | MUX_MODE2 ) /* (E16) mii1_rxd2.rgmii1_rd2 */ 0x134 ( PIN_INPUT | MUX_MODE2 ) /* (C14) mii1_rxd3.rgmii1_rd3 */ >;};

/* Optional sleep pin settings. Must manually enter values in the below skeleton. */myrgmii1_pins_sleep: myrgmii1_pins_sleep { pinctrl-single,pins = < 0x114 ( ) /* (A13) mii1_tx_en.rgmii1_tctl */ 0x118 ( ) /* (A15) mii1_rx_dv.rgmii1_rctl */ 0x12c ( ) /* (D14) mii1_tx_clk.rgmii1_tclk */ 0x130 ( ) /* (D13) mii1_rx_clk.rgmii1_rclk */ 0x128 ( ) /* (B15) mii1_txd0.rgmii1_td0 */ 0x124 ( ) /* (A14) mii1_txd1.rgmii1_td1 */ 0x120 ( ) /* (C13) mii1_txd2.rgmii1_td2 */ 0x11c ( ) /* (C16) mii1_txd3.rgmii1_td3 */ 0x140 ( ) /* (F17) mii1_rxd0.rgmii1_rd0 */ 0x13c ( ) /* (B16) mii1_rxd1.rgmii1_rd1 */ 0x138 ( ) /* (E16) mii1_rxd2.rgmii1_rd2 */ 0x134 ( ) /* (C14) mii1_rxd3.rgmii1_rd3 */ >;};

Chris Zhao2:

回复 user4953334:

pinmux直接生成的是这四个文件:

– pinmux_data.c

– pinmux.h

– devicetree.txt            里面只有pinmux的定义。

– PinmuxConfigSummary.csv

user4953334:

回复 Chris Zhao2:

如果要修改节点的属性,可以参照具体驱动文件来修改,每个节点里面的各项属性在驱动里面都有去解析的,

具体要启用那些,禁用那些按着驱动代码来修好就好。

在Documentation\devicetree\bindings 这个目录下也有对应节点的一些参考资料。

Steven Liu1:

回复 Chris Zhao2:

pinmux寄存器在系统初期的rom code启动的时候,就做了一些接口的管脚配置了。

而且在uboot和kernel中都会有其相应的配置的地方。你在kernel中删掉的这些配置,应该是在uboot或者是rom code中就已经配置了,只要pinmux寄存器中的值是对的,就可以正常工作。

赞(0)
未经允许不得转载:TI中文支持网 » 如何修改am335x的.dts文件
分享到: 更多 (0)