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:PROCESSOR-SDK-AM437X:如何在 Linux 中配置 eMMC 驱动程序

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/584457/linux-processor-sdk-am437x-how-to-configure-emmc-driver-in-linux

工具/软件:Linux

您好!

目前我正在使用 TI SDK、我希望 在 AM4379-MMC0接口中集成 SD、并在  AM4379-MMC1中集成 eMMC 闪存、eMMC 是 SanDisk 的 SDIN8DE2-4G-XI、  

1.我知道我需要在 Linux 中配置 eMMC 主机控制器驱动程序、配置用于 drivers/MMC/host/omap_hsmmc.c、因此我遵循以下步骤:

   

2.我不知道是否需要  SDIN8DE2-4G-XI 芯片的 eMMC 闪存驱动程序;

3.以下是我的 Linux 启动日志:

######## drivers/MMC/host/omap_hsmmc.c omap_hsmmc_probe ***begin*****
###### omap_hsmmc_probe *** res = 0x48060000*****
omap_hsmmc 48060000.mmc:消费类 CD 的 GPIO 查找
omap_hsmmc 48060000.mmc:使用器件树进行 GPIO 查找
of_get_named_gpio_FLAGS:解析了节点'/ocp/mmc@48060000[0]'的'CD-GPIO'属性-状态(0)
omap_hsmmc 48060000.mmc:获得 CD GPIO
omap_hsmmc 48060000.mmc:消费类 WP 的 GPIO 查找
omap_hsmmc 48060000.mmc:使用器件树进行 GPIO 查找
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'WP-GPIO'属性
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'wP-GPIO'属性
omap_hsmmc 48060000.mmc:使用查找表进行 GPIO 查找
omap_hsmmc 48060000.mmc:查找 GPIO WP 失败
######## drivers/MMC/host/omap_hsmmc.c omap_hsmmc_probe ***end*****
######## drivers/MMC/host/omap_hsmmc.c omap_hsmmc_probe ***begin*****
###### omap_hsmmc_probe *** res = 0x481d8000*****
omap_hsmmc 481d8000.mmc:消费类 CD 的 GPIO 查找
omap_hsmmc 481d8000.mmc:使用器件树进行 GPIO 查找
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@481d8000[0]的'CD-GPIO'属性
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@481d8000[0]的'CD-GPIO'属性
omap_hsmmc 481d8000.mmc:使用查找表进行 GPIO 查找
omap_hsmmc 481d8000.mmc:查找 GPIO CD 失败
omap_hsmmc 481d8000.mmc:用于消费类 WP 的 GPIO 查找
omap_hsmmc 481d8000.mmc:使用器件树进行 GPIO 查找
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@481d8000[0]的'wP-GPIO'属性
of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@481d8000[0]的'wP-GPIO'属性
omap_hsmmc 481d8000.mmc:使用查找表进行 GPIO 查找
omap_hsmmc 481d8000.mmc:查找 GPIO WP 失败
######## drivers/MMC/host/omap_hsmmc.c omap_hsmmc_probe ***end*****

地址 48060000用于 SD、 481d8000为 eMMC 闪存地址、我发现该驱动程序 完全运行;

5.当我登录文件系统时,我只能找到 SD 的器件节点,它们是 mmcblk0p1和 mmcblk0p2,但我找不到 emmac 闪存的器件节点;

6.问题出在哪,你能帮我吗?  

谢谢!

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

    您能否尝试链接教程中描述的从 u-boot 对 eMMC 进行分区的步骤。
    您需要在 u-boot 提示符下停止引导。
    processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ti 引脚复用工具生成关于 emmc1的 deviceree:
    mymmc1_PINs_default:mymmc1_PINs_default{
    pinctrl-single、pins =<
    0x80 (PIN_INPUT | MUX_Mode2)/*(B9) GPMC_csn1.mmc1_clk *
    0x84 (PIN_OUTPUT | MUX_Mode2)/*(F10) GPMC_csn2.mmc1_cmd *
    0x0 (PIN_INPUT | MUX_MODE1)/*(B5) GPMC_ad0.mmc1_data0 */
    0x4 (PIN_INPUT | MUX_MODE1)/*(A5) GPMC_ad1.mmc1_DAT1 */
    0x8 (PIN_INPUT | MUX_MODE1)/*(B6) GPMC_ad2.mmc1_data2 */
    0xc (PIN_INPUT | MUX_MODE1)/*(A6) GPMC_ad3.mmc1_data3 */
    0x10 (PIN_INPUT | MUX_MODE1)/*(B7) GPMC_AD4.mmc1_data4 */
    0x14 (PIN_INPUT | MUX_MODE1)/*(A7) GPMC_ad5.mmc1_data5 */
    0x18 (PIN_INPUT | MUX_MODE1)/*(C8) GPMC_ad6.mmc1_dat6 *
    0x1c (PIN_INPUT | MUX_MODE1)/*(B8) GPMC_AD7.mmc1_DAT7 *
    >;
    };

    因此、我根据 devicetree 修改 uboot/board/ti/am43xx/mux.c、如下所示:

    #define INPUT_EN(1 << 18)
    #define PULL_DISABLE(1 << 16)
    #define PIN_INPUT(INPUT_EN | PULL_DISABLE)
    #define PIN_OUTPUT(PULL_DISABLE)

    静态结构 MODULE_PIN_mux mmc1_PIN_mux[]={
    {offset (GPMC_csn1)、(mode (2)| PIN_INPUT)}、
    {offset (GPMC_csn2)、(mode (2)| PIN_OUTPUT)}、
    {offset (GPMC_ad0)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT0 */
    {offset (GPMC_ad1)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT1 */
    {offset (GPMC_ad2)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT2 */
    {offset (GPMC_ad3)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT3 */
    {offset (GPMC_AD4)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT4 */
    {offset (GPMC_ad5)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT5 */
    {offset (GPMC_ad6)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT6 */
    {offset (GPMC_AD7)、(mode (1)| PIN_INPUT)}、/* MMC1 DAT7 */
    {-1}、
    };

    void enable_board_pin_mux (void)

    (笑声)
    CONFIG_MODULE_PIN_mux (mmc1_PIN_mux);
    (笑声)


    3.最后,在引导中,我执行以下命令:

    U-Boot# MMC 列表
    OMAP SD/MMC:0
    OMAP SD/MMC:1.
    U-Boot# MMC 开发0
    mmc0是当前器件
    U-Boot# mmcinfo
    器件:OMAP SD/MMC
    制造商 ID:3.
    OEM:5344
    姓名:SU04G
    TRAN 速度:50000000
    Rd 块 Len:512
    SD 版本3.0
    高容量:是
    容量:3.7GiB
    总线宽度:4位
    U-Boot# MMC 开发1
    MMC_READ_DATA:等待状态的指示!
    MMC_SEND_cmd:等待 cmd 禁止进行清除
    mmc1是当前器件
    U-Boot# mmcinfo
    MMC_READ_DATA:等待状态的指示!
    MMC_SEND_cmd:等待 cmd 禁止进行清除
    器件:OMAP SD/MMC
    制造商 ID:45
    OEM:100
    姓名:SEM04
    Tran 速度:25000000
    Rd 块 Len:512
    MMC 版本4.0
    高容量:是
    容量:16 EiB
    总线宽度:1位
    U-Boot#

    4.当我读取 mmc1时、reslult 为
    MMC_READ_DATA:等待状态的指示!
    MMC_SEND_cmd:等待 cmd 禁止进行清除
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第一步、我根据 wiki:Linux Core MMC/SD 用户指南配置 Linux 内核

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

    最后、我通过更改为以下内容来解决了这个问题: {offset (GPMC_csn2)、(mode (2)| PIN_input)}、