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_MODE

    BIT15 SDXC Router mode

    1: SDXC from I2S/I2C/GPIO0/UART1 pins
    0: SDXC from EPHY pins

    其他

    此时还没有看到WP和CD引脚的处理,可能涉及到修改驱动使用其他的IO

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



  • 请问有何进展吗



  • 没进展。



  • @mangogeek 没搞,还是没搞好?也希望用这功能



  • TIM图片20200524115710.jpg

    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)
    

Log in to reply
 

5
Online

927
Users

565
Topics

2.2k
Posts