任务:修改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},