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.
您好!
我想知道如何从 M4F 内核访问 DDR RAM。 我知道 M4F 是隔离式的、应该使用自己的存储器、但我仍然想知道这是如何工作的。
我不知道如何理解带有 RAT 区域的存储器映射。 例如、表2-5中 M4F 内核的存储器映射(实际 TRM 中的第45页)列出了一个名为"MCU0_M4FSS0_RAT_REGION0"的存储器、该存储器指向地址0x60000000、大小为2GB。 我假设这是 DDR 存储器、它应该指向系统存储器映射中的0x080000000。 是这样吗? 我无法从 TRM 中读取此信息。
我想知道0x60000000 (M4F 视图)是 OSPI 还是 DDR 存储器?
下一个示例:
R5FSS0/1子系统具有一个名为"R5FSS0/1_RAT_Region3"的内存映 射、该映射指向0x80000000、大小为2BG。 (表2-3第39页)
什么是"R5FSS0/1_RAT_Region3"? 背后的物理模块或存储器是什么?
TRM 中没有任何解释!!
尊敬的 Andreas:
有关 RAT 硬件模块的详细信息、请参阅 TRM 第8.2节"基于区域的地址转换(RAT)模块"。
有关表2-3至2-5中描述的 RAT 区域的信息、请参阅 TRM 第2.4节"基于区域的地址转换":
DDR 位于32位地址范围0x080000000 - 0x0FFFFFFFF 内、因此无需为 M4F 访问 DDR 配置 RAT。 如果定义并启用了重新映射32位 DDR 地址范围的 RAT 区域、则可以屏蔽 DDR。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module ]]我想知道0x60000000 (M4F 视图)是 OSPI 还是 DDR 存储器?如果没有 RAT 区域来重新映射0x60000000、则 M4F 应在主存储器映射(FSS0_DAT_REG1)中列出视图。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module ]"R5FSS0/1_RAT_Region3"是什么? 背后的物理模块或存储器是什么? [/报价]这是一个存储器区域、可用于将 R5F 本地32位地址重新映射到36位地址。 如果不需要重映射、则主存储器映射中列出的地址适用。 如果 RAT 被启用、那么针对该区域的本地32位地址被映射、如部分8.2所述。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module "] TRM 中没有说明!事实上、TRM 中几乎没有什么解释、而是什么令人困惑。
MCU+ SDK 中有一些 M4F RAT 配置示例、您可以查看这些示例。 RAT 区域在 SysConfig 中配置。
请告诉我这种解释是否足够!
此致、
弗兰克
您好、Frank、
感谢您的详细描述。 现在更清楚了。
但是、例如、如果 M4F 上的0x60000000与 A53上的"模块"(OSPI 闪存/XIP)相同、为什么该地址用作 M4F 的 RAT 区域? 是否可以覆盖它?
R5FSS0/1_RAT_Region3也是如此、它是0x80000000、但也是用于 R5F 和 M4F 内核的 DDR 子系统。
我的同事还检查了如何从 M4F 访问主域的 UART0。 他修改了静态变量"gUartConfig"、该变量保存所有 UART 的信息以访问 UART0。 然后、他能够使用 UART0进行访问和注销。 在调试器中,我们可以看到 UART_Init()中的驱动程序将地址从0x02800000转换为0x82800000。 但是、如果我们应该能够从 M4F 访问0x02800000、因为它是32位地址、那么为什么需要这样做?
此致
Andreas
您好、Frank、
我和我的同事从 SDK"empty/nortos"获取了 M4示例。 在 SysConfig 文件中、有一个 RAT 配置集。 我们仍然没有得到 RAT 的点。 因为此时它不符合您在帖子中的解释。
例如、配置了 RAT 区域(Region3)、该区域从本地地址0x6000.0000到系统地址0x6000.0000。 我在这里不明白这一点。 为什么需要这样做? 不会让人很满意!
另一个区域从本地地址0x8000.0000映射到系统地址0x0。 此处相同... 为什么?
例如、Region2从0xC000.0000映射到0x4000.0000。 我删除了该选项、M4F 固件无法再运行。 在 sysfw 初始化时出错。
此致
Andreas
尊敬的 Andreas:
我认为我的基本描述是正确的。 但是、我被告知 M4F 需要有 RAT 映射才能访问某些硬件资源。 SysConfig 文件中存在 MCU+SDK M4F 示例所需的映射。
我将进一步对此进行调查、稍后将向您提供更多详细信息。
此致、
弗兰克
尊敬的 Andreas:
我对此进行了进一步调查。
我在此处找到有关 M4F 存储器映射和 RAT 的更多信息:
我在 AM64x GP EVM 上对 M4F 进行了试验、并确定当 M4F RAT 被禁用时:
CONFIG_ADDR_translation_REGION0 - 3提供对大多数硬件映射的主域存储器映射的前2 GB 的访问。 例如、CONFIG_ADDR_translation_REGION0提供对0x000000000 - 0x1FFFFFFF 主域的访问。 启用此区域时:
访问其他外部硬件(包括 DDR)需要添加新的 RAT 区域、并减小现有区域的大小。 例如、将 CONFIG_ADDR_translation_REGION1的大小减小到256 MB、通过以下命令为 DDR 添加新区域:
我也看不到 CONFIG_ADDR_translation_Region3将0x60000000转换为系统地址0x60000000的原因。 我使用 CCS/JTAG 禁用了 CONFIG_ADDR_translation_Region3、并且仍然能够访问 MSRAM_256K0_RAM。
请告诉我这种解释是否足够。
此致、
弗兰克
>我在 AM64x GP EVM 上对 M4F 进行了试验,并确定当 M4F RAT 被禁用时:
>> M4F 可以访问 MCU_M4FSS0_RAT_REGION0地址范围内的主域硬件,例如 M4F 可以在禁用 RAT 的情况下访问 MSRAM 和 DDR。
>> M4F 无法访问 MCU_M4FSS0_RAT_REGION0之外的主域存储器映射中的硬件,例如无法访问 PADCFG_CTRL0_CFG0和 GPIO0。
我检查了这个。 当刚刚连接到 M4时,我能够读取/写入0x60080000 (闪存)、0x70000000 (SRAM)和0x80000000 (DDR)。
>CONFIG_ADDR_translation_REGION0 - 3提供对映射了大多数硬件的前2 GB 主域存储器映射的访问。 例如、CONFIG_ADDR_translation_REGION0提供对0x000000000 - 0x1FFFFFFF 主域的访问。 启用此区域时:
>>PADCFG_CTRL0_CFG0可通过0x8000F0000进行访问
>>GPIO0可在0x080600000处访问。
examples/empty/am64x-evm/m4fs0-0_nortos 的 SysConfig 中的 RAT 配置如下:
addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; addr_translate1.localAddr = 0x80000000; addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; addr_translate2.systemAddr = 0x20000000; addr_translate2.localAddr = 0xA0000000; addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; addr_translate3.systemAddr = 0x40000000; addr_translate3.localAddr = 0xC0000000; addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; addr_translate4.systemAddr = 0x60000000; addr_translate4.localAddr = 0x60000000;
因此、未设置 translate1的"systemAddr"。 我假设它是0x000000000 (36位),它不会写入 SysConfig,这一点很奇怪。
因此我假设、访问 GPIO0不需要 RAT 条目、因为它的地址0x80600000是32位可访问、这可以由 M4F 内核完成? 那么、为什么需要有 RAT 条目。 但是、0x80600000是否不在 DDR 存储器中?
>要访问其它外部硬件(包括 DDR),需要添加新的 RAT 区域,并减小现有区域的大小。 例如、将 CONFIG_ADDR_translation_REGION1的大小减小到256 MB、通过以下命令为 DDR 添加新区域:
>>本地地址= 0xB0000000
>>转换后的地址= 0x80000000
>>大小= 256 MB。
>我也看不到 CONFIG_ADDR_TRANSLATE_Region3将0x60000000转换为系统地址0x60000000的原因。 我使用 CCS/JTAG 禁用了 CONFIG_ADDR_translation_Region3、并且仍然能够访问 MSRAM_256K0_RAM。
现在我不能尝试这种方法。 我们迁移到了新的 MCU+SDK、我无法再打开 exapmle.syscfg、因为 TI SysConfig 会检查标头、它们始终是错误的。 我不知道如何打开它。 已检查所有内容、并已将标题和开关更改为不同的 SysConfig 工具版本。
我尝试从0xE0000000转换到0x8000000000、但我想知道0xE0000000保留到 M4F 存储器吗?
概述如下:
无 RAT:访问0x8000000 (DDR)、0x70000000 (SRAM)和0x60000000 (闪存/配置为 SBL NULL)
使用 RAT:
访问0x60000000 (仍然是闪存)和0x70000000 (SRAM)。 还有其他存储器区域。 DDR 不可访问。
尊敬的 Andreas:
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module/3867450 #3867450"]SO,未设置 translate1的"systemAddr"。 我假设它是0x000000000 (36位),它不会写入 SysConfig,这一点很奇怪。同意、在 example.syscfg 中看不到 CONFIG_ADDR_translation_REGION0的系统地址是意外的。 但是、当我通过调用 System_init()来配置 RAT 寄存器后在 CCS 中检查 RAT 寄存器时、我看到 RAT 区域0已启用、且转换后的系统地址设置为0:
GPIO0位于地址0x000600000处的主存储器映射中。 因此、M4F 无法访问 GPIO0、除非有一个 RAT 区域用于将0x6000_0000 - 0xDFFF_FFFF 范围内的地址转换为包含 GPIO0的范围。 SysConfig CONFIG_ADDR_translation_REGION0将从本地地址0x8000000开始的512 MB 转换为系统地址0x00000000、因此0x80600000 (本地地址)转换为0x000600000 (系统地址)。 您可以通过启用/禁用 CCS/JTAG 上的 RAT 区域0并检查 GPIO0是否可以从 CCS 存储器窗口中的 M4F 中看到、自行对此进行实验。 RAT_CTRL_0位于地址0x44200020、该寄存器的 MS 位是 RAT 区域的启用/禁用位。
当 RAT 区0被启用时、地址范围0x00000000 - 0x1FFFFFFF 内主域存储器映射中的512 MB 可从 M4F 本地地址范围0x80000000 - 0x9FFFFFFF 进行访问。 但是、地址范围为0x80000000 - 0x9FFFFFFF 的主域存储器不再可访问、即 DDR 的前512 MB 被"屏蔽"。 类似地:
由于这是 M4F 专用外设总线的起始位置(见下文)、在有无 RAT 区域的情况下、从0xE0000000开始的 DDR 的其余部分是无法访问的。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module/3867450 #3867450"]我尝试从0xE0000000转换到0x8000000,但我想知道0xE0000000保留到 M4F 存储器?没错、0xE0000000是 M4F"专用外设总线"地址范围的起始地址、该地址范围是 M4F 子系统(SS)的本地地址。 要通过 RAT 访问 DDR、您需要牺牲一些现有的已转换存储器范围、并添加一个具有0x60000000至0xDFFFFFFF 范围内本地地址的 RAT 配置(例如、我之前与本地基址0xB0000000共享的内容)。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module/3867450 #3867450"]无 RAT:访问0x80000000 (DDR)、0x70000000 (SRAM)和0x60000000 (闪存/配置为 SBL NULL [/引用]正确、但不能访问地址0x60000000之前的主存储器映射中的任何内容。
[引用 userid="445251" URL"~/support/processors-group/processors/f/processors-forum/1042415/am6442-m4f-and-rat-module/3867450 #3867450"]使用 RAT:
访问0x60000000 (仍然是闪存)和0x70000000 (SRAM)。 还有其他存储器区域。 DDR 不可访问。
[/报价]正确、通过 DDR 在基地址0x8000000处的所有内容都可以通过 RAT 区域访问、但 DDR 不再可访问。
请参阅:
请告诉我这是否有帮助!
此致、
弗兰克
您好、Frank、
谢谢。 我认为现在对我来说,情况更清楚了。
此致、
Andreas
尊敬的 Andreas:
非常感谢您的反馈、我现在将关闭此主题。
此致、
弗兰克