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.

[参考译文] TDA4VM-Q1:AUTOSAR OS:在 MCAN0的 CAN 消息 RAM 初始化期间发生数据中止故障

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1163852/tda4vm-q1-autosar-os-data-abort-failure-during-initialization-of-can-message-ram-of-mcan0

器件型号:TDA4VM-Q1
Thread 中讨论的其他器件:CCStudio

您好、支持人员、

我们在 MCU3_0上使用矢量 AUTOSAR 实现、并在初始化 MCAN0的 CAN 消息 RAM 时获取数据中止复位。

根据我们的实际分析、这与操作系统内存保护配置(因此我们无法与向量接触)无关、而是 MMU 专用的错误反应。

实际上、我们没有在 MCU3_0的启动代码中调用 CSL_armR5MPUCfg 或_MPU_init  

我 有一些问题:

默认情况下、MCU3_0是否禁止访问 CAN 消息 RAM (0x02701000)?

2.如果是,我们如何提供访问权限? 这是通过自适应 gCslR5MpuCfg 实现的吗?

3.访问 RAM 存储在哪个寄存器中?

环境:

开发板: J721-EVM
调试器:XDS110
调试 IDE:CCStudio
内核:MCU3_0
SDK:PSDK8.02

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

    您好!

    我找到了您引用的寄存器:

    这些是 MCAN0配置寄存器、而不是 MCAN0消息 RAM。 MCAN0消息 RAM 实际上从0x02708000开始。

    我相信您无需修改 MPU 即可从 MCU3_0访问这些寄存器。 您应该能够在 CCS 的存储器浏览器中读取配置寄存器。 请在单步执行代码时尝试执行此操作、也许可以搜索 CFG 寄存器的基址(0x02701000)。 如果模块可访问且已通电/计时、您应该会看到一些值。

    此致、

    埃里克

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

    您好 Eric、

    当然、您是对的、CAN 消息 RAM 的起始地址为 0x02708000。  

    导致问题的函数希望使用0x00000000初始化段、因此很难查看某个值是否已更改、因为存储器已获得该值。  

    当我尝试在 CCS 的存储器浏览器中更改存储器时、我收到错误消息:

    MAIN_Cortex_R5_1_0:写入长度为0x4的第0页0x2708000处的存储器块时出现问题:(错误-1065 @ 0x2708004)无法访问器件存储器。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包9.7.0.00213)  

    这是否暗示了潜在问题?

    信息:

    如果我检查  MCAN0配置寄存器的存储器、这些也是0x000000完成的。

    此致

    Bastian

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

    Bastian、

    感谢您查看此内容。 是的、当您尝试读取这些寄存器时、这些寄存器看起来是不可访问的。 我已经在电路板上进行了检查、启动电路板后、我能够读取0x02701000处的寄存器:

    然后、我尝试写入 RAM:

    连接到 mcu3_0时、即可完成此操作:

    是否可以检查是否至少可以在0x02701000处看到寄存器? 这可以让我们知道是否至少有一些值并且 CAN 已通电/计时。

    然后、您能否告诉我您如何启动电路板? 我假设是 SBL、那么、如果您能告诉我您的应用程序映像由什么组成? 或您可以提供的有关引导流程的任何详细信息。

    如果您想尝试使用我的工作测试用例读取 CAN 寄存器、我已经开发了以下 SD 卡引导二进制文件、您可以在引导至 mcu3_0后尝试连接这些二进制文件、并在0x02701000处读取寄存器。 如果您确实运行了此测试、则可以看到 MCU_UART 输出了一些输出(通常在该输出中会获取 SBL 日志)。

    e2e.ti.com/.../5076.app

    e2e.ti.com/.../4062.tiboot3.bin

    e2e.ti.com/.../tifs.bin

    谢谢、

    埃里克

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

    您好 、Erick、  

    我将尽快尝试您的图片(我目前正在出差)。  

    我对存储器访问有疑问。 我能否在  二进制文件初始化期间通过调用 CSL_armR5MPUCfg 来提供访问?

    BR

    Bastian

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

    Bastian、

    MCU3_0不需要任何 MPU 配置即可访问该区域、因此无需修改 CSL_armR5MPUCfg。 这实际上看起来更像是模块未通电。

    为了排除 MPU 的使用、我们可以尝试从另一个内核连接到外设。 最简单的方法是使用"CS_DAP"器件。 如果您右键单击包含内核的区域并选择"Show All Cores"、则可以看到"Non Debuggable Devices"、在该目录下是 CS_DAP、您可以连接到该目录。 无论 MPU 设置如何、都应该能够访问 CAN 寄存器。 请查看您是否可以从此处切换0x02708000区域中的位。

    请告诉我这是否有意义。

    同时、您能告诉我您如何启动系统吗? 您使用的是哪种引导加载程序以及介质(SD、闪存、UART、GEL 等)

    谢谢、

    埃里克

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

    您好 、Erick、

    [引用 userid="420331" URL"~/support/processors-group/processors/f/processors-forum/1163852/tda4vm-q1-autosar-os-data-abort-failure-during-initialization-of-can-message-ram-of-mcan0/4382786 #4382786"]MCU3_0不需要任何 MPU 配置即可访问该区域、因此无需修改 CSL_armR5MPUCfg。 这实际上看起来更像是模块未通电。[/quot]

    但我不确定是否会调用该函数。  

    [引用 userid="420331" URL"~/support/processors-group/processors/f/processors-forum/1163852/tda4vm-q1-autosar-os-data-abort-failure-during-initialization-of-can-message-ram-of-mcan0/4382786 #4382786"]要排除 MPU、我们可以尝试从另一个内核连接到外设。 最简单的方法是使用"CS_DAP"器件。 如果您右键单击包含内核的区域并选择"Show All Cores"、则可以看到"Non Debuggable Devices"、在该目录下是 CS_DAP、您可以连接到该目录。 无论 MPU 设置如何、都应该能够访问 CAN 寄存器。 请查看是否可以从此处切换0x027008000区域中的位。

    我无法通过 CS_DAP 访问该区域:

    [引用 userid="420331" URL"~/support/processors-group/processors/f/processors-forum/1163852/tda4vm-q1-autosar-os-data-abort-failure-during-initialization-of-can-message-ram-of-mcan0/4382786 #4382786"]Meanwhile、您能告诉我如何启动系统吗? 您使用的是哪种引导加载程序以及介质(SD、闪存、UART、GEL 等)[/quot]

    我们通过 SD 卡启动。

    BR

    Bastian

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

    您好、Bastian、

    您还可以在 CS_DAP 存储器浏览器视图中将"APB_View"更改为"System_View"吗?

    使用 SD 卡引导时、您使用的是什么引导加载程序? SBL? 是否可以共享您正在引导的文件?

    在引导时查看引导日志将会很有帮助、以确保所有内容都已正确初始化。 您使用的是自己的引导二进制文件、还是使用 SDK 提供的默认二进制文件?

    此致、

    埃里克

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

    您好、Erick、

    我们将继续调查、我们的问题似乎是我们在应用程序的主函数上设置入口点、而不是设置复位矢量。 因此、当我们通过 CCS 调试器进行闪存和启动程序时、从未调用过 c_int00。  

    现在、我们面临的问题是入口点看起来是正确的(我们将 resetvecs.asm 包含在构建中、并将入口点设置为_resetvectors)、但在使用调试器加载二进制文件后会在代码上加载一些内容。 这是与正在运行的 FreeRTOS 应用程序的比较。

    以地址0x00000000开头的启动代码与加载的地址类似、但当我加载 AUTOSAR 程序时、调试器显示如下:

      

    您是否知道原因是什么?

    此致

    Bastian

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

    Bastian、

    我不清楚您是如何初始化电路板的。 您能告诉我如何从上电启动电路板吗? 是否涉及 SD 卡、如果涉及、您使用的是什么二进制文件? 这将为我们提供系统内存中已经存在的内容的提示。

    要回答您的问题、如果您正被调试器中加载的应用程序重载、则需要检查该区域中的内容、一个好的开始位置是编译代码时生成的.map 文件。 如果您不希望使用该存储器段、则可能会将其他一些依赖项拉入代码并加载到代码顶部。

    如果您可以共享.map 文件并让我知道您看到过载问题的地址、我们可以看到该文件是否是问题的罪魁祸首。

    您的计划由哪些部分组成? 是否使用 TI SDK 库?

    此致、

    埃里克