am335x修改sd卡cd管脚

任务:修改SD卡CD管脚,CD管脚是用来给系统通知SD卡的插入与拔出消息的,tq3358默认用的是         spi0_cs1(GPIO0_6),现在要改为GPIO1_16


1. 查看原理图核心板原理图

  

    MMC0的SDCD接的是GPIO0_6。


2. 查看 arch\arm\mach-omap2\mux33xx.c,这个文件是ti3358的管脚定义,不要修改。

    _AM33XX_MUXENTRY(SPI0_CS1, 0,
        "spi0_cs1", "uart3_rxd", NULL, "mmc0_pow",
        NULL, "mmc0_sdcd", NULL, "gpio0_6"),

    这部分就是sd卡cd管脚的定义和功能服用描述。

   然后找到GPIO1_16的管脚定义

   _AM33XX_MUXENTRY(GPMC_A0, 0,
        "gpmc_a0", "mii2_txen", "rgmii2_tctl", "rmii2_txen",
        NULL, NULL, NULL, "gpio1_16"),


3. 修改arch\arm\mach-omap2\board-am335xevm.c,这个文件是ti3358硬件管脚的配置。

    找到mmc初始化的位置

    static void mmc0_init(int evm_id, int profile)
    {
               setup_pin_mux(mmc0_pin_mux);
               omap2_hsmmc_init(am335x_mmc);
               return;
    }

    从初始化的函数可以看出,主要修改两个结构体。

   1) mmc0_pin_mux  与sd卡相关的管脚配置

       /* Module pin mux for mmc0 */
     static struct pinmux_config mmc0_pin_mux[] = {
             {"mmc0_dat3.mmc0_dat3",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"mmc0_dat2.mmc0_dat2",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"mmc0_dat1.mmc0_dat1",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"mmc0_dat0.mmc0_dat0",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"mmc0_clk.mmc0_clk",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"mmc0_cmd.mmc0_cmd",    OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},
             {"ecap0_in_pwm0_out.mmc0_sdwp", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},
             {"spi0_cs1.mmc0_sdcd",  OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},

             通过刚才查看核心板的原理图,显然是修改这一行,照猫话虎的改为:注意,前面的字符串只是起到

             一个标识的作用,后面的模式号才是正在起作用的。

             {"gpmc_a0.gpio1_16",OMAP_MUX_MODE7 | AM33XX_PIN_INPUT_PULLUP},

             {NULL, 0},
     };

     2) am335x_mmc  sd卡的硬件配置信息

         static struct omap2_hsmmc_info am335x_mmc[] __initdata = {
               {
                    .mmc            = 1,
                    .caps           = MMC_CAP_4_BIT_DATA,
                    .gpio_cd        = GPIO_TO_PIN(0, 6),

                     修改这一行为

                    .gpio_cd        = GPIO_TO_PIN(1, 16),

                    .gpio_wp        = GPIO_TO_PIN(3, 18),
                    .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34, /* 3V3 */
               },
              {
                    .mmc            = 0,    /* will be set at runtime */
               },
              {
                    .mmc            = 0,    /* will be set at runtime */
               },
               {}      /* Terminator */
        };

4. 将board-am335xevm.c用到的有关gpio1_16的代码屏蔽掉,以免干扰。

    在此文件里搜索gpmc_a0,因为ti的管脚都是复用的,gpio1_16这个管脚的默认名称可以从刚才 mux33xx.c    这个文件里找到,就是gpmc_a0。删除掉以下两行即可。

        {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},

        {"gpmc_a0.gpio1_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},




    

  

你可能感兴趣的:(中收工作笔记)