MT7688 5网口+SD卡共存 测试

映射相关

传统的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

备注:这个测试需要延后,暂时腾不出时间焊接

1590292885505-20200524120104.jpg

硬件对应链接关系看一楼。
需要注意的是,除了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 没搞,还是没搞好?也希望用这功能

没进展。

请问有何进展吗