This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux:SDIO 总线的强大功能

Guru**** 2601915 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/639884/linux-the-power-of-sdio-bus

Thread 中讨论的其他器件:DM385

工具/软件:Linux

您好、先生、

对于 电平位移、关于 SDIO 总线的功率、我们如何选择1.8V 或3.3V 电压?

此致、

拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的拜伦:

    您正使用哪款 TI 器件?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    通过 SDIO 接口无线连接到 DM385。

    此致、
    拜伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拜伦

    通常、通过选择电源域的适当电压、可在1.8V 和3.3V 之间进行选择。 例如、请参阅 DVDD_SD (SDIO0和 SDIO1)和 DVDD_RGMII (SDIO2)。

    您能否澄清您使用的是 DM385x TI 电路板还是定制电路板?

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    我们正在使用定制板、但我们也参考 TI 板进行设计。

    那么、我们是否在内核/MMC 驱动程序中为 SDIO 电源设置任何参数?

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    我们找到了以下功能。这是否意味着只有 MMC1支持3.3V,而其他 MMC1支持1.8V?


    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */
    if (host->id =OMAP_MMC1_DevID){
    hctl = SDVS30;
    CAPA = VS30 | VS18;
    }否则{
    hctl = SDVS18;
    CAPA = VS18;


    此致、
    拜伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    请参阅下面的功能、这是否意味着只有 MMC1支持3.3V、其他支持1.8V?

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */

    if (host->id =OMAP_MMC1_DevID){

    hctl = SDVS30;

    CAPA = VS30 | VS18;

    }否则{

    hctl = SDVS18;

    CAPA = VS18;

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拜伦

    不可以、我认为我们无法通过软件在1.8V 至3.3V 之间切换 DVDD_SD/DVDD_RGMII 电源。

    kernel/drivers/mmc/host/omap_hsmmc.c 驱动程序可配置 DM38x TRM 第17章 MMC/SD/SDIO 中所述的寄存器

    本 TRM 章说明主机驱动器应设置这些位、以便根据系统支持的电压选择卡的电压电平。

    MMCHS_HCTL[11:9] SDV

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    不可以、我不能通过软件在1.8V 和3.3V 之间切换电压。我想知道如何/在哪里设置这些位来根据系统支持的电压为卡选择电压电平?它是否在这个功能上?


    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */
    if (host->id =OMAP_MMC1_DevID){
    hctl = SDVS30;
    CAPA = VS30 | VS18;
    }否则{
    hctl = SDVS18;
    CAPA = VS18;


    此致、
    拜伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拜伦

    是的、OMAP-Hsmmc_conf_bus_power 函数用于在1.8V 和3.3V 之间进行选择。 另请参阅以下 e2e 线程:

    e2e.ti.com/.../359852

    看起来您使用的是旧内核、DM385器件可用的最新内核为4.4.x、附带 IPNC RDK 3.9.1、其中我们具有:

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host * host、int IOV)

    u32 hctl、value;

    值= OMA_HSMMC_READ (host->base、HCTL)&~SDVS_MASK;
    hctl =(IOV =MMC_SIGNAL VOLTGE_180)? SDVS18:SDVS30;
    omap_HSMMC_write (host->base、hctl、value | hctl);

    /*设置 SD 总线功率位*/
    SET_SD_BUS_POWER (主机);


    此外、在最新的 TI 内核4.2.x 上、此函数为:

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host * host、int IOV)

    u32 hctl = SDVS30、value;

    值= OMA_HSMMC_READ (host->base、HCTL)&~SDVS_MASK;

    如果(IOV = MMC_SIGNAL 电压_180)
    hctl = SDVS18;
    否则(主机->IO_3_3V_support)
    hctl = SDVS33;

    omap_HSMMC_write (host->base、hctl、value | hctl);

    /*设置 SD 总线功率位*/
    SET_SD_BUS_POWER (主机);



    请注意、在 DM38x CSK 中、WLAN 连接到 MMC0、在 dm38x-csk.dts 文件中将 MMC0配置为3.3V。 我的意思是在 DTS 文件中选择1.8V 到3.3V 之间的电压、然后 MMC 驱动程序根据我们在 DTS 文件中的设置在1.8V 到3.3V 之间自动选择。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    您说过 mmc0配置为3.3V。 但功能如下所示。mmc0配置为1.8V、我需要修改它吗?

    是的、我们的内核是2.6.37。 dm38x-csk.dts 的文件是否仅在最新的内核版本上?我找不到它。但在 kernel/arch/PowerPC/boot/DTS 文件夹中。我可以看到许多 DTS 文件。但我不确定使用哪个文件。我们如何检查它?

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */
    if (host->id =OMAP_MMC1_DevID){
    hctl = SDVS30;
    CAPA = VS30 | VS18;
    }否则{
    hctl = SDVS18;
    CAPA = VS18;

    值= OMA_HSMMC_READ (host->base、HCTL)&~SDVS_MASK;
    OMAP-HSMMC

    ===================================================================================================================================

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */
    if (host->id =OMAP_MMC1_DevID){
    hctl = SDVS30;
    CAPA = VS30 | VS18;
    }否则{
    hctl = SDVS30;
    CAPA = VS30 | VS18;

    值= OMA_HSMMC_READ (host->base、HCTL)&~SDVS_MASK;
    OMAP-HSMMC

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拜伦

    [引用 user="Byron Tian]1.\n\n 您说 mmc0配置为3.3V。 但函数如下所示。mmc0配置为1.8V、因此我需要修改它吗?

    否、mmc0未配置为1.8V、而是配置为3V。 在 DM385数据表中、MMC 编号从0开始、我们有 mmc0、mmc1、mmc2。 在 Linux 内核2.6.37 (IPNC RDK 3.8.x)中、编号从1开始、我们有 OMAP_MMC1_DevID、OMAP_MMC2_DevID、OMAP_MMC3_DevID。 因此、数据表中的 mmc0 (基址0x48060000)对应于 OMAP-MMC1_DevID、并设置为3V。

    如果您在 MMC0上需要3.3V 电压、则无需更改 MMC 驱动程序。

    [引用 user="Byron Tian]2.6.37.是 的,我们的内核是2.6.37.是 dm38x-csk.dts 文件,仅在最新内核版本上?我找不到它。但在 kernel/arch/PowerPC/boot/DTS 文件夹中,我可以看到许多 DTS 文件。但我不确定我使用了哪个文件。我们如何检查它?

    这是旧内核、这里没有 DTS 文件、而是板级文件。 检查 kernel/arch/arm/mach-omap2/文件 board-dm385evm.c 和/或 board-dm385ipnc.c 和 device.c

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    1.如果我们想配置为1.8V、我需要连接到 MMC1或将 MMC0驱动器从3V 修改为1.8V、如下所示?

    ==== 以前===========

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

        u32 hctl、capa、value;

     

        /*只有 MMC1支持3.0V */

        if (host->id =OMAP_MMC1_DevID){

              hctl = SDVS30;

              CAPA = VS30 | VS18;

        }否则{

              hctl = SDVS18;

              CAPA = VS18;

        }

    ===after===========

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

        u32 hctl、capa、value;

     

        /*只有 MMC1支持3.0V */

     //  if (host->id =OMAP-MMC1_DevID){

     //      hctl = SDVS30;

     //      CAPA = VS30 | VS18;

     //  }否则{

              hctl = SDVS18;

              CAPA = VS18;

     //  }

    关于 AM335x_WL_IRQ 和 AM335x_WL_en、我们的额定电压是多少(1.8V 或3.3V)?我们能否在内核中更改它们?

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述 USER="Byron Tian]1..如果我们想要配置为1.8V、我需要连接到 MMC1或按照如下所示将 MMC0驱动程序从3V 修改为1.8V?[/QUEREST]

    您可以同时执行这两个操作。 在第一种情况下(连接到 MMC1)、您无需更改驱动程序。 在第二种情况下、您的驱动程序更新看起来是正确的(用于将 MMC0设置为1.8V)。

    [引用用户="Byron Tian]2. 关于 AM335x_WL_IRQ 和 AM335x_WL_en、我们的额定电压是多少(1.8V 或3.3V)?我们能否在内核中更改它们?

    我找不到这样的 DM385引脚(AM335x_WL_IRQ、AM335x_WL_EN)、您是否需要 DM385内部信号或 DM385引脚? 如果您参考的是 DM385引脚、您参考的是哪个焊球编号(在示例 AA26中)?

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    抱歉、这是 WiFi 模块上的使能引脚和 IRQ 引脚。它们连接到 DM385的 C9引脚(IRQ 引脚/WIFI)和 J10引脚(使能引脚/WIFI)。额定电压是多少(1.8V 或3.3V)?我们能否在内核中更改它们?

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    另一个问题是、如果 MMC0的电源为3.3V。 这是否意味着所有引脚(CLK、CMD、DAT0~DAT3)都是3.3V?我们能否单独设置它们?

    此致、
    拜伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拜伦

    这些 C9/J10引脚是双电压 I/O、因此可在3.3V 或1.8V 电压下工作。 请参阅 DM385x 数据表第7.2.5节双电压 I/O。

    引脚 C9上的电压电平(3.3V 或1.8V)取决于 DVDD 电源轨、引脚 J10上的电压电平(3.3V 或1.8V)取决于 DVDD_C 电源轨。


    此电压选择(3.3V 或1.8V)不能由 SW (内核或其他位置)进行。



    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Byron Tian">如果 MMC0的功率为3.3V。 这是否意味着所有引脚(CLK、CMD、DAT0~DAT3)都是3.3V?[/报价]

    是的、所有这些引脚(CLK、CMD、DAT0~DAT3)都由 DVDD_SD 供电。 电压电平(3.3V 或1.8V)取决于此 DVDD_SD 电源轨。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    我尝试按如下方式修改代码。确保 mmc1和 mmc2为1.8V。 但是、当我检查 mmc1引脚上的电压时、我得到的是3.3V。 它似乎不起作用。我们需要在哪里修改?

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

    u32 hctl、capa、value;

    /*只有 MMC1支持3.0V */
    //if (host->id =OMAP-MMC1_DevID){
    // hctl = SDVS30;
    // capa = VS30 | VS18;
    //}否则{
    hctl = SDVS18;
    CAPA = VS18;
    //}

    BR、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Byron Tian)]我尝试按如下方式修改代码。确保 mmc1和 mmc2为1.8V。 但是、当我检查 mmc1引脚上的电压时、我得到的是3.3V。 它似乎不起作用。我们需要在哪里修改?

    正如我在这个 e2e 线程中多次解释的那样、mmc0 (内核中的 mmc1)引脚电压电平不能由软件(内核或其他)从3.3V 更改为1.8V。 您唯一的选择是对 DVDD_SD 电源域的电源进行硬件更改(从3.3V 改为1.8V)。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    我很困惑、

    上 星期三、我的问题是  

    >>如果我们要配置为1.8V,我需要连接到 MMC1或将 MMC0驱动器从3V 修改为1.8V,如下所示?

    您的答案是

    >>您可以同时执行这两项操作。 在第一种情况下(连接到 MMC1)、您无需更改驱动程序。 在第二种情况下、您的驱动程序更新看起来是正确的(用于将 MMC0设置为1.8V)。

    上周五、我的问题是  

    >>我已尝试如下修改代码。请确保 mmc1和 mmc2为1.8V。 但是、当我检查 mmc1引脚上的电压时、我得到的是3.3V。 它似乎不起作用。我们需要在哪里修改?

    您的答案是

    >>正如我在这个 e2e 线程中多次解释过的,mmc0 (内核中的 mmc1)引脚电压电平不能由软件(内核或其他)从3.3V 更改为1.8V。 您唯一的选择是对 DVDD_SD 电源域的电源进行硬件更改(从3.3V 改为1.8V)。

    ===================================================================================================

    1.您的意思是 MMC 的所有功率级别都取决于 DVDD_SD。

    如果 DVDD_SD 为3.3V、则 MMC0可以支持3.3V 和1.8V。  MMC1仅支持 1.8V 电压。

    如果 DVDD_SD 为1.8V、则 MMC0可支持1.8V。  MMC1仅支持 1.8V 电压。  

    2.上 星期三你的答案。

    "...  在第二种情况下、您的驱动程序更新似乎是正确的(用于将 MMC0设置为1.8V)。"

    您意味着不仅需要修改  OMAP-hsmmc_conf_bus_power 函数的参数、还需要修改内核/MMC 驱动程序、如下所示

    静态空 omap_hsmmc_conf_bus_power (struct omap_hsmmc_host *主机)

        u32 hctl、capa、value;

     

        /*只有 MMC1支持3.0V */

        if (host->id =OMAP_MMC1_DevID){

              hctl = SDVS30;

              CAPA = VS30 | VS18;

        }否则{

              hctl = SDVS18;

              CAPA = VS18;

        }

    此致、

    拜伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拜伦

    当您在 DM38x MMC/SD/SDIO 控制器内核驱动程序中选择电压模式(1.8V、3.0V 或3.3V)时、这不会影响 MMC/SD/SDIO 输入/输出引脚电压电平(1.8V 或3.3V)。

    当您在 DM38x MMC/SD/SDIO 控制器内核驱动程序中选择电压模式(1.8V、3.0V 或3.3V)时、您可以定义此 DM38x MMC/SD/SDIO 控制器将在哪种传输速度模式下工作(即 SDR12、SDR25)、从而与外部芯片的传输速度保持一致。


    此致、
    帕维尔