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.

[参考译文] AM62A3:DM 内核对 MCU_MCAN 寄存器空间的访问、有关 RAT 的阐述

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1397707/am62a3-dm-core-access-to-mcu_mcan-register-space-clarification-on-rat

器件型号:AM62A3

工具与软件:

大家好!

我们的一个客户一直在向 DM 内核固件中添加该功能、同时保留固件构建器包含在此固件中的现有功能。

TRM 显示 MCU_MCAN 寄存器可"通过 RAT"访问 DM 内核、我们需要澄清需要如何设置 RAT 才能访问0x04E00000和0x04E10000处的 MCU_MCAN 寄存器。

针对0x04E00000大小128KB 的当前 syscfg RAT 设置

代码汇总

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Global struct defined
#define CONFIG_ADDR_TRANSLATE_RAT_BASE_ADDR (0x02FFE0000u)
#define CONFIG_ADDR_TRANSLATE_REGIONS (1u)
AddrTranslateP_RegionConfig gAddrTranslateRegionConfig[CONFIG_ADDR_TRANSLATE_REGIONS] =
{
{
.localAddr = 0x4E00000u,
.systemAddr = 0x4E00000u,
.size = AddrTranslateP_RegionSize_128K,
},
};
//Executed Code
AddrTranslateP_Params addrTranslateParams;
AddrTranslateP_Params_init(&addrTranslateParams);
addrTranslateParams.numRegions = CONFIG_ADDR_TRANSLATE_REGIONS;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

但是、代码似乎无法正确访问 MCU_MCAN 寄存器、并且 MCAN_isMemInitDone () API 由于无法访问 STAT 寄存器而挂起

是否还需要其他东西来将 MCU_MCAN 寄存器空间映射到 DM 内核中?

谢谢!

——Gunter

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

    作为快速的跟进(感谢 Gunter 帮助我发布此帖子!)

    MCAN_isMemInitDone() API 似乎只是调用下面的函数、该函数只读取一个32位地址。  

    memInit = HW_RD_FIELD32 (MCAN_SsAddr (baseAddr)+ MCAN_MCANSS_STAT、MCAN_MCANSS_STAT_MEM_INIT_DONE);

    我添加了一个快速日志并验证了 MCAN_SsAddr (baseAddr)+ MCAN_MCANSS_STAT 的计算结果为0x4E09008、该值应涵盖在上述 VRAT 设置中、并且是 MCU_MCAN0_SS 部分的一部分。  

    HW_RD_FIELD32似乎会导致 DM 内核崩溃、因此我想知道是否有一些 MPU 配置未正确设置。 我注意到开箱即用的 syscfg、因为下面的 register_region 区域已经设置完毕。 是否应设置另一个 MPU 实例?

    以下是 REGISTER_REGION 的 MPU 设置:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .baseAddr = 0x0u,
    .size = MpuP_RegionSize_4G,
    .attrs = {
    .isEnable = 1,
    .isCacheable = 0,
    .isBufferable = 0,
    .isSharable = 0,
    .isExecuteNever = 1,
    .tex = 0,
    .accessPerm = MpuP_AP_ALL_RW,
    .subregionDisableMask = 0x0u
    },
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好!  

    感谢您的发帖。 我会仔细研究它,并很快回到你。

    此致、
    Aparna

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

    您好 Gunter 和 Yue、

    设置支持期望

    首先要设定期望:我们的团队目前还不能提供有关固件构建器代码的深入支持。 因此、我们将提供我们所能提供的援助、但我们所能提供的支持是有限的。

    什么是 RAT? 您何时需要对其进行配置?  

    请首先阅读 AM62Ax Academy 中 MCU 模块的 RAT 文档:
    https://dev.ti.com/tirex/explore/node?node=A__AXBsTEetU2hiTMZSzq4row__AM62A-ACADEMY__WeZ9SsL__LATEST

    我是这份文件的作者、所以请随时提出后续问题。

    我最初的想法-您不需要为这些访问配置 RAT 模块  

    有关何时需要配置 RAT 的详细信息、请参阅上述 RAT 文档。 我认为这些要点中的任何一个实际上都不适用于您的用例。

    在 TRM 章节存储器映射>器件管理器 R5F 存储器视图中:

    除了目标事务之外、所有 R5F 事务都可以通过 RAT 进行地址重映射功能
    地址范围0x2000_0000至0x2FFF_FFFF 以及它自己的 ATCM 和 BTCM 中的信息。 仅强烈建议使用
    将 R5F 的地址范围从0x8000_0000重新映射到0xFFFFF_FFFF 以访问位于的目标区域
    0x8000_0000和0xF_FFFFFFFF_FFFF 之间的通用存储器映射。

    因此、如果您要访问位于0x4E0_0000的存储器、则可以将该系统地址重新映射到不同的本地地址-但这是没有理由的。

    此致、

    Nick

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

    进一步阐明 TRM 的"通过 RAT"含义:

    从技术角度而言、 全部  DM R5F 对高于0x2FFF_FFFF 的数据范围的访问将通过 RAT。 但是、默认情况下、localAddress = systemAddress、因此即使电子在物理上通过 RAT、也不会进行地址转换。

    此致、

    Nick

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

    您好、Nick、您能帮我确认是否使用 VRAT 没有困难吗? 总之、它应该不会产生任何影响?


    我在结束时注意到、DM 内核调用来设置 CAN 总线的函数会导致 DM 内核崩溃、这种情况看起来很像。 基本:

    正在调用 DM 内核中的此函数(我添加了日志)、它似乎挂起于 HW_RD_FIELD32上、而这只是读取一个地址。 当日志执行并记录此"MCAN_DRIVER using 0x04e09008!"(MCAN_DRIVER using 0x04e09008!)时、传递(来自日志)的地址为值0x04e09008。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uint32_t MCAN_isMemInitDone(uint32_t baseAddr)
    {
    uint32_t memInit;
    uint32_t state;
    DebugP_log("MCAN_DRIVER using 0x%08x!\r\n", MCAN_SsAddr(baseAddr) + MCAN_MCANSS_STAT);
    memInit = HW_RD_FIELD32(MCAN_SsAddr(baseAddr) + MCAN_MCANSS_STAT,
    MCAN_MCANSS_STAT_MEM_INIT_DONE);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我在 MCAN 驱动程序中尝试了其他函数、这些函数只是写入0x04e09000空间中的其他地址(或类似的、cfg 寄存器将写入 CAN 的0x04exxxxx 寄存器)。

    想象一下读取或写入这些寄存器会导致 DM 内核挂起、您还想了解什么吗?  

    我可以进行以下测试:

    1.将更多的日志添加到 CAN 驱动程序本身中,看看会发生什么
    2.从 syscfg 中删除 VRAT 配置、查看是否有任何行为变化

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

    您好、Nick。

    从您的注释中、您是否指出 MCU_MCAN0/1范围内(即0x04E00000至0x04E1FFFF)的地址不需要任何 RAT 配置?

    我正在查看 TRM 中的表2-3、显示该范围的 RAT_REGION0。

    您认为这些地址范围 0x04E00000至0x04E1FFFF 会自动通过 RAT、无需进行配置吗?

    谢谢!

    ——Gunter

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

    Gunter、您好!

    正确。 我的理解是、RAT 基本上是二次逻辑(即、它并不会对通过它的信号增加任何延迟、因为没有 FLOPS 或其他需要多个时钟周期才能使信号通过的电路)、并且对于发布的表 Gunter 中"RAT 区域"内的存储器的任何访问都将通过 RAT 电路物理退出 DM R5F 子系统。

    您好、Yue、

    我和冈特聊了一会儿。 我的第一个问题是检查 MCAN 是否实际上正在计时。 如果没有进入外设的有效时钟信号、我预计对该寄存器空间的读取和写入会失败(尽管我不确定从远程内核端看是什么样子、但我习惯在 Linux 端使用 devmem2来查看读取失败)。

    我将该线程转交给了一位更熟悉 MCU+ SDK 编程的团队成员、旨在提供更多调试思路。

    此致、

    Nick

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

    嗨、Nick!

    看起来我们是在同一波长:)

    对于 DM 内核、syscfg 不允许我配置 CAN 总线。 但是对于"示例"代码、它们是为 MCU 内核构建和完成的、这确实允许您通过 syscfg 初始化 MCU CAN 总线。

    我所缺少的 Δ 值是您说的、电源时钟。 在示例代码中、syscfg 在 ti_power_clock_config.c 中自动生成该代码 然而,在我的 DM 核心不允许我,我错过了这一点。  

    现在、在使用 MCAN 驱动程序 API 之前、我已将此代码添加到我的应用中:

    SoC_moduleClockEnable (TISCI_DEV_MCU_MCAN0、1);
    SoC_moduleSetClockFrequency (TISCI_DEV_MCU_MCAN0、TISCI_DEV_MCU_MCAN0_MCANSS_CCLK_CLK、80000000);

    SoC_moduleClockEnable (TISCI_DEV_MCU_MCAN1、1);
    SoC_moduleSetClockFrequency (TISCI_DEV_MCU_MCAN1、TISCI_DEV_MCU_MCAN1_MCANSS_CCLK_CLK、80000000);

    现在它不再挂起! 我将继续进行测试、如果我遇到更多问题、请及时告知您

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

    大家好、我能够从 DM 内核在 MCU_CAN0和 MCU_CAN1上执行环回测试。 解决后关闭此窗口。 谢谢!

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

    您好、Yue、

    很高兴听到现在已对外设计时、所有设备都能够继续操作! 我已经将该主题标记为已解决、但如果您将来有问题、可以随时创建新主题。

    此致、

    Nick