映射相关
传统的SD卡从网口Port3,4来复用引出,在这里找到另一种映射方式,占用IIC,IIS接口:参考 VoCore2 | Coin-sized Linux Computer 总结如下:
引脚名称 |
对应GPIO |
原始功能 |
SD卡功能 |
PAG_GPIO0 |
GPIO11 |
|
SDXC CLK* |
I2C SD |
GPIO5 |
I2C Data |
SDXC D2* |
I2C CLK |
GPIO4 |
I2C Clock |
SDXC D3* |
I2S CLK |
GPIO3 |
I2S Bit Clock |
SDXC CMD* |
I2S WS |
GPIO2 |
I2S L/R Clock |
SDXC D0* |
I2S SDI |
GPIO0 |
I2S Data In |
SDXC D1* |
- five ethernet port mode, sdcard mux to i2s/i2c.
寄存器相关
需要一个十分魔幻的寄存器标识位来切换,查到在此:
Page61,10000060 GPIO1_MODE
BIT15 SDXC Router mode
1: SDXC from I2S/I2C/GPIO0/UART1 pins
0: SDXC from EPHY pins
其他
此时还没有看到WP和CD引脚的处理,可能涉及到修改驱动使用其他的IO
备注:这个测试需要延后,暂时腾不出时间焊接

硬件对应链接关系看一楼。
需要注意的是,除了CLK,其他线均需添加10K上拉电阻(SDIO通讯标准要求)。
软件找到这个文件:
/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips-mt7688/linux-3.18.29/drivers/mmc/host/mtk-mmc/sd.c
按照如下patch修改:
--- a/drivers/mmc/host/mtk-mmc/sd.c
+++ b/drivers/mmc/host/mtk-mmc/sd.c
@@ -2739,7 +2739,7 @@
struct msdc_host *host;
struct msdc_hw *hw;
int ret, irq;
- u32 reg;
+ u32 reg, reg1;
printk("MTK MSDC device init.\n");
mtk_sd_device.dev.platform_data = &msdc0_hw;
@@ -2754,8 +2754,11 @@
//#elif defined (CONFIG_RALINK_MT7628)
/* TODO: maybe omitted when RAether already toggle AGPIO_CFG */
reg = sdr_read32((volatile u32*)(RALINK_SYSCTL_BASE + 0x3c));
- reg |= 0x1e << 16;
+ reg &= ~(0x1e << 16);
sdr_write32((volatile u32*)(RALINK_SYSCTL_BASE + 0x3c), reg);
+ reg = sdr_read32((volatile u32*)(RALINK_SYSCTL_BASE + 0x60)) & ~(0x3<<0) & ~(0x3<<6) & ~(0x3<<10) & ~(0x1<<15) & ~(0x3<<20) & ~(0x3<<24) | (0x1<<0) | (0x1<<6) | (0x1<<10) | (0x1<<15) | (0x1<<20) | (0x1<<24);
+ reg1 = sdr_read32((volatile u32*)(RALINK_SYSCTL_BASE + 0x1340)) | (0x1<<11); //Normal mode(AP mode) , SDXC CLK=PAD_GPIO0=GPIO11, driving = 8mA
+ sdr_write32((volatile u32*)(RALINK_SYSCTL_BASE + 0x1340), reg1);
- reg = sdr_read32((volatile u32*)(RALINK_SYSCTL_BASE + 0x60)) & ~(0x3<<10);
#if defined (CONFIG_MTK_MMC_EMMC_8BIT)
@mangogeek 没搞,还是没搞好?也希望用这功能