电源设计技术实用资料点击免费获取>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 为AM335x移植Linux内核主线代码——次顶层的maria_am335x-c


共1条 1/1 1 跳转至

为AM335x移植Linux内核主线代码——次顶层的maria_am335x-common.dts

菜鸟
2014-10-24 22:42:26    评分

为AM335x移植Linux内核主线代码

三、次顶层的maria_am335x-common.dts


==================================== 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 =; /* 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 =;
            regulator-max-microvolt =;
    };



    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 =;
            regulator-max-microvolt =;
            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 =;
            regulator-max-microvolt =;
            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灯熄灭!

(文章转载自edn博客 作者:MariannaZhu )

http://forum.eepw.com.cn/thread/262788/1




关键词: AM335x     移植     Linux     内核     主线     代码         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]