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.

[参考译文] RTOS/AM3352:eMMC 文件系统错误 FR_NOT _ENABLED

Guru**** 2589245 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/629919/rtos-am3352-emmc-filesystem-error-fr_not_enabled

器件型号:AM3352
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

详细信息:

TI-RTOS 与配合使用

PDK 1.0.7、

SYSBIOS 6.46.5.55、

EDMA3LLD 2.12.4

Linaro GNU 编译器4.9.3

定制板。 而不是仿真板。

正在从之前的项目中移植代码、该项目在具有 FATFS 的 C6748上通过 SYSBIOS。

我缺少什么吗?

那么、这是我的问题。 我们正在尝试让具有 SDCard 驱动程序的 FATFS 在我们的电路板上工作。 为了代替 SDCard、我们使用连接到 MMC0的4GB eMMC 存储芯片、我将使用示例项目 MMCSD_FatfsConsole_evmAM335x_DMA_armExampleProject 作为设置所有内容的基础。 我使用以下 代码设置 SDCard 和 FATFS:

gEdmaHandle =(EDMA3_RM_Handle) edma3init (0、&edmaResult);

if ((edmaResult = EDMA3_DRV_Sok)&&(gEdmaHandle!= NULL))

if (mMCSD_socGetInitCfg (0、hwAttrsConfig)!= 0){
//MMCSD_LOG ("\n 无法获取 MMCSD config.exiting。 测试失败。\r\n);
返回;

hwAttrsConfig.edmaHandle = gEdmaHandle;
if (mMCSD_socSetInitCfg (0、hwAttrsConfig)!= 0){
//MMCSD_LOG ("\n 无法设置 config.exiting。 测试失败。\r\n);
返回;

/* MMCSD FATFS 初始化*/
FATFS_INIT();

FATFS_OPEN (0U、NULL、FatfsHandle);

(笑声)

一切看起来都很好。 我不会遇到任何错误。 当我尝试按如下方式执行 f_open 时: 结果= f_open (&pf、p_filename、fa_open_existing | fa_read);

我的结果是 FR_NOT _ENABLED。 当我浏览 FATFS 网站()  时,我会看到这意味着什么(因为“文档没有解释它) 我发现这意味 着"f_mount  函数尚未注册逻辑驱动器的工作区"、因此我想知道我缺少什么、因为我认为没有这个示例项目就无法继续。  

在我们的最后一个项目中、我们必须发出 f_mkfs 来格式化驱动器并创建文件系统。 当我尝试在项目中包含此调用时、我收到一个错误:未定义引用、即使该调用的原型位于驱动程序内的 ff.h 中。 我评论了这个问题、因为我在示例项目中没有看到任何这样的调用、所以我只是假设驾驶员为我处理了这个问题。

此外:创建的旧文件系统从"1:\\Folder\file"开始,我不确定 FATFS 的实施是否仍以相同的方式运行

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鹅卵石

    我们将研究这个问题、并将向您回复。

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

    鹅卵石

    这似乎与某些硬件属性与您的设置不兼容相关。 以下是2个尝试选项:

    1) 1)尝试以下代码。

    if ((edmaResult =EDMA3_DRV_SOK)&&(gEdmaHandle!= NULL)
    ){
    if (MMCSD_socGetInitCfg (0、&hwAttrsConfig)!=0){
    //MMCSD_log ("\n 无法获取 MMCSD config.exiting。 测试失败。\r\n");
    返回;
    }/*
    实例0的默认 hwAttrsConfig 配置为 SD 卡(符合335x GP EVM)。
    在定制板中、由于我们将实例0与 EMMC 一起使用、因此需要更改 hwAttrs (在 ti/drv/mmcsd/SoC/AM335x/MMCSD_SoC.c 中使用默认值定义)以反映这一点。 这包括总线宽度(对于 EMMC 为8位宽度、对于 SD 卡为1位或4位宽度)*
    
    hwAttrsConfig.cardType=MMCSD_CARD_EMMC;
    hwAttrsConfig.supportedBusWidth= MMCSD_BUST_WIDTH_8bit;
    
    hwAttrsConfig.edmaHandle = gEdmaHandle;
    if (MMCSD_SetInitClog (0、hwCSD_width_8位;hwAttrConfig.edmaHandle = gedg/
    unable))。 测试失败。\r\n);
    返回;
    }
    

    2) 2)您可以从 第55行修改 C:\ti\pdk_am335x_1_0_8\packages/ti\drv\mmcsd\soc AM335x\mMCSD_SoC.c 、如下所示。 重建库以确保集成更改。

    MMCSD_v1_HwAttrs MMCSDInitCfg[MMCSD_CNT]=
    {
    {
    0、
    SoC_MMCHS_0_regs、
    64、
    82、
    96000000U、
    400000U、
    MMCSD_CARD_EMMC、
    MMCSD_BUS_WIDTH_8位、 

    Lali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我选择了选项1、但很遗憾、这没有解决我的问题。 我必须将其更改为4位总线宽度、因为我们仅使用 DATA[0:3]。 我将查看并查看我可能需要从默认值更改哪些其他选项
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    进一步了解、我发现 CLK 引脚在整个过程中没有执行任何操作。

    我很确定为此 MMC0启用了时钟

    我运行:  

    PASS = PRCMModuleEnable (CHIPDB_MOD_ID_MMCSD、0U、0U);

    其运行:

    enableModule (CM_PER_MMC0_CLKCTRL、
    CM_PER_L3_CLKSTCTRL、CM_PER_L3_CLKSTCTRL_CLKACTIVITY_MMC_FCLK);

    当我查看功能时钟(技术手册中的 PD_PER_MMC_FCLK、寄存器视图中的 CM_PER_MMC0_CLK_CTRL 寄存器)时、它显示为已启用和正常运行。 当我使用时钟树工具时、它显示我必须启用寄存器 CM_DIV_M2_DPLL_PER 的栅极、当我查看寄存器视图时、它显示所有内容都已启用并正在运行。 因此、我不确定时钟为什么不会发出。

    pinmux 代码如下所示:

    #define CONTRAL_BASE         0x44E10000

    #define PINMUX_BASE          (CONTRAL_BASE + 0x800)

    #define PIN_INPUT 0x00000020
    #define PIN_OUTPUT 0x00000000
    #define PIN_INPUT_PULLUP 0x00000030
    #define PIN_INPUT_PULLDOWN 0x00000020
    #define PIN_PULL_DISABLE 0x00000008
    #define MUX_MODE0 0x00000000
    #define MUX_MODE1 0x00000001
    #define MUX_Mode2 0x00000002
    #define MUX_MODE3 0x00000003
    #define MUX_MODE4 0x00000004
    #define MUX_MODE5 0x00000005
    #define MUX_MODE6 0x00000006
    #define MUX_MODE7 0x00000007

    *((U32 *)(PINMUX_BASE + 0x100))=(PIN_INPUT | MUX_MODE0);//(G17) mmc0_clk.mmc0_clk *

    有什么想法为什么时钟可能不会触发?

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

    我们将对此进行研究、并提供更新。

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

    1) 1)您是否已禁用内部下拉电阻器? MMC 通常具有外部上拉电阻器、因此内部下拉电阻器与外部上拉电阻器相反。 这不是最佳做法、但不应阻止时钟输出。

    2) 2)是否有尽可能靠近 AM335x MMC0_CLK 引脚的串联端接电阻器? 原理图检查清单中突出显示了此要求。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的引脚多路复用器未设置上拉或下拉、因此我不确定是否还有其他地方可以设置上拉/下拉。 在所有线路上、我们都有10k 上拉电阻器至3.3V、而 CLK 引脚附近有一个22Ohm 串联电阻器、是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    内部上拉/下拉不应影响 CLK 引脚被驱动。
    您是否已检查电路板上与此引脚相关的短路问题?
    如上所述、相关寄存器显示 CLK 处于活动状态是很奇怪的、但引脚上没有任何输出。
    另请重新检查 MMC 控制器的配置。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚将引脚切换为 GPIO、当我需要时、示波器会显示引脚变为低电平和高电平
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     运行此代码后的 MMC 配置:

    gEdmaHandle =(EDMA3_RM_Handle) edma3init (0、&edmaResult);

      if ((edmaResult = EDMA3_DRV_Sok)&&(gEdmaHandle!= NULL))

      {

        if (mMCSD_socGetInitCfg (0、hwAttrsConfig)!= 0){

         //MMCSD_LOG ("\n 无法获取 MMCSD config.exiting。 测试失败。\r\n);

         返回;

        }

        /*实例0的默认 hwAttrsConfig 配置为 SD 卡(符合335x GP EVM)。

        在 定制板中、由于我们将实例0与 EMMC 一起使用、因此 hwAttrs (在 ti/drv/mmcsd/SoC/AM335x/MMCSD_SoC.c 中使用默认值定义)

        需要进行更改以反映这一点。 这包括总线宽度(EMMC 为8位宽度、SD 卡为1位或4位宽度)*/

        hwAttrsConfig.cardType=MMCSD_CARD_EMMC;

        hwAttrsConfig.supportedBusWidth= MMCSD_BUS_WIDTH_4BIT;

        hwAttrsConfig.edmaHandle = gEdmaHandle;

        if (mMCSD_socSetInitCfg (0、hwAttrsConfig)!= 0){

          //MMCSD_LOG ("\n 无法设置 config.exiting。 测试失败。\r\n);

          返回;

        }

    /* MMCSD FATFS 初始化*/

    FATFS_INIT();

    FATFS_OPEN (0U、NULL、FatfsHandle);

    FRESULT 结果;

    fil pf;

    结果= f_open (&pf、SDPATH_system_file、fa_open_existing | fa_read);

      }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我对上一篇文章感到困惑。
    因此、CLK 引脚无法正常工作的问题已解决、我们现在回到原来的 FR_NOT _ENABLED 问题?
    或者、您是否发布过此帖子以显示您的配置是为了解决 CLK 引脚问题?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉。 没有解决任何问题。 我刚刚展示了我的代码和配置设置、因为我是此芯片的任何驱动程序的新手。 我将引脚设置为 GPIO、我可以对其进行操作、以证明其已连接到焊盘而未短接;当它是 CLK 时、它不执行任何操作。 我不知道如何解决 clk 引脚问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、明白了。
    让我们来看看 MMC 控制器设置。
    您的完整示例遵循 MMCSD_FatfsConsole_evmAM335x_DMA_armExampleProject 中的外设初始化例程?
    您是否可以共享显示 pinmux 配置和 init 例程的完整示例?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我之前已经发布过它、但这里是我的 Pinmux 例程

    #define CONTRAL_BASE 0x44E10000
    #define PINMUX_BASE (CONTRAL_BASE + 0x800)
    #define PIN_INPUT 0x00000020
    #define PIN_OUTPUT 0x00000000
    #define PIN_INPUT_PULLUP 0x00000030
    #define PIN_INPUT_PULLUP 0x00000020
    #define PIN_PULL_DISABLE 0x00000008
    #define MUX_MODE0 0x00000000
    #define MUX_MODE1 0x00000001
    #define MUX_mode2 0x00000002
    #define MUX_MODE3 0x00000003
    #define MUX_MODE4 0x00000004
    #define MUX_MODE5 0x00000005
    #define MUX_MODE6 0x00000006
    #define MUX_MODE7 0x00000007

    空 InitPinMux (空)

    *(((U32 *)(PINMUX_BASE + 0x1d0))=(PIN_INPUT | MUX_MODE0);//(C11) TMs.TMS *
    *(((U32 *)(PINMUX_BASE + 0x1d4))=(PIN_INPUT | MUX_MODE0);//(B11) TDI.tDI */
    *(((U32 *)(PINMUX_BASE + 0x1d8))=(PIN_OUTPUT | MUX_MODE0);//(A11) TDO.TDO */
    *(((U32 *)(PINMUX_BASE + 0x1dc))=(PIN_INPUT | MUX_MODE0);//(A12) TCK.TCK *
    *((U32 *)(PINMUX_BASE + 0x1e0))=(PIN_INPUT | MUX_MODE0);//(B10) nTRST.nTRST *
    *((U32 *)(PINMUX_BASE + 0x1e4))=(PIN_INPUT | MUX_MODE0);//(C14) EMU0.EMU0 *
    *(((U32 *)(PINMUX_BASE + 0x1e8))=(PIN_INPUT | MUX_MODE0);//(B14) EMU1.EMU1 *

    *(((U32 *)(PINMUX_BASE + 0x88))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T13) GPMC_csn3.GPIO2[0]*
    *(((U32 *)(PINMUX_BASE + 0x8c))=(PIN_INPUT 下拉| MUX_MODE7);//(V12) GPMC_clk.GPIO2[1]*
    *(((U32 *)(PINMUX_BASE + 0x90))=(PIN_INPUT_PULLUP | MUX_MODE7);//(R7) GPMC_ADVn_ALE.GPIO2[2]*
    *(((U32 *)(PINMUX_BASE + 0x94))=(PIN_OUTPUT | MUX_MODE7);//(T7) GPMC_oen_ren.GPIO2[3]*/
    *(((U32 *)(PINMUX_BASE + 0x98))=(PIN_INPUT 下拉| MUX_MODE7);//(U6) GPMC_WN.GPIO2[4]*/
    *(((U32 *)(PINMUX_BASE + 0x9C))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T6) GPMC_BE0n_cle。GPIO2[5]*
    *(((U32 *)(PINMUX_BASE + 0x134))=(PIN_INPUT 下拉| MUX_MODE7);//(L17) gmii1_rxd3.gpio2[18]*
    *(((U32 *)(PINMUX_BASE + 0x138))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L16) gmii1_rxd2.gpio2[19]*
    *(((U32 *)(PINMUX_BASE + 0x13c))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L15) gmii1_rxd1.gpio2[20]*/
    *(((U32 *)(PINMUX_BASE + 0x140))=(PIN_INPUT_PULLUP | MUX_MODE7);//(M16) gmii1_rxd0.gpio2[21]*

    *((U32 *)(PINMUX_BASE + 0x164))=(PIN_INPUT | MUX_MODE7);//(C18) eCAP0_IN_PWM0_OUT.GPIO0[7]*
    *(((U32 *)(PINMUX_BASE + 0x11c))=(PIN_INPUT | MUX_MODE7);//(J18) gmii1_txd3.gpio0[16]*
    *(((U32 *)(PINMUX_BASE + 0x120))=(PIN_INPUT | MUX_MODE7);//(K15) gmii1_txd2.gpio0[17]*/
    *(((U32 *)(PINMUX_BASE + 0x124))=(PIN_INPUT | MUX_MODE7);//(K16) gmii1_txd1.gpio0[21]*/
    *(((U32 *)(PINMUX_BASE + 0x20))=(PIN_INPUT | MUX_MODE7);//(U10) GPMC_AD8.GPIO0[22]*
    *(((U32 *)(PINMUX_BASE + 0x24))=(PIN_INPUT | MUX_MODE7);//(T10) GPMC_ad9.GPIO0[23]*
    *((U32 *)(PINMUX_BASE + 0x28))=(PIN_INPUT | MUX_MODE7);//(T11) GPMC_ad10.GPIO0[26]*
    *(((U32 *)(PINMUX_BASE + 0x2C))=(PIN_INPUT | MUX_MODE7);//(U12) GPMC_AD11.GPIO0[27]*
    //*(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUIN_PULLUP | MUX_MODE7);//(H18) rmii1_ref_clk.GPIO0[29]*/

    *((U32 *)(PINMUX_BASE + 0x0))=(PIN_INPUT | MUX_MODE7);//(U7) GPMC_ad0.GPIO1[0]*
    *((U32 *)(PINMUX_BASE + 0x4))=(PIN_INPUT | MUX_MODE7);//(V7) GPMC_ad1.GPIO1[1]*
    *((U32 *)(PINMUX_BASE + 0x8))=(PIN_INPUT | MUX_MODE7);//(R8) GPMC_ad2.GPIO1[2]*
    *((U32 *)(PINMUX_BASE + 0xc))=(PIN_INPUT | MUX_MODE7);//(T8) GPMC_ad3.GPIO1[3]*/
    *(((U32 *)(PINMUX_BASE + 0x10))=(PIN_INPUT | MUX_MODE7);//(U8) GPMC_AD4.GPIO1[4]*/
    *(((U32 *)(PINMUX_BASE + 0x14))=(PIN_INPUT | MUX_MODE7);//(V8) GPMC_AD5.GPIO1[5]*
    *(((U32 *)(PINMUX_BASE + 0x18))=(PIN_INPUT | MUX_MODE7);//(R9) GPMC_AD6.GPIO1[6]*
    *(((U32 *)(PINMUX_BASE + 0x1c))=(PIN_INPUT | MUX_MODE7);//(T9) GPMC_AD7.GPIO1[7]*
    *(((U32 *)(PINMUX_BASE + 0x170))=(PIN_INPUT | MUX_MODE7);//(E15) uart0_RxD.GPIO1[10]*
    *((U32 *)(PINMUX_BASE + 0x30))=(PIN_INPUT | MUX_MODE7);//(T12) GPMC_AD12.GPIO1[12]*
    *((U32 *)(PINMUX_BASE + 0x34))=(PIN_INPUT | MUX_MODE7);//(R12) GPMC_ad13.GPIO1[13]*
    *(((U32 *)(PINMUX_BASE + 0x38))=(PIN_INPUT | MUX_MODE7);//(V13) GPMC_ad14.GPIO1[14]*
    *(((U32 *)(PINMUX_BASE + 0x3c))=(PIN_INPUT | MUX_MODE7);//(U13) GPMC_ad15.GPIO1[15]*/
    *(((U32 *)(PINMUX_BASE + 0x44))=(PIN_INPUT | MUX_MODE7);//(V14) GPMC_A1.GPIO1[17]*
    *(((U32 *)(PINMUX_BASE + 0x48))=(PIN_INPUT | MUX_MODE7);//(U14) GPMC_A2.GPIO1[18]*
    *(((U32 *)(PINMUX_BASE + 0x4c))=(PIN_INPUT | MUX_MODE7);//(T14) GPMC_A3.GPIO1[19]*
    *(((U32 *)(PINMUX_BASE + 0x58))=(PIN_INPUT | MUX_MODE7);//(U15) GPMC_A6.GPIO1[22]*
    *(((U32 *)(PINMUX_BASE + 0x5c))=(PIN_INPUT | MUX_MODE7);//(T15) GPMC_A7.GPIO1[23]*
    *(((U32 *)(PINMUX_BASE + 0x60))=(PIN_INPUT | MUX_MODE7);//(V16) GPMC_A8.GPIO1[24]*
    *(((U32 *)(PINMUX_BASE + 0x64))=(PIN_INPUT | MUX_MODE7);//(U16) GPMC_A9.GPIO1[25]*
    *(((U32 *)(PINMUX_BASE + 0x78))=(PIN_INPUT | MUX_MODE7);//(U18) GPMC_BE1n.GPIO1[28]*/
    *(((U32 *)(PINMUX_BASE + 0x7c))=(PIN_INPUT | MUX_MODE7);//(V6) GPMC_csn0.GPIO1[29]*/
    *((U32 *)(PINMUX_BASE + 0x80))=(PIN_INPUT | MUX_MODE7);//(U9) GPMC_csn1.GPIO1[30]*
    *(((U32 *)(PINMUX_BASE + 0x84))=(PIN_INPUT | MUX_MODE7);//(V9) GPMC_csn2.GPIO1[31]*/

    *((U32 *)(PINMUX_BASE + 0x114))=(PIN_INPUT | MUX_MODE7);//(J16) gmii1_txen.GPIO3[3]*/
    *((U32 *)(PINMUX_BASE + 0x118))=(PIN_INPUT | MUX_MODE7);//(J17) gmii1_rxdv.GPIO3[4]*/
    *(((U32 *)(PINMUX_BASE + 0x188))=(PIN_INPUT_PULLUP | MUX_MODE7);//(C17) I2C0_SDA.GPIO3[5]*
    *(((U32 *)(PINMUX_BASE + 0x18c))=(PIN_INPUT | MUX_MODE7);//(C16) I2C0_SCL.GPIO3[6]*/
    *(((U32 *)(PINMUX_BASE + 0x12c))=(PIN_INPUT | MUX_MODE7);//(K18) gmii1_txclk.GPIO3[9]*
    *((U32 *)(PINMUX_BASE + 0x130))=(PIN_INPUT | MUX_MODE7);//(L18) gmii1_rxclk.GPIO3[10]*
    *(((U32 *)(PINMUX_BASE + 0x234))=(PIN_INPUT | MUX_MODE7);//(F15) USB1_DRVVBUS.GPIO3[13]*/
    *(((U32 *)(PINMUX_BASE + 0x19c))=(PIN_INPUT | MUX_MODE7);//(C12) McASP0_ahclkr.GPIO3[17]*/
    *(((U32 *)(PINMUX_BASE + 0x1a0))=(PIN_INPUT | MUX_MODE7);//(B12) McASP0_aclkr.GPIO3[18]*/
    *(((U32 *)(PINMUX_BASE + 0x1a4))=(PIN_INPUT | MUX_MODE7);//(C13) McASP0_fsr.GPIO3[19]*
    *(((U32 *)(PINMUX_BASE + 0x1ac))=(PIN_INPUT | MUX_MODE7);//(A14) McASP0_ahclkx.GPIO3[21]*

    *((U32 *)(PINMUX_BASE + 0x190))=(PIN_INPUT | MUX_MODE0);//(A13) McASP0_aclkx.McASP0_aclkx *
    *((U32 *)(PINMUX_BASE + 0x194))=(PIN_INPUT | MUX_MODE0);//(B13) McASP0_FSX.McASP0_FSX *
    *(((U32 *)(PINMUX_BASE + 0x198))=(PIN_INPUT | MUX_MODE0);/*(D12) McASP0_axr0.McASP0_axr0 */
    *(((U32 *)(PINMUX_BASE + 0x1a8))=(PIN_INPUT | MUX_MODE0);//(D13) McASP0_axr1.McASP0_axr1 *

    *(((U32 *)(PINMUX_BASE + 0x10c))=(PIN_INPUT | MUX_MODE4);//(H17) gmii1_crs.McASP1_aclkx *
    *((U32 *)(PINMUX_BASE + 0x110))=(PIN_INPUT | MUX_MODE4);//(J15) gmii1_rxer.McA1_FSX *
    *((U32 *)(PINMUX_BASE + 0x128))=(PIN_INPUT | MUX_MODE3);//(K17) gmii1_txd0.McASP1_axr2 *
    *(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUT | MUX_MODE4);//(H18) rmii1_REFCLK/McASP1_axr3 *

    *((U32 *)(PINMUX_BASE + 0x14c))=(PIN_OUTPUT | MUX_MODE0);//(M18) MDIO_clk.MDIO_clk *
    *((U32 *)(PINMUX_BASE + 0x148))=(PIN_INPUT | MUX_MODE0);//(M17) MDIO_DATA.MDIO_DATA *

    *(((U32 *)(PINMUX_BASE + 0x1b0))=(PIN_INPUT | MUX_MODE0);//(A15) xdma_event_intr0.xdma_event_intr0 */
    *(((U32 *)(PINMUX_BASE + 0x1b4))=(PIN_INPUT | MUX_MODE0);//(D14) xdma_event_intr1.xdma_event_intr1 */

    *(((U32 *)(PINMUX_BASE + 0x174))=(PIN_OUTPUT | MUX_MODE4);//(E16) uart0_TXD.eCAP1_IN_PWM1_OUT *

    *((U32 *)(PINMUX_BASE + 0xe0))=(PIN_OUTPUT | MUX_MODE0);//(U5) LCD_vSYNC.LCD_vsync *
    *((U32 *)(PINMUX_BASE + 0xe4))=(PIN_OUTPUT | MUX_MODE0);//(R5) LCD_HSYNC.LCD_HSYNC *
    *((U32 *)(PINMUX_BASE + 0xe8))=(PIN_OUTPUT | MUX_MODE0);//(V5) LCD_pclk.LCD_pclk *
    *((U32 *)(PINMUX_BASE + 0xec))=(PIN_OUTPUT | MUX_MODE0);//(R6) LCD_AC_BIAS_EN.LCD_AC_BIAS_EN *
    *((U32 *)(PINMUX_BASE + 0xa0))=(PIN_OUTPUT | MUX_MODE0);//(R1) LCD_Data0.LCD_Data0 *
    *(((U32 *)(PINMUX_BASE + 0xa4))=(PIN_OUTPUT | MUX_MODE0);//(R2) LCD_data1.LCD_data1 *
    *(((U32 *)(PINMUX_BASE + 0xa8))=(PIN_OUTPUT | MUX_MODE0);//(R3) LCD_data2.LCD_data2 *
    *(((U32 *)(PINMUX_BASE + 0xac))=(PIN_OUTPUT | MUX_MODE0);//(R4) LCD_data3.LCD_data3 *
    *((U32 *)(PINMUX_BASE + b0))=(PIN_OUTPUT | MUX_MODE0);//(T1) LCD_data4.LCD_data4 *
    *((U32 *)(PINMUX_BASE + b4))=(PIN_OUTPUT | MUX_MODE0);//(T2) LCD_data5.LCD_data5 *
    *((U32 *)(PINMUX_BASE + b8))=(PIN_OUTPUT | MUX_MODE0);//(T3) LCD_data6.LCD_data6 *
    *((U32 *)(PINMUX_BASE + bb c))=(PIN_OUTPUT | MUX_MODE0);//(T4) LCD_data7.LCD_data7 *
    *((U32 *)(PINMUX_BASE + 0xc0))=(PIN_OUTPUT | MUX_MODE0);//(U1) LCD_data8.LCD_data8 *
    *((U32 *)(PINMUX_BASE + 0xc4))=(PIN_OUTPUT | MUX_MODE0);//(U2) LCD_data9.LCD_data9 *
    *((U32 *)(PINMUX_BASE + 0xc8))=(PIN_OUTPUT | MUX_MODE0);//(U3) LCD_data10.LCD_data10 *
    *(((U32 *)(PINMUX_BASE + 0xcc))=(PIN_OUTPUT | MUX_MODE0);//(U4) LCD_data11.LCD_data11 *
    *(((U32 *)(PINMUX_BASE + 0xd0))=(PIN_OUTPUT | MUX_MODE0);//(V2) LCD_data12.LCD_data12 *
    *(((U32 *)(PINMUX_base + 0xd4))=(PIN_OUTPUT | MUX_MODE0);//(V3) LCD_data13.LCD_data13 *
    *((U32 *)(PINMUX_BASE + 0xd8))=(PIN_OUTPUT | MUX_MODE0);//(V4) LCD_data14.LCD_data14 *
    *(((U32 *)(PINMUX_BASE + 0xdc))=(PIN_OUTPUT | MUX_MODE0);//(T5) LCD_data15.LCD_data15 *

    *((U32 *)(PINMUX_BASE + 0x70))=(PIN_INPUT | MUX_MODE3);//(T17) GPMC_wait0.rmii2_crs_dv *
    *((U32 *)(PINMUX_BASE + 0x74))=(PIN_INPUT | MUX_MODE3);//(U17) GPMC_WPN.rmii2_rxer *
    *((U32 *)(PINMUX_BASE + 0x40))=(PIN_OUTPUT | MUX_MODE3);//(R13) GPMC_a0.rmii2_txen */
    *((U32 *)(PINMUX_BASE + 0x54))=(PIN_OUTPUT | MUX_MODE3);//(V15) GPMC_A5.rmii2_txd0 */
    *((U32 *)(PINMUX_BASE + 0x50))=(PIN_OUTPUT | MUX_MODE3);//(R14) GPMC_A4.rmii2_txd1 *
    *((U32 *)(PINMUX_BASE + 0x6c))=(PIN_INPUT | MUX_MODE3);//(V17) GPMC_A11.rmii2_rxd0 *
    *((U32 *)(PINMUX_BASE + 0x68))=(PIN_INPUT | MUX_MODE3);//(T16) GPMC_A10.rmii2_rxd1 */
    *(((U32 *)(PINMUX_BASE + 0x108))=(PIN_INPUT | MUX_MODE1);//(H16) gmii1_col.rmii2_REFCLK *

    *((U32 *)(PINMUX_BASE + 0x100))=(PIN_INPUT | MUX_MODE0);//(G17) mmc0_clk.mmc0_clk *
    *((U32 *)(PINMUX_BASE + 0x104))=(PIN_INPUT | MUX_MODE0);//(G18) mmc0_cmd.mmc0_cmd *
    *(((U32 *)(PINMUX_BASE + 0xFC))=(PIN_INPUT | MUX_MODE0);//(G16) mmc0_data0.mmc0_data0 */
    *(((U32 *)(PINMUX_BASE + 0xf8))=(PIN_INPUT | MUX_MODE0);//(G15) mmc0_data1.mmc0_data1 *
    *(((U32 *)(PINMUX_BASE + 0xf4))=(PIN_INPUT | MUX_MODE0);//(F18) mmc0_data2.mmc0_data2 *
    *(((U32 *)(PINMUX_BASE + 0xf0))=(PIN_INPUT | MUX_MODE0);//(F17) mmc0_data3.mmc0_data3 *

    *((U32 *)(PINMUX_BASE + 0x16c))=(PIN_INPUT | MUX_MODE3);//(E17) uart0_rtsn.I2C1_SCL *
    *((U32 *)(PINMUX_BASE + 0x168))=(PIN_INPUT | MUX_MODE3);//(E18) uart0_CTSN.I2C1_SDA *

    *(((U32 *)(PINMUX_BASE + 0x21c))=(PIN_OUTPUT | MUX_MODE0);//(F16) USB0_DRVVBUS.USB0_DRVVBUS *

    *(((U32 *)(PINMUX_BASE + 0x150))=(PIN_INPUT | MUX_MODE0);//(A17) spi0_SCLK.spi0_SCLK */
    *((U32 *)(PINMUX_BASE + 0x154))=(PIN_OUTPUT | MUX_MODE0);//(B17) spi0_d0.spi0_d0 *
    *(((U32 *)(PINMUX_BASE + 0x158))=(PIN_INPUT | MUX_MODE0);//(B16) spi0_D1.spi0_D1 *
    *((U32 *)(PINMUX_BASE + 0x15c))=(PIN_OUTPUT | MUX_MODE0);//(A16) spi0_cs0.spi0_cs0 *
    *((U32 *)(PINMUX_BASE + 0x160))=(PIN_OUTPUT | MUX_MODE0);//(C15) spi0_CS1.spi0_CS1 *

    *(((U32 *)(PINMUX_BASE + 0x180))=(PIN_INPUT | MUX_MODE0);//(D16) uart1_Rxd.uart1_RxD */
    *((U32 *)(PINMUX_BASE + 0x184))=(PIN_OUTPUT | MUX_MODE0);//(D15) uart1_TXD.uart1_TXD *
    *((U32 *)(PINMUX_BASE + 0x178))=(PIN_INPUT | MUX_MODE0);//(D18) uart1_CTSN.uart1_CTSn *
    *(((U32 *)(PINMUX_BASE + 0x17c))=(PIN_OUTPUT | MUX_MODE0);//(D17) uart1_rtsn.uart1_rtsn *


    您还需要其他哪些初始化例程? 如果您希望我的项目、我可以将其发送给您、但我不会在论坛上发布整个项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我看看这一点和后续行动。 您之前的 pinmux 发布没有完成为最新版本。

    pinmux 代码如下所示:
    
    #define control_BASE 0x44E10000
    
    #define PINMUX_BASE (CONTRAL_BASE + 0x800)
    
    #define PIN_INPUT 0x00000020
    
    #define PIN_OUTPUT 0x00000000
    
    #define PIN_INPUT_PULLUP 0x00000030
    
    #define PIN_INPUT_PULLLOD
    
    0x00000008
    
    #define MUX_MODE0 0x00000000
    
    #define MUX_MODE1 0x00000001 #define PIN_OUT_MODEUTDOUX_DEUTDOUUX0x00000006 #define 0x00000006
    
    
    
    #define MUX_MOUUUUUUUUUUUUUUUUUUUUUUUUUUUUX#define 0x00000004 #define 0x00000006 #define 0x00000004 #define 0x00000006 #define 0x00000006 #define MDOUUUUUUUUX
    
    
    
    
    
    
    
    
    
    (PIN_INPUT | MUX_MODE0);//(G17) mmc0_clk.mmc0_clk * 

    Lali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鹅卵石
    请对以下所有问题作出答复。

    查看您的引脚多路复用器配置、没有明显的情况会因为配置错误而出现问题。 在内部检查后,需要注意的是,只有在总线上有事务处理时,CLK 才会有“操作”。 因此、它似乎不会是始终开启的 CLK。

    1) 1)说过、您是否有2个器件共享同一个 eMMC 总线? 如果是这样、您是否可以消除一个并进行测试? 您如何在总线上选择要使用的器件?

    2) 2)您能否布置相关引脚多路复用设置和 PRCM 寄存器的寄存器转储?

    3) 3)我对该主题的第一次答复中的选项#2是否起作用? 你试过这个吗?

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

    嗯、我可以想象、在 MMC 初始化期间的某个点、它会检查器件存储器以查看它是否已格式化、此外、我们还尝试 f_open、因此在这两种情况之间、CLK 引脚将尝试执行一些操作

    1) 1)我们在该总线上只有一个器件。 所有线路都直接连接到器件、因此始终与 eMMC 和 eMMC 通信。

    2)

    这个没有任何意义。 如果 CM_DIV_M4_DPLL_CORE 被选通、那么我的很多其他外设都不应该有一个时钟、这些外设像 GPIO、UART、I2C 等一样工作(根据时钟树工具)

    3) 3)我没有做#2、因为它看起来与#1做的事情相同、但将其设为默认值、而不是动态更改 cfg、因此由于没有区别、我选择了不需要我重建库的选项

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

    设置看起来正确。
    为了进一步帮助了解硬件是否正常、下面提供了一种测试引脚的方法、以确保引脚按预期工作。

    -使用 SD_CON 寄存器的位4将 MMC0置于 SYSTEST 模式。
    -使用相应的 SD_SYSTEST 寄存器位进行切换、以验证每个 MMC0引脚是否按预期工作。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所有引脚按照命令变为高电平和低电平。 这些引脚按照我所能告诉的正确顺序进行连接

    我应该问题可能出在 eMMC 芯片上。 我必须询问电路板是否已进行过 X 射线检查、并仔细检查电路板文件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鹅卵石
    请将我们的信息发布在此处。 同意需要检查硬件以使其保持良好状态。

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

    是否有关于此问题的任何更新?
    正在等待您查看 eMMC 硬件并返回给我们。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我遇到了其他问题。

    根据我们的硬件人员、芯片是 X 射线芯片、他说布局正确、焊盘正确。

    我确实确认了所有引脚都连接到了 ARM、并且可以变为高电平或低电平、因此我猜我肯定会遇到某种软件问题、因为时钟永远不会执行任何操作、我想我们至少会从它获得一分钟的活动时间 当它尝试与连接的任何芯片进行通信以开始任何驱动程序活动时。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鹅卵石

    再深入了解一下软件、我们将会向您回复。

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

    鹅卵石

    仔细查看驱动程序软件并考虑硬件布局后、当前驱动程序不支持4位宽度访问。 驱动程序中的配置用于8位宽度访问、这适用于 PDK 中的 Beagle Bone Black 示例。 您是否会考虑在下一个电路板版本上进行8位设计?

    回想一下您将 SD 卡插入插槽的情况、当总线上存在两个器件时、如何在 SD 和 eMMC 之间进行多路复用? 您是否使用了某种仲裁方法?  

    Lali

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

    嗯、至少现在我有一个答案。 感谢您为我提供帮助。 我们尝试的下一个电路板版本将不使用它或使用8位。 这一切都取决于我们需要的 GPIO

    我们绝不会同时在电路板上放置 SDCard 和 eMMC。 这只是一个原型、因此我们可以使用其中一个原型。

    那么、就它为什么不能与 SDCard 一起使用而言、软件对此似乎是正确的吗? 接下来、我们将取下 eMMC 芯片、尝试使用 SDCard

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

    碳酸氢、


    啊、好的。 我现在了解您的方法。

    是的、用于 SD 访问的软件应该仍然正常。
    如果您能关闭该主题、我将不胜感激。 谢谢。

    Lali