MT7688 5网口+SD卡共存 测试
-
映射相关
传统的SD卡从网口Port3,4来复用引出,在这里找到另一种映射方式,占用IIC,IIS接口:参考 https://vocore.io/v2.html 总结如下:
引脚名称 对应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.
寄存器相关
需要一个十分魔幻的寄存器标识位来切换,查到在此:
http://widora.cn/_media/zh/mt7688_datasheet_v1_4.pdf
Page61,10000060 GPIO1_MODEBIT15 SDXC Router mode
1: SDXC from I2S/I2C/GPIO0/UART1 pins
0: SDXC from EPHY pins其他
此时还没有看到WP和CD引脚的处理,可能涉及到修改驱动使用其他的IO
备注:这个测试需要延后,暂时腾不出时间焊接
-
请问有何进展吗
-
没进展。
-
@mangogeek 没搞,还是没搞好?也希望用这功能
-
硬件对应链接关系看一楼。
需要注意的是,除了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)