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.

[参考译文] CCS:在我的代码中集成 FATFS

Guru**** 2587345 points
Other Parts Discussed in Thread: TMDSIDK437X

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/902871/ccs-integrating-fatfs-in-my-code

器件型号:TMDSIDK437X

工具/软件:Code Composer Studio

大家好、

我能帮我了解缺失的内容。 我一直使用此代码...

我正在尝试使用以下代码执行'ls'命令。

我似乎总是得到读取的文件数为0

我正在使用终端推送进行调试、并且在运行以下代码时、我始终会得到1.-1c.2、  

这意味着 f_opendir 和 f_readdir 似乎起作用,但返回的文件名

(gFsShellAppUtilsFileInfo.fname[0]) 始终为 NULL

TerminalOutPush ("1....");
/*打开当前目录进行访问。 *
strcpy (gFsShellAppUtilsCwd、"0:");
fresult = f_opendir (&gFsShellAppUtilsDirObj、gFsShellAppUtilsCwd);
if (FR_OK!= fresult)

TerminalOutPush ("1a.."); 代码永远不会出现在这里.. 无错误
状态= 2;
中断;

/*从目录中读取条目。 *
fresult = f_readdir (&gFsShellAppUtilsDirObj、&gFsShellAppUtilsFileInfo);
if (FR_OK!= fresult)

TerminalOutPush ("1b.."); 代码永远不会出现在这里.. 无错误
状态= 2;
中断;

/*如果文件名为空,则这是列表的末尾。 *
if ('\0'=gFsShellAppUtilsFileInfo.fname[0])

TerminalOutPush ("1c.");code 总是在第一次读取时进入这里
TerminalOutPush (gFsShellAppUtilsFileInfo.fname);
状态= 2;
中断;

/*如果属性是目录,则增加目录计数。 *
if (am_DIR =>(gFsShellAppUtilsFileInfo.fattrib & AM_DIR))

dirCount++;
TerminalOutPush ("1D.."); 代码永远不会出现在这里.. 未读取任何目录

否则//它是一个文件

fileCount++;  代码永远不会出现在这里.. 文件计数为零
totalSize += gFsShellAppUtilsFileInfo.fsize;
TerminalOutPush ("1e...");

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

    您好、R2D2、

    请提供更多信息。 您正在尝试做什么? 您使用的是什么处理器? 您正在运行哪种软件? 该软件的版本是什么?

    此致、

    Nick

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

    您好、nick、

    我使用的是 idkam437x EtherCAT 从站完整示例以及附加代码

    我正在为项目添加 Fatfs 能力。

    我首先将 fat fs 示例添加到我的项目中(在尝试之后)

    我必须更改 cfg 文件(基于 EtherCAT 完整示例)才能进行编译。

    我现在通过尝试实现 dir commad 来测试合并。

    我初始化 fat fs、正如示例中所示、f_opendir 似乎可以正常工作、但正如您所看到的、我无法理解为什么我没有得到任何响应...

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

    在使用代码时,我尝试使代码变得简单,以便帮助更简单...

    运行以下代码时  

    FATFS_Handle fsHandle =空;
    FATFS_Error ferr;

    /* MMCSD FATFS 初始化*/

    FERR = FATFS_INIT (); <<<此处返回的值为0

    FERR = FATFS_OPEN (0U、NULL、&fsHandle);<<<此处返回的值为-1


    我正在使用以下 FATFS 配置变量

    /* MMCSD 执行的 MMCSD 函数表*/
    FATFS_DrvFxnTable FATFS_drvFxnTable ={
    MMCSD_Close、
    MMCSD_CONTROL、
    MMCSD_init、
    MMCSD_OPEN、
    MMCSD_WRITE、
    MMCSD_READ
    };

    /* FATFS 配置结构*/
    FATFS_HwAttrs FATFS_initCfg[_volumes]=

    //#if defined (SOC_AM65XX)|| Defined (SOC_J721E)|| Defined (SOC_J7200)
    //{//* MMC1是适用于 AM65xx GP EVM 的 SD 卡*/
    // 1U
    //}、
    //#else

    0U
    }、
    //#endif

    1U
    }、

    2U
    }、

    3u

    };

    /* FATFS 对象*/
    FATFS_Object FATFS_objects[_volumes];

    /* FATFS 配置结构*/
    const FATFSConfigList FATFS_CONFIG ={

    FATFS_drvFxnTable (FATFS_drvFxnTable)、
    FATFS_objects[0]、
    FATFS_initCfg[0]
    }、


    FATFS_drvFxnTable (FATFS_drvFxnTable)、
    FATFS_objects[1]、
    FATFS_initCfg[1]
    }、


    FATFS_drvFxnTable (FATFS_drvFxnTable)、
    FATFS_objects[2]、
    FATFS_initCfg[2]
    }、

    {NULL、NULL、NULL}、

    {NULL、NULL、NULL}
    };

    有什么想法,有什么问题?

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

    更多挖掘...更多问题

    奇怪的是,它似乎与 board_init 配置相关联

    比如说我有一个测试函数

    空测试(空)

    FATFS_Error ferr;

    FATFS_INIT();

    FERR = FATFS_OPEN (0U、NULL、&fsHandle);

    UART_printf ("\nopenferr=%d........... ",ferr);

     


    我想在 board_init 之后立即调用它。 我的代码将如下所示:

    void common_main()

    BOARD_INIT (BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_MODULE_CLOCLOCK |
    BOARD_INIT_ICSS_PINMUX | BOARD_INIT_UART_STDIO);

    //这是 EtherCAT 完整示例中的第一行...


    test()

    如果我使用  Board_init_ICSS_PINMUX、它将失败

    一旦我删除它,Test()就没有错误

    如何解决此问题的任何想法?

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

    有人...?

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

    您好!

    >>如果我使用  Board_init_ICSS_PINMUX ,它将失败

    您是否曾尝试启用带有默认 fatfs 示例的选项而不是您的集成项目以查看该选项是否起作用?

    此致、  

    Garrett

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

    您好、Garrett、

    如果我在 电路板 init @ fat fs 示例中添加 Board_init_ICSS_PINMUX,它会崩溃

    这是否有用?  

    我需要知道两件事

    1) 1)如何解决此问题

    2) 2)如何考虑\它是否对定制电路板设计有任何影响  

    谢谢

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

    有什么线索?

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

    您好!

      添加 Board_init_ICSS_PINMUX 后、 会设置 idkAM437x_icssPinMuxFlag 并跳过 MMCSD 模块配置、请参阅 packages/ti\board\sc\idkAM437x\idkAM437x.c 和 idkAM437x_pinmux.c

    /* MMCSD */

    if ((S_PASS => STATUS)&&(idkAM437x_icssPinMuxFlag = 0U))

    状态= PINMUXModuleConfig (CHIPDB_MOD_ID_MMCSD、0U、空);

    Processor SDK 中的默认 Board_init()函数具有‘Board_init_ICSS_PINMUX’和‘Board_init_PINMUX_config’(CPSW)专用的 Board_init_PINMUX_config’(CPSW)。 ‘从 AM437x IDK 原理图中可以看出,引脚复用方面似乎没有冲突,因此您需要在电路板库中删除“idkAM437x_icssPinMuxFlag”并重新构建,然后可以尝试同时配置这两个”。 请参阅 https://e2e.ti.com/support/processors/f/791/p/778872/2883725。

    您可以检查电路板上是否存在与 CPSW 和 ICSS 之间的引脚多路复用器冲突、如果没有、请尝试更新电路板库、并查看其是否正常工作。

    此致、

    车架

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

    器件型号:TMDSIDK437X

    大家好、

    我想继续在 https://e2e.ti.com/support/tools/ccs/f/81/t/902871开始的讨论

    (我厌倦了将其作为同一主题、但可能因为主题关闭 而错过了)

    在我发现将 Board_init_ICSS_PINMUX 添加到 fatfs 示例的 board_init 后,代码崩溃,

    Garret 在 PDK 软件包中找到 idkAM437x_icssPinMuxFlag、当 Board_init_ICSS_PINMUX 被置位时会禁用 MMCSD 引脚多路复用、

    并建议更改并重新编译 PDK

    使用 PDK 1_0_17时,直到昨天 Frank 在 make 文件中发现错误时,我才编译它。

    现在,我已经修改了代码,以便将标志  idkAM437x_icssPinMuxFlag  注释掉

    /* MMCSD */

    if ((S_PASS == status) /*&&(idkAM437x_icssPinMuxFlag = 0U)*/)

    状态= PINMUXModuleConfig (CHIPDB_MOD_ID_MMCSD、0U、空);

    当我尝试此操作时,它仍然不起作用:当我将突出显示的部件添加到 main_console.c 中的 FATFS Board_init 代码时

     boardCfg = BOARD_INIT_PINMUX_CONFIG | BOARD_INIT_UART_STDIO | BOARD_INIT_MODULE_CLOCLOCK  | BOARD_INIT_ICSS_PINMUX

    该示例挂起。 我厌倦了 FATFS_GPIO_ENABLED   定义,但它似乎没有关联

    我需要帮助了解标志的原因,以便我们能够确保计划的定制电路板设计成功,

    并为 IDKAM437x 解决此问题、这将允许我继续测试和开发应用

    谢谢

    R2

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

    是否有潜在客户?

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

    请参阅原理图中随附的图像

    这是限制吗? 如果我删除 R514,它是否允许我同时拥有 fat FS 和 EtherCAT,但没有 endat?

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

    您好!

    很抱歉、我只是有机会查看这个问题。 您能否检查 偏移 量为8F4h 的 CONTRAL_MODULE 0x44E1_0000以查看填充模式是否设置为模式0 (请参阅数据表引脚 B2)? 如果为 true 并且没有运行 Endat 固件、则电阻器 R514应不相关。

    您是否已进入代码以查看 idkAM437x_icssPinMuxFlag 更新中的"不工作"症状是否相同?

    此致、

    Garrett

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

    您好,

    我尝试删除了该标志。 我在重新构建 xx17 PDK 时遇到问题,结果证明这是一个错误,Frank 证明应该绕过它。

    当我移除标志并重建 PDK (使用 Frank 的 BYPASS)时,当我添加 PRUICSS 板初始化标志时,FatFS 示例不再挂起,但它不起作用,无论我做什么,FatFS 错误都会返回。

    您能进一步解释一下我需要测试的内容吗:

    "您能否检查 偏移 量为8F4h 的 CONTRAL_MODULE 0x44E1_0000、以查看填充模式是否设置为模式0 (请参阅数据表引脚 B2)"

    在哪里查找"control_module"?

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

    您好!

    TRM 第7节介绍了 CONTRAL_MODULE。 通过在 CCS 中按如下所示检查具有偏移的寄存器、您可以确认引脚是否正确复用:

    8F0h CTRL_CONF_MMC0_DAT3第7.3.1.106节
    8F4h CTRL_CONF_MMC0_DAT2第7.3.1.107节
    8F8h CTRL_CONF_MMC0_DAT1第7.3.1.108节
    8FCh CTRL_CONF_MMC0_DAT0第7.3.1.109节
    900h CTRL_CONF_MMC0_CLK 第7.3.1.110节
    904h CTRL_CONF_MMC0_CMD 第7.3.1.111节

    此致、

    Garrett