====================================
1.修改model和compitable值:
model = "TI AM335x maria_am335x";
compatible = "ti,maria_am335x", "ti,am33xx";
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
无需修改的代码:
cpu@0 {
cpu0-supply = <&dcdc2_reg>;
};
cpu@0的cpu0-supply项,原值为dcdc2_reg,不用更改,因为在OK335xD中就是用TPS65217的dcdc2通道来给core部分供电。如果你设计的电路使用dcdc1或其它通道,就修改成相应的值。
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
====================================
2.修改memory的值:
memory {
device_type = "memory";
reg = <0x80000000 0x20000000>; /* 512 MB */
};
这个是比较关键的参数。0x80000000是起始地址,查阅AM335x的技术手册会知道这是外部SRAM的起始地址,它支持的最大空间为1G,既0x80000000~0xBFFFFFFF。这里的0x20000000代表空间大小,即512M。
修改之前的原值是0x10000000,为256M。
====================================
3.leds项,修改为如下所示:
led@2 {
label = "maria_335x:red:usr_led0";
gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
linux,default-trigger = "";
default-state = "off";
};
led@3 {
label = "maria_335x:red:usr_led1";
gpios = <&gpio1 17 GPIO_ACTIVE_LOW>;
linux,default-trigger = "";
default-state = "off";
};
led@4 {
label = "maria_335x:red:usr_led2";
gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
linux,default-trigger = "";
default-state = "on";
};
led@5 {
label = "maria_335x:red:usr_led3";
gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
linux,default-trigger = "";
default-state = "on";
};
GPIO_ACTIVE_LOW是这四个LED灯是低电平有效,有效即点亮状态。当LED使用IO口直接驱动时,就是高电平有效,要设置为GPIO_ACTIVE_HIGH;当LED使用VCC上拉灌电流时,就是低电平有效,要设置为GPIO_ACTIVE_LOW。
初始状态设置为,两个LED亮,两个LED不亮。
====================================
4.删掉有关vmmcsd_fixed的内容:
vmmcsd_fixed: fixedregulator@0 {
compatible = "regulator-fixed";
regulator-name = "vmmcsd_fixed";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
SD卡的驱动,在AM335x的技术手册中被称为mmc外设,在OK335xD的底板上由DCDC芯片MP2102供电,不受AM335x控制,因此将这条描述去掉。而查看am335x-bone对应的beaglebone的板子,会发现它的SD卡由TPS65217的LDO4来供电,而TPS65217受AM335x控制,因此需要这条描述。
其它关于MMC的内容,另外因为MMC使用了4位宽度,还可以去掉mmc1_dat4至mmc1_dat7的内容:
emmc_pins: pinmux_emmc_pins {
pinctrl-single,pins = <
0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
0x10 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
0x14 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
0x18 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
>;
};
====================================
5.修改有关am33xx_pinmux内容:
user_leds_s0: user_leds_s0 {
pinctrl-single,pins = <
0x40 (PIN_OUTPUT | MUX_MODE7) /* gpmc_a0.gpio1_16 */
0x44 (PIN_OUTPUT | MUX_MODE7) /* gpmc_a1.gpio1_17 */
0x48 (PIN_OUTPUT | MUX_MODE7) /* gpmc_a2.gpio1_18 */
0x4C (PIN_OUTPUT | MUX_MODE7) /* gpmc_a3.gpio1_19 */
>;
};
AM335x的IO口可以分配不同的外设功能,比如ZCZ封装的C17引脚,默认的功能是I2C0_SDA,除此之外它还能做timer7、uart2_ctsn、eCAP2_in_PWM2_out、gpio3_5的功能来使用。设置引脚的pinmux功能,在AM335x中被称为Control Module,它的起始地址为0x44E10000。
从0x44E10000开始偏移0x800的地址,是各种各样的conf寄存器:
conf__ Register (offset = 800h–A34h)
conf寄存器的第6位是slewctrl,选择快或慢的slew rate;
conf寄存器的第5位是rxactive,为0是disabled,为1是enabled;
conf寄存器的第4位是putypesel,选择上拉或者下拉,为0是pulldown,为1是pullup;
conf寄存器的第3位是puden,使能上拉或者下拉,为0是enables,为1是disabled;
conf寄存器的第2-0位是mmode,引脚的功能模式选择。
以上面的user_leds_s0为例,0x40表示地址为0x44E10840的conf寄存器,它的名称为CONF_GPMC_A0,用来设置ZCZ封装的R13号引脚;R13号引脚的功能分别是gpmc_a0、gmii2_txen、rgmii2_tctl、rmii2_txen、gpmc_a16、pr1_mii_mt1_clk、ehrpwm1_tripzone_input、gpio1_16,我要使用的是最后一个功能,因此为MUX_MODE7;不需要上拉或者下拉电阻,因此设置为PIN_OUTPUT。
PIN_OUTPUT定义在include/dt-bindings/pinctrl/am33xx.h中:
如果要选择上拉,则为PIN_OUTPUT_PULLUP;
如果要选择下拉,则为PIN_OUTPUT_PULLDOWN。
其它的pinmux需要修改的地方有:
****************************
将clkout2_pin删掉:
pinctrl-0 = <&clkout2_pin>;
clkout2_pin: pinmux_clkout2_pin {
pinctrl-single,pins = <
0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
>;
};
这是因为OK335xD的板子没有将D14引脚conf_xdma_event_intr1设置为clkout1作为时钟输出,而是作为LCD的控制引脚。
****************************
修改cpsw_default:
cpsw_default: cpsw_default {
pinctrl-single,pins = <
/* Slave 1 */
0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txen.mii1_txen */
0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxdv.mii1_rxdv */
0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd3.mii1_txd3 */
0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd2.mii1_txd2 */
0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd1.mii1_txd1 */
0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd0.mii1_txd0 */
0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_txclk.mii1_txclk */
0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxclk.mii1_rxclk */
0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd3.mii1_rxd3 */
0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd2.mii1_rxd2 */
0x13c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd1.mii1_rxd1 */
0x140 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd0.mii1_rxd0 */
0X10C (PIN_OUTPUT | MUX_MODE0) /* mii1_crs.gmii1_crs */
>;
};
cpsw_sleep: cpsw_sleep {
pinctrl-single,pins = <
/* Slave 1 reset value */
0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x11c (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x12c (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x130 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0X10C (PIN_INPUT_PULLDOWN | MUX_MODE7)
>;
};
首先是删除0x110对应的mii1_rxerr描述,因为OK335xD将它当成了IO口使用;
其次是增加0x10c描述,它对应gmii1_crs功能。
====================================
6.修改TPS65217的描述:
dcdc2_reg: regulator@1 {
/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
regulator-name = "vdd_core";
regulator-min-microvolt = <925000>;
regulator-max-microvolt = <1325000>;
regulator-boot-on;
regulator-always-on;
};
dcdc3_reg: regulator@2 {
/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
regulator-name = "vdd_mpu";
regulator-min-microvolt = <925000>;
regulator-max-microvolt = <1150000>;
regulator-boot-on;
regulator-always-on;
};
am335x-bone是使用DCDC2用作mpu,DCDC3用作core;而OK335xD刚好反过来。
====================================
总结:
修改完了之后,执行make xx.dtb命令,例如:
make ARCH=arm CROSS_COMPILE=/opt/arm-arago-linux-gcc/usr/bin/arm-linux-gnueabihf- -j8 maria_am335x.dtb
之后在arch/arm/boot/dts下会生成maria_am335x.dtb文件。
将它通过tftp拷贝进内存运行,就会发现OK335xD欢快的跑起来了,串口刷刷的打印,而且2个LED灯点亮,2个LED灯熄灭!
阅读(1259) | 评论(0) | 转发(0) |