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.

[FAQ] [参考译文] 【常见问题解答】AM6442:为 MCU+ SDK 示例的 R5 内核上大于 128MIB 的串行闪存大小配置外部存储器区域

Guru**** 2984740 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1661307/faq-am6442-configuring-external-memory-regions-for-serial-flash-size-greater-than-128-mib-on-r5-core-for-mcu-sdk-examples

器件型号: AM6442
主题: SysConfig 中讨论的其他器件

SoC 中串行闪存的默认存储器映射区域从 0x60000000 到 0x67FFFFFF 开始、总地址空间为 128MIB。  

对于 存储空间大于 128MIB 的串行闪存器件、SoC 中的这个默认存储器映射区域不足以对闪存的整个地址空间进行寻址。 因此、必须使用外部存储器映射区域来支持存储器空间大于 128MIB 的串行闪存器件。

对于在 R5 内核上运行 MCU+ SDK 示例的其他 Sitara 器件、可以执行以下步骤。

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

    闪存器件可用的存储器映射区域包括:

    默认情况下使用从 0x60000000 到 0x67FFFFFF 的存储器映射区域。 下面详细介绍的步骤可用于为地址空间大于 128MIB 的串行闪存器件配置外部存储器映射区域。

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

    要使用从 0x400000000 和 0x500000000 开始的上述外部存储器映射区域、我们首先在 DDR 空间中定义一个存储器区域。 这是因为 DDR 地址空间的大小为 2GB、所有这些大小都不会一次使用。

    在源驱动程序中、需要将串行闪存 (0x60000000) 的存储器映射区域的默认数据基址更改为新的数据基址 (0x90000000)。

    这个新定义的存储器的数据基地址将用作 CPU 执行的虚拟地址。

    接下来、我们添加 RAT(区域地址转换)、以将上述虚拟地址转换为 SoC 的系统存储器地址。 在本例中、这是 0x400000000。

    下面详细介绍了执行此配置所需的步骤:

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

    第 1 步:

    在所使用示例的 SysConfig 文件中、在 MPU ARMv7 选项卡中添加一个新的存储器区域:

    注意:为了使闪存写入按预期工作、必须对该区域的上述配置进行严格排序、并具有上述读取、写入权限。 请参阅此 常见问题解答、 了解更多详细信息。

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

    第 2 步:

    应用执行以下步骤的以下补丁:

    e2e.ti.com/.../6761.changes_5F00_to_5F00_be_5F00_made.patch

    a)。 在 source/drivers/hw_include/am64x_am243x/ccslr_soc_baseaddress.h 文件中、添加了以下行、以添加一个从 0x90000000 开始且地址空间为 128 MIB 的新存储器区域:

    #define CSL_FSS0_DAT_REG2_BASE                                                                     (0x90000000UL)
    #define CSL_FSS0_DAT_REG2_SIZE                                                                     (0x10000000UL)

    b)。 接下来、在 source/drivers/am64x_am243x/motor.c soc 文件中 soc、替换以下函数:

    uint32_t SOC_getFlashDataBaseAddr(void)
    {
        return CSL_FSS0_DAT_REG1_BASE;
    }

    使用以下函数:

    uint32_t SOC_getFlashDataBaseAddr(void)
    {
        return CSL_FSS0_DAT_REG2_BASE;
    }

    c)。 在 source/drivers/drivers/am64x_am243x/am24x.h 中 soc、以下宏被替换 soc:

    /** \brief Macro to check if the OSPI base address is valid */
    #define IS_OSPI_DATA_BASE_ADDR_VALID(baseAddr)    (baseAddr == CSL_FSS0_DAT_REG1_BASE)

    使用以下宏:

    /** \brief Macro to check if the OSPI base address is valid */
    #define IS_OSPI_DATA_BASE_ADDR_VALID(baseAddr)    (baseAddr == CSL_FSS0_DAT_REG2_BASE)

    d)。 在 source/sysconfig/drivers/.meta/ospi/ospi/ospi_am64x.syscfg.js 中 soc、数据基址从以下位置替换:

    const ospi_config_r5fss = [
        {
            name            : "OSPI0",
            baseAddr        : "CSL_FSS0_OSPI0_CTRL_BASE",
            dataBaseAddr    : "CSL_FSS0_DAT_REG1_BASE",
            inputClkFreq    : ospi_input_clk_freq,
            dacEnable       : false,
            baudRateDiv     : 4,
            intrNum         : 171,
            clockIds        : [ "TISCI_DEV_FSS0", "TISCI_DEV_FSS0_FSAS_0", "TISCI_DEV_FSS0_OSPI_0" ],
            clockFrequencies: [
                {
                    moduleId: "TISCI_DEV_FSS0_OSPI_0",
                    clkId   : "TISCI_DEV_FSS0_OSPI_0_OSPI_RCLK_CLK",
                    clkRate : ospi_input_clk_freq,
                },
            ],
        },
    ];

    转到以下配置:

    const ospi_config_r5fss = [
        {
            name            : "OSPI0",
            baseAddr        : "CSL_FSS0_OSPI0_CTRL_BASE",
            dataBaseAddr    : "CSL_FSS0_DAT_REG2_BASE",
            inputClkFreq    : ospi_input_clk_freq,
            dacEnable       : false,
            baudRateDiv     : 4,
            intrNum         : 171,
            clockIds        : [ "TISCI_DEV_FSS0", "TISCI_DEV_FSS0_FSAS_0", "TISCI_DEV_FSS0_OSPI_0" ],
            clockFrequencies: [
                {
                    moduleId: "TISCI_DEV_FSS0_OSPI_0",
                    clkId   : "TISCI_DEV_FSS0_OSPI_0_OSPI_RCLK_CLK",
                    clkRate : ospi_input_clk_freq,
                },
            ],
        },
    ];

    注意:上述更改 仅适用于 ospi_am64x.syscfg.js 文件。 对于其他 Sitara 器件、请使用相应的 ospi_{device_name}.syscfg.js 文件。

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

    第 3 步:

    在 SysConfig 文件中的 RAT 选项卡下、添加一个 RAT 实例以将虚拟地址 (0x90000000) 转换为 SoC 中的系统地址 (0x400000000):