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/TMS320DM8148:CD 引脚不能按预期工作。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/566910/linux-tms320dm8148-cd-pins-are-not-working-as-per-expectation

器件型号:TMS320DM8148

工具/软件:Linux

大家好、

我在仅使用 CD 引脚进行 SD 卡检测时遇到问题。 我有基于 DM8148的定制板、它支持两个 SD 卡、两个都分别作为 uart0_CTSN.mmc0_sdcd 和 spi0_CS1.mmc1_sdcd 引脚连接到 CD 引脚。 我还在使用 DVRRDK_04.01.00.02内核及所有参考源代码。

下面是板级配置文件中的 MMC 结构、

静态结构 OMAP2_hsmmc_info MMc[]={
  {
     MMc    = 2、
     .caps   = MMC_CAP_4_bit_data、
     .GPIO_CD   =-EINVAL、/* CD 和 WP 专用引脚*
     .GPIO_WP   =-EINVAL、
     .OCR_MASK  = MMC_VDD_33_34、
  }、
  {
     .mc    = 1、
     .caps   = MMC_CAP_4_bit_data、
     .GPIO_CD   =-EINVAL、/* CD 和 WP 专用引脚*
     .GPIO_WP   =-EINVAL、
     .OCR_MASK  = MMC_VDD_33_34、
  }、
  {}/*终端*/
};


使用这些设置,我无法将两个 SD 卡用作热插拔。

现在、经过一些试验、我已经修改了下面的 MMC 板级配置文件结构、

静态结构 OMAP2_hsmmc_info MMc[]={
  {
     MMc    = 2、
     .caps   = MMC_CAP_4_bit_data、
     .GPIO_CD   = GPIO_TO_PIN (1、6)、// CD 和 WP 专用引脚*
     .GPIO_WP   =-EINVAL、
     .OCR_MASK  = MMC_VDD_33_34、
  }、
  {
     .mc    = 1、
     .caps   = MMC_CAP_4_bit_data、
     .GPIO_CD   = GPIO_TO_PIN (1、15)、// CD 和 WP 专用引脚*
     .GPIO_WP   =-EINVAL、
     .OCR_MASK  = MMC_VDD_33_34、
  }、
  {}/*终端*/
};

我已将多路复用器设置分别更改为 spi0_CS1.GPIO1_6和 mmc2_clk.GPIO1_15。 通过此更改、我可以将两个 SD 卡用作热插拔。

现在我的问题是、为什么 CD 引脚功能不能与 DM8148正常工作? 修复此问题是否需要任何额外的补丁?

如果您需要更多详细信息、请告诉我。 此外、还可根据需要查找参考原理图快照。

此致、

Ravi Bhuva。

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

    尊敬的 Ravi:

    [引用 user="Ravi Bhuva"]     .GPIO_CD   =-EINVAL,/* CD 和 WP 专用引脚*/[/引用]

    实际上、代码是:

    .GPIO_CD       =-EINVAL、//检查 setup_mmc2_PIN_mux ()*

    该 setup_mmc2_PIN_mux ()正在导出 spi0_CS1引脚上的 GPIO1_6信号。 使用默认设置启动并从用户空间检查寄存器 PINCNTL80、您将看到该值实际上是针对 GPIO1_6而不是 mmc1_sdcd 的。

    确保您的代码库中包含以下补丁:

    此致、
    帕维尔

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

    我已经用我的代码交叉检查了您的输入。 两个 SD 卡仍然不能用于热插拔功能。
    请在下面查找我的设置和测试内容、
    从 U-Boot 引脚多路复用器的已用引脚:
    MMMC-1:
    MUX_VAL (PINCNTL72,(IEN | IPU | FCN7))/* SD0_SDCD */\

    MMC-2:
    MUX_VAL (PINCNTL80,(IEN | IPU | FCN2))/* SD1_SDCD */\


    从板级配置文件中对两个 MMC 的内核使用、
    静态结构 OMAP2_hsmmc_info MMc[]={

    MMc = 2、
    .caps = MMC_CAP_4_bit_data、
    .GPIO_CD =-EINVAL、//检查 setup_mmc2_PIN_mux ()*
    .GPIO_WP =-EINVAL、
    .OCR_MASK = MMC_VDD_33_34、
    }、

    .mc = 1、
    .caps = MMC_CAP_4_bit_data、
    .GPIO_CD =-EINVAL、//检查 setup_mmc1_PIN_mux ()*
    .GPIO_WP =-EINVAL、
    .OCR_MASK = MMC_VDD_33_34、
    }、
    {}/*终端*/
    };

    静态 int setup_mmc2_pin_mux (void)

    返回 OMAP-mux_init_signal ("spi0_CS1.GPIO1_6"、TI814X_PIN_INPUT_PULL_UP);

    静态 int setup_mmc1_PIN_mux (void)

    返回 omap_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、
    TI814X_PIN_INPUT_PULL_UP);

    静态空__init ti8148_EVM_init (空)

    (笑声)
    setup_mmc2_PIN_mux ();
    setup_mmc1_PIN_mux ();
    (笑声)



    运行时行为:
    在系统启动日志中、
    mmc0:主机不支持读取只读开关。 假设是写入使能。
    mmc0:地址 AAAA 处的新 SDXC 卡
    mmcblk0:mmc0:AAAA SC64G 59.4 GiB
    mmcblk0:
    mmc1:主机不支持只读开关。 假设是写入使能。
    mmc1:地址 AAAA 处的新 SDXC 卡
    mmcblk1:mmc1:AAAA SC64G 59.4 GiB
    毫米波1:

    #安装
    rootfs 打开/键入 rootfs (RW)
    ubi0:rootfs 打开/类型 ubifs (rw、relatme)
    devtmpfs on /dev/type devtmpfs (rw、relatme、size=503580k、nr_inodes = 103567、mode=755)
    proc on /proc type proc (rw、relatme)
    /dev/shm 类型 tmpfs 上无(rw、relatme)
    /dev/pts 类型设备上的设备(RW、相对值、mode=600)
    /proc/bus/usb 上的 usbfs 类型 usbfs (rw、relatme)
    /var/volatile 上的 tmpfs 类型 tmpfs (rw、relatime, size=16384k)
    /media/ram 上的 tmpfs 类型 tmpfs (rw、relatime, size=16384k)
    /sys 类型 sysfs 上的 sysfs (rw、relatme)
    /media/mmcblk0上的/dev/mmcblk0类型:vfat (rw、relatme、fmask=0000、dmask=0000、allow_utime=0022、键盘=cp437、iocharset=ISO8859-1、shortname=Mixed
    ,errors=重新安装)
    /media/mmcblk1上的/dev/mmcblk1类型:vfat (rw、relatme、fmask=0000、dmask=0000、allow_utime=0022、键盘=cp437、iocharset=ISO8859-1、shortname=Mixed
    ,errors=重新安装)


    在低于打印速度的运行时间从系统中删除 MMC2后、开始出现、并且在系统的最高 CPU 利用率中几乎为100%、
    mmcblk1:发送状态命令时出错-110
    mmcblk1:发送读/写命令时出错-110、响应0x0、卡状态0x0
    mmcblk1:错误-110正在传输数据、扇区229550、nr 32、卡状态0x0
    end_request:I/O error、dev mmcblk1、sector 229550
    mmcblk1:发送状态命令时出错-110
    mmcblk1:发送读/写命令时出错-110、响应0x0、卡状态0x0
    mmcblk1:错误-110正在传输数据、扇区229551、nr 31、卡状态0x0
    end_request:I/O error、dev mmcblk1、sector 229551

    此外、/dev/mmcblk1也不会被删除。

    在低于打印速度的运行时间从系统中删除 MMC1后、开始出现、并且在系统的最高 CPU 利用率中几乎为100%、
    mmcblk0:发送状态命令时出错-110
    mmcblk0:发送读/写命令时出错-110、响应0x0、卡状态0x0
    mmcblk0:错误-110正在传输数据、扇区5942094、nr 128、卡状态0x0
    mmcblk0:错误-110请求状态
    end_request:I/O error、dev mmcblk0、扇区5942094
    end_request:I/O error、dev mmcblk0、扇区5942102

    此外、/dev/mmcblk0也不会被删除。


    让我知道它发生了什么错误。

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

    [引用 USER="Ravi Bhuva]MMMC-1:
    MUX_VAL (PINCNTL72,(IEN | IPU | FCN7))/* SD0_SDCD */\

    MMC-2:
    MUX_VAL (PINCNTL80,(IEN | IPU | FCN2))/* SD1_SDCD */\[/引述]

    [引用 user="Ravi Bhuva]OMA_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、

    您仍在使用 sdx_sdcd 信号而不是 GPIO。

    此致、
    帕维尔

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

    您好、Pavel、

    我的系统中有两个 SD 卡。 我不想使用外部 GPIO 进行卡检测、我只想使用内置 CD 引脚。

    它是具有以下 MUX 的 MMC1、
    omap_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、

    该引脚没有任何 GPIO MUX 功能。

      _TI814X_MUXENTRY (UART0_CTSN、0、
            "uart0_CTSN"、"uart4_RxD_mux3"、NULL、"dcan1_TX"、
            "SPI1_CS3"、NULL、"mmc0_sdcd"、NULL、NULL、 空、空、
            null)、
    我们在外部提供了 GP1[15]、但如果所有引脚都只能使用 CD 引脚、我们将删除它、因此我不在这里使用此引脚。 此外、我还将 GP1[15]引脚多路复用器保持如下、

    MUX_VAL (PINCNTL121,(IEN | IPU |禁用))/* SAFE_MODE */\

    此外、我还有具有以下配置的 mmc2、
    返回 OMAP-mux_init_signal ("spi0_CS1.GPIO1_6"、TI814X_PIN_INPUT_PULL_UP);
    MMC2仍然不能用于热插拔功能。

    如果我们有任何断开连接、请告诉我。

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

    我建议您首先关注用于卡检测的具有 GPIO 的 MMC1 (0x481D8000)。 此设置应该可以正常工作、有关更多信息、请参阅以下 e2e 线程:

    e2e.ti.com/.../445353

    关于 SD1_sdcd 的使用(而不是 GPIO)、问题是"控制器使用状态寄存器来实现卡检测功能。 此功能的实现会导致内核挂起、以防在 I/O 正在进行时移除该卡。" 使用从 SD1_sdcd 切换到 GPIO 可解决此问题

    arago-project.org/.../

    arago-project.org/.../

    arago-project.org/.../

    另请参阅以下 e2e 线程:

    e2e.ti.com/.../1262085
    e2e.ti.com/.../1316410

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

    您好、Pavel、


    通过提供 GPIO、我已经能够获得热插拔功能。 我相信只有 CD 引脚(sdcd 引脚)、我们将无法获得热插拔功能。

    现在只有一个问题、如果我从硬件上移除 CD 引脚(sdcd 引脚)、它不会影响任何功能丢失。 (GPIO 已连接、我已在板级配置文件中为它们提供了 MMC 结构)

    此致、

    Ravi Bhuva。

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

    卡检测输入信号(SDCD)的使用是可选的、具体取决于系统集成和容纳卡的连接器外壳类型。

    此致、
    帕维尔