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.

[参考译文] PROCESSOR-SDK-AM437X:结合 QSPI 和 FATFS 控制台项目

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

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/977485/processor-sdk-am437x-combine-qspi-and-fatfs-console-project

器件型号:PROCESSOR-SDK-AM437X
Thread 中讨论的其他器件:SYSBIOS

您好!

我正在使用 CCS 8.3.0.9运行 Processor SDK RTOS AM437x v5.3.0.7版本的"FATFS_Console_idkAM437x_armExampleProject"。 该代码在 AM437x IDK 板上运行。

我的计划是编写一个自己的“QSPI 闪存准备”工具,此工具应打开位于 SD 卡上的文件并将其复制到 QSPI 闪存(在我的情况下,该文件将是 QSPI 次级引导加载程序(SBL))。 之后、我想移除 SD 卡、并看到 ROM 引导加载程序(RBL)正在在下一个下电上电时加载 QSPI SBL。

这意味着,我想将两个示例项目“FATFS_Console_idkAM437x_armExampleProject”和“QSPI_BasicExample_idkAM437x_armExampleProject”相结合。

我执行了以下操作:

步骤1.

我以"FATFS_Console_idkAM437x_armExampleProject"为基础、并在配置文件中加载了 SPI 包。

步骤2.

我向"QSPI_BasicExample_idkAM437x_armExampleProject"内的 include 目录添加了"ti/drv/spi"路径。

步骤3.

我将第一个极简代码从“QSPI_BasicExample_idkAM437x_armExampleProject”复制到“FATFS_Console_idkAM437x_armExampleProject”。

当我现在调用函数 SF25FL_open 时、我在驱动程序的较深位置得到一个异常(我假设在 CSL 内部、但我需要深入探究一下)。

我看不到这两个示例项目之间的任何其他显著差异。 如果我错过了什么、您能告诉我吗?

谢谢、

Inno

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

    您好 Inno、

    我不能确切地说什么是可以错过的。 也许您可以比较这两个项目的 XDC 配置文件,并查看是否还有项目 “QSPI_BasicExample_idkAM437x_armExampleProject”中需要添加到项目“FATFS_Console_idkAM437x_armExampleProject”中的任何其他内容。

    此致、

    _________

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

    您好 、Jianzhong、

    非常感谢。 由于您的建议、我取得了一些进展。 正如您所说的、XDC 配置文件中确实缺少一些内容。 现在、我能够访问 QSPI 闪存、但 FAT 文件访问函数会崩溃、并出现相同类型的错误。 让我解释一下...

    在"FATFS_Console_idkAM437x_armExampleProject"的 XDC 配置文件的末尾、您将看到以下行:

    我已确定"QSPI_BasicExample_idkAM437x_armExampleProject"的 XDC 配置文件中还有其他行、我只将这些行复制到 FAT 示例项目(请参阅下图中的红色矩形)。 我必须承认、我不知道这些指令的含义。

    尽管如此、从现在起、我可以通过 TI 的 QSPI NOR 闪存驱动程序访问自己的写入函数、从 QSPI 闪存中读取有意义的数据(我用贪婪的矩形突出显示它们) 但是、当我调用诸如"FSShellAppUtilsFrmtPath"之类的文件访问函数时、软件现在崩溃(请参阅下图中的红色矩形)。 崩溃几乎与我最初报告的情况相同。  

    因此、将指令从 QSPI 复制到 FAT XDC 配置文件可修复 QSPI 闪存访问、但会中断 FAT 函数调用。  

    我的问题是:

    1)位于 XDC 配置文件底部的行(函数调用 Mmu.setFirstLevelDescMeta)的含义是什么?
    2) 2)我如何实现这一目标、即在同一个项目中、我可以访问 NOR 闪存驱动程序函数、也可以并行访问文件访问驱动程序函数?

    谢谢、

    Inno

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

    您好 Inno、

    Mmu.setFirstLevelDescMeta ()来自内存管理单元。 请参阅  /docs/cdoc/ti/sysbios/family/arm/a8/Mmu.html 了解详情。

    您遇到的崩溃问题很可能是由两个示例项目中的 MMU 配置冲突引起的。 您可能还需要查看此主题、该主题对 MMU 的使用有一些很好的解释: https://e2e.ti.com/support/processors/f/791/t/908657。  

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

    您好 、Jianzhong、

    我将仔细阅读 E2E 帖子和 SDK 中的 HTML 文档。 我在 E2E 帖子中发现了您在上面提到的以下陈述:

    " 当 CPU 尝试对这些页面中的地址进行 R/W 访问时、MMU 将在没有这些转换表条目的情况下生成异常。"

    这很可能是我在初始帖子中遇到的情况。

    同时,我似乎也发现了第二次撞车的原因。 它未连接到 MMU 配置。 我猜我发现了"FATFS_Console_idkAM437x_armExampleProject"项目中的一个错误。 我基本上将"FSShellAppUtilsCmdCAT"中的某些代码复制 到我自己的函数中、但我认为即使在"FSShellAppUtilsCmdCAT"中也存在错误。  

    请查看下面的"FSShellAppUtilsFrmtPath"函数调用:

    您可以看到、在任何情况下、函数"FSShellAppUtilsFrmtPath"都是使用参数"argv[1U]"调用的。 "argv[1U]"是一个指针、指向控制台命令的第二个参数。 如果我键入控制台命令"cat readme.txt"、则"argv[1U]"指向"readme.txt"的"r"。

    但是、如果我在没有任何进一步参数的情况下调用"cat"命令、该怎么办? 在这种情况下、"argv[1U]"可能无法初始化、并且可能指向任何位置! 因此、即使从 UART 控制台调用"cat"命令、我也设法让软件崩溃。

    我认为"FSShellAppUtilsCmdCAT"函数中缺少的代码如下所示:

    if (argc <= 1)

      FATFS_LOG ("参数太小、调用 CAT 时输入文件名!!!!!\n");
      返回 CSL_ESYS_FAIL;

    你怎么看、这是否是一个错误?

    另一个问题是、示例项目的程序在从 EMIF 基址0x8000000开始的 DDR 存储器上运行。 那么、为什么我们需要在 XDC 配置文件中为外设寄存器的 ARM MMU 转换表添加一个表条目、代码访问哪个外设寄存器、但不访问 DDR 存储器? 我想知道为什么从"MMU.html"文件中获取的以下行不是每个示例项目配置文件的一部分:   

    //为
    (var i=0x80000000;i < 0x90000000;i = i + 0x00100000){的地址范围内的每个条目设置描述符
    //每个“描述符”条目跨越1MB 地址范围
    Mmu.setFirstLevelDescMeta(i、i、atttrs);
    }
    

    我还希望、如果 ARM 内核在访问 DDR 时未识别"转换表命中"、则会创建异常。

    谢谢、

    Inno  

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

    [引用 user="inno">为什么我们需要在 XDC 配置文件中为外设寄存器的 ARM MMU 转换表添加一个表条目、代码会访问该表、 但不适用于 DDR 存储器?我认为这是因为 SYS/BIOS 配置会自动为 CPU 存储器映射添加 MMU 条目。

    例如、在 BIOS_6_73_01_01/packages/ti/sysbios/family/ARM/A8/MMu.xs 中、有一 个函数模块$static$init、其循环通过 Program.cpu.memoryMap 进行迭代、从而添加 MMU 表条目。

    其中 ti.sysbios.family.arm.a8.MMU SYS/BIOS 模块也用于 Cortex-A9 AM37x 器件。

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

    谢谢切斯特。 我在映射文件中找到了以下内容:

    MMU 转换表很可能位于 DDR 存储器上。 那么、SYS/BIOS 配置如何将 DDR 存储器部分添加到位于 DDR 上的 MMU 表中? 这不是冲突吗? 起初、我假设无法访问 DDR、除非 ARM 内核在不涉及任何存储器转换操作的状态下运行。

    Jianzhong、当调用命令时、控制台中没有使用参数时、我调用"FSShellAppUtilsFrmtPath"时遇到的问题是什么呢? 这是否是一个错误?

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

    ]一开始我假设 DDR 不可访问、除非 ARM 内核在不涉及任何存储器转换操作的状态下运行。

    复位时禁用 MMU。 请参阅    Cortex-A9技术参考手册中系统控制寄存器中的 M 位。

    BIOS_6_75_02_00/packages/ti/sysBIOS/系列/arm/A8/MM4.c 包含设置 MMU 的函数。

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

    谢谢切斯特、这说明了一切。

    Jianzhong、您能否查看我有关示例项目的上述问题? 调用命令时、如果用户在控制台中没有输入进一步的参数、调用"FSShellAppUtilsFrmtPath"是否有意义? 这是否是一个错误? 之后、我可以关闭此 E2E 帖子。

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

    您好 Inno、

    感谢您在 FATFS 示例代码中报告此问题。 我同意您的观点、代码应检查命令的参数是否为空、并采取相应的措施。 我们将在未来的版本中改进此代码。

    感谢切斯特的贡献。

    此致、

    _________