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:CCS 12.8 刷写和调试问题

Guru**** 2538950 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562652/tda4vm-ccs-12-8-issue-in-flashing-and-debugging

器件型号:TDA4VM


工具/软件:

您好:

我尝试使用 Jacinto v7.2.0.6 PSDK 将 AUTOSAR 构建应用程序刷写到 MCU2_1。

为 J721E 启动 launch.js 后、我收到以下错误:

MCU_Cortex_R5_0: Trouble Reading Memory Block at 0x18e59ff0 on Page 0 of Length 0x4: (Error -1205 @ 0x18E59FF0) Device memory bus has an error and may be hung. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 20.0.0.3178)
MCU_Cortex_R5_0: Trouble Reading Memory Block at 0x410163a4 on Page 0 of Length 0x4: (Error -1205 @ 0x410163A4) Device memory bus has an error and may be hung. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 20.0.0.3178)
MCU_Cortex_R5_0: Trouble Reading Memory Block at 0x41c1c214 on Page 0 of Length 0x4: (Error -1205 @ 0x41C1C214) Device memory bus has an error and may be hung. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 20.0.0.3178)

由于 R5_0 内核点击 main、因此我尝试将二进制文件编程到 MAIN_Cortex_R5_0_1、然后收到额外的错误:

MAIN_Cortex_R5_0_1: Trouble Reading Memory Block at 0x9719e00c on Page 0 of Length 0x4: (Error -1205 @ 0x9719E00C) Device memory bus has an error and may be hung. Verify that the memory address is in valid memory. If error persists, confirm configuration, power-cycle board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 20.0.0.3178) 
MAIN_Cortex_R5_0_1: File Loader: Verification failed: Target failed to read 0x9719E00C
MAIN_Cortex_R5_0_1: GEL: File: (...)\StartApplication\Appl\StartApplication.out: Load failed.

您能支持我调试这个问题吗? 将 BOOT CONFIG 引脚设置为“无引导“:

谢谢、谨致问候、

Tomislav

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

    尊敬的 Tomislav:

    您是否能够看到“调试快乐!!“ 是否从运行 launch.js 脚本登录?

    由于您使用 SDK 7.2、因此我建议使用旧版本的 CCS 进行测试。 根据文档、SDK 7.2 在 CCS 9.3 版上进行了测试和验证。 它尚未针对 CCS 12.8 进行测试或验证、因为这是适用于最新 SDK 的新版本。 您能否使用 CCS 9.3 版进行测试?

    谢谢、

    Neehar

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

    尊敬的 Tomislav:

    让我再深入研究一下、明天再联系您。

    谢谢、

    Neehar

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

    尊敬的 Tomislav:

    现在我可以到达 main(在调试器中,但当目标运行时,它最终会跳转到 0x4 地址、然后从此处跳转到 0x0。 您知道问题可能是什么吗?

    您是否逐步执行代码以查看何时跳转到地址 0x4?

    您能否交叉检查是否为 MCU_R5_0 内核正确放置了所有依赖项?

    让我帮您检查一下。

    谢谢、

    Neehar

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

    你好 Neehar、

    我有一个重要的更新、我禁用了编译优化-O3 标志到-O0、并对操作系统进行了一些更小的更改、现在 AUTOSAR 堆栈可以到达任务、但只能到达一次。 我遇到连接到 MCU_TIMER0 的 OS SystemTimer 问题。 似乎它正在运行并在 IRQ 状态寄存器中设置匹配标志、并且该标志处于挂起状态、并且位于中断路由器中的正确位置、因此 OS 应该能够看到它、但问题是 IRQ 未触发 ISR 例程。 请您告知今天要检查和调试的问题、因为我们现在的 Criet 交付被阻止、需要尽快进行调试。 XDS110 USB 探针是否也可能阻止其处理中断?

    您能否以最高优先级处理这个问题、或许今天的实时调试会议能由您与我一起完成?

    感谢您、希望能尽快收到您的反馈。

    Tomislav

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

    尊敬的 Tomislav:

    我正在与我们的 Autosar 专家联系、他们将能够更好地解决您的问题。

    谢谢、

    Neehar

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

    您好、Tomislav、

    我想在这里告诉大家有多个要点。

    我安装了 CCS9.3、但没有进行更改。 但进行更改的是 在 launch.js 文件中将 loadSciserverFlag 设置为 0。 我认为问题在于 SciServer 已加载到该位置、然后因为我希望 AUTOSAR 应用程序在其上运行、所以在覆盖期间失败。

    sciserver 将加载到 MCU1_0 内核中、但不会加载到任何其他内核中。 它应该始终运行。

    现在我可以到达 main(在调试器中,但当目标运行时,它最终会跳转到 0x4 地址、然后从此处跳转到 0x0。 您知道问题可能是什么吗?

    在屏幕截图中,只有 3 个内核显示 MCU1_0、MCU1_1 和 M3 内核。

    我正在尝试使用 Jacinto v7.2.0.6 PSDK 将 AUTOSAR 编译应用程序刷写到 MCU2_1。

    您提到了要在 AUTOSAR 中使用的 MCU2_1 内核、这意味着 MAIN_R5_0_1、而且您也提到 MCU1_0 引起了问题。May i  

    请知道运行 AUTOSAR 应用程序需要什么内核?

    到达任务、但仅有一次。 我遇到连接到 MCU_TIMER0 的 OS SystemTimer 问题。 看起来它正在运行并在 IRQ 状态寄存器中设置匹配标志、并且该标志处于挂起状态、并且位于中断路由器中的正确位置、因此操作系统应该能够看到它、但问题是 IRQ 未触发 ISR 例程。

    无论任何内核上的任何应用程序如何、Sciserver 都应始终保持运行。如果未运行、则所有 sciclient 调用都将失败、其中一个调用就是此中断路由器调用。

    与它一起、您的引导顺序和引导介质是什么?

    您能以最高优先级处理此问题吗?也许今天的实时调试会话可以与我一起完成吗?

    本周我完全忙于预先安排的会议、我们可以在下周左右举行。

    此致

    Tarun Mukesh

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

    你好、Puvvada 先生、

    很高兴再次与您交谈。

    感谢您的更新我将尝试澄清的事情,它可能来混乱,因为开始和尝试不同的选项.

    sciserver 将加载到 MCU1_0 内核中、但不会加载到任何其他内核中。 它应该始终运行。

    好的、但为什么我必须设置此标志才能不将其加载到 MCU1_0 上?

    在屏幕截图中、只有 3 个内核显示 MCU1_0、MCU1_1 和 M3 内核。可能我知道为什么?

    当然、关键是我已经在 CCS 中像这样设置了“Target Configuration“、只是没有 20 个内核、还设置了我不感兴趣的其他内容。 这 3 是我触发 lanuch.js 后的主要关注点、它应该是在我编程到 MCU1_0 之前它应该具备的功能。 如果我没有完整列表、这会是个问题吗?

    [引述 userid=“547969" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562652/tda4vm-ccs-12-8-issue-in-flashing-and-debugging/6028847

    您提到了要在 AUTOSAR 中使用的 MCU2_1 内核、这意味着 MAIN_R5_0_1、而且您也提到 MCU1_0 引起了问题。May i  

    请知道运行 AUTOSAR 应用程序需要什么内核?

    [/报价]

    问得好。 所以起初我想在 MCU2_1 主处理器上运行、但由于 Vector 为 MCU MCU1_0 内核创建了 StartApplication、因此我切换到它并使用它。 因此、应用程序应在 MCU1_0 上运行。

    Sciserver 应始终保持运行、无论任何内核上的任何应用程序如何。如果此操作未运行、则所有 sciclient 调用都将失败、其中一个调用是此中断路由器调用。

    如何验证我是否具备使其正常工作所需的一切、以及中断路由器是否能够使用它?

    本周我已经完全忙于预定的会议、我们可以在下周左右举行。

    无论如何、感谢您的努力、也许您至少可以支持我使用此 TT、因为下周对我们来说太迟了、因为该问题已在内部和客户双方上报。 许多利益相关者参与了这一过程。

    如果你有任何建议,检查只是试图缩小它的范围,我将不胜感激。

    谢谢&谨致问候、

    Tomislav

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

    您好:

    是的、我也可以通过该工单提供支持。

    问得好。 所以起初我想在 MCU2_1 主处理器上运行、但由于 Vector 为 MCU MCU1_0 内核创建了 StartApplication、因此我切换到它并使用它。 因此、应用程序应在 MCU1_0 上运行。

    感谢您的详细信息。如果内核是 MCU1_0、那么它是 DM 内核、因此如果是 vector AUTOSAR OS、您需要遵循以下 pdf 中有关 sci 服务器集成的说明

    https://www.ti.com/lit/an/spracy6/spracy6.pdf

    我知道你做过这件事了吗?

    我遇到连接到 MCU_TIMER0 的 OS SystemTimer 问题。 似乎它正在运行并在 IRQ 状态寄存器中设置匹配标志、并且该标志处于挂起状态、并且位于中断路由器中的正确位置、因此 OS 应该能够看到它、但问题是 IRQ 未触发 ISR 例程。 [/报价]

    关于计时器中断寄存、我们在/mcusw/mcal_drv/mcal/examples/Gpt api/j721e/mcu1_0/Gpt App_Startup .c 文件中有一个示例、其中包含以下 soc

    GptApp Startup_Interrupt 配置

    此致

    Tarun Mukesh

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

    谢谢 Tarun Mukesh、

    我知道您是否这样做了吗?

    不,我没有这样做,因为我不知道,谢谢你提供的链接。 在我看来、SciServer 不是在 Vector 代码中初始化的、所以我对它的工作原理很感兴趣。 现在、当我阅读提供的文档时、我看到希望有 SciServer 任务和触发来自 DaVinci Developer 的事件。 也不存在。 您是否认为他们以不同的方式完成了这项工作、这应该是有效的。 我正在使用 5 年前的 CCA 评估 SIP、很可能 TI 一直在关注它。 也许您内部有任何关于此合作的信息和与 Vector 合作的专家?

    [引述 userid=“547969" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562652/tda4vm-ccs-12-8-issue-in-flashing-and-debugging/6029423

    关于计时器中断寄存、我们在/mcusw/mcal_drv/mcal/examples/Gpt api/j721e/mcu1_0/Gpt App_Startup .c 文件中有一个示例、其中包含以下 soc

    GptApp Startup_Interrupt 配置
    [/报价]

    好的、适用于 GPT、但 MCU_TIMER0 用作操作系统计时器、不应通过 GPT 处理、或者?

    再次感谢、

    Tomislav

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

    您好:

    好吧、它适用于 GPT、但 MCU_TIMER0 用作操作系统计时器、不应通过 GPT 或?
    处理

    如果您不是通过 MCAL GPT 驱动程序使用 MCU_TIMER0、我是否知道您是如何启用中断和路由的?

    [引述 userid=“666069" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562652/tda4vm-ccs-12-8-issue-in-flashing-and-debugging/6029444

    不,我没有这样做,因为我不知道,谢谢你提供的链接。 在我看来、SciServer 不是在 Vector 代码中初始化的、所以我对它的工作原理很感兴趣。 现在、当我阅读提供的文档时、我看到希望有 SciServer 任务和触发来自 DaVinci Developer 的事件。 也不存在。 您是否认为他们以不同的方式完成了这项工作、这应该是有效的。 我正在使用 5 年前的 CCA 评估 SIP、很可能 TI 一直在关注它。 也许您内部有任何关于此合作的信息和与 Vector 合作的专家?

    [/报价]

    5 年前是相当长的时间,我可以检查是否有任何人有这方面的信息。 MCU1_0 内核肯定需要 Sciserver、因为它是 DM 内核。

    我分享的 PDF 中还指出“涵盖的内容适用于在 MCU R5F 上使用 SDK7.1 或更高版本来运行 AUTOSAR 的系统。“  

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您不是通过 MCAL GPT 驱动程序使用 MCU_TIMER0、请问您是如何启用和路由中断的?

    操作系统正在处理它。

    ]我分享的 PDF 还指出“其中涵盖的内容适用于使用 SDK7.1 或更高版本在 MCU R5F 上运行 AUTOSAR 的系统。“  [/报价]

    是的、我可以看到、是的、我使用的是 v7.2。

    我在调试中有更新:

    场景 1:我每运行 2 次、就能按一次中断 38 (MCU_TIMER0) 的 ISR、因为 CPU 复位和重启似乎不会从上次运行(OS 启动处)中复位外设。 发生这种情况是因为__ mpu_init 在 main () 之前启用中断、我已通过在 BrsStartupInstSetInit 之前向 VIM_IRQvec 写入内容来额外清除 VIM_IRQvec、但由于某种原因它未清除它、即使在该时间点、我的汇编代码已停止了 TIMER0 以下提供的代码、其 IRQ 待处理标志已被清除且相应的 R5j_FSS_VIM_IRQSTS 已被清除。 但是、当这 2 个前提条件步骤位于该值中时、从存储器浏览器中清除将起作用、然后只需将 VIM_IRQVEC 写入该值、即可从 VIM_ACTIRQ 寄存器中删除有效标志。 似乎装配体无法执行同样的操作。

    我是否可以问、为什么__ mpu_init 中有全局中断使能调用?

    场景 2:我正在进入 ISRTask 并保持 MCU_TIMER0 运行、具有 IRQ 挂起标志、VIM 也可以看到它、VIM_ACTIRQ 有效、但它不会触发中断、因为某种原因不会触发 Os_Idle。 如果我在中有一些断点(即 EcuM_StartupTwo 等)、但在没有断点的运行中没有发生、则会发生这种情况、我只是在地址 0x0 上结束。

    您能说明为什么会发生这种情况以及需要考虑的可能性吗?

    谢谢、谨致问候、

    Tomislav

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

    _asm volatile(“ MOVW R0、#0x042C“)
    _asm volatile(“ MOVT R0、#0x40F8“)
    _asm volatile(“ MOV R1、#0x40“)     //清除 R5FSS_VIM_IRQSTS_j
    _asm volatile(“ STR R1、[R0]“)

    _asm volatile(“ MOVW R0、#0x0038“)
    _asm volatile(“ MOVT R0、#0x4040“)
    _asm volatile(“ MOV R1、#0x0“)     //停止 timer0
    _asm volatile(“ STR R1、[R0]“)

    _asm volatile(“ MOVW R0、#0x0030“)
    _asm volatile(“ MOVT R0、#0x4040“)
    _asm volatile(“ MOV R1、#0x3“)     //清除 TIMER0 IRQ
    _asm volatile(“ STR R1、[R0]“)

    _asm volatile(“ MOVW R0、#0x0018“)
    __asm volatile(“ MOVT R0、#0x40F8“)  //通过向 R5FSS_VIM_IRQvec 写入内容来清除 R5FSS_VIM_ACTIRQ
    _asm volatile(“ MOV R1、#0x1“)
    _asm volatile(“ STR R1、[R0]“)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    TI 在 PDK 中为_mpu_init 提供的定义如下

    __attribute__((section(".startupCode")))  __attribute__((weak)) void __mpu_init(void)
    {
        uint32_t loopCnt = 0U, regAddr;
        CSL_ArmR5CPUInfo info;
        uint32_t    maxIntrs;
        CSL_vimRegs     *pRegs;
        CSL_armR5StartupGetCpuID(&info);
    #if defined(CSL_MAIN_DOMAIN_VIM_BASE_ADDR0) && defined(CSL_MAIN_DOMAIN_VIM_BASE_ADDR1)
        if (info.grpId == CSL_ARM_R5_CLUSTER_GROUP_ID_0)
        {
            /* MCU SS Pulsar R5 SS */
            regAddr = (info.cpuID == CSL_ARM_R5_CPU_ID_0)?
                                     CSL_MCU_DOMAIN_VIM_BASE_ADDR0:
                                     CSL_MCU_DOMAIN_VIM_BASE_ADDR1;
    
        }
        else
        {
            /* MAIN SS Pulsar R5 SS */
            regAddr = (info.cpuID == CSL_ARM_R5_CPU_ID_0)?
                                     CSL_MAIN_DOMAIN_VIM_BASE_ADDR0:
                                     CSL_MAIN_DOMAIN_VIM_BASE_ADDR1;
    
        }
    #else
        /* MCU SS Pulsar R5 SS */
        regAddr = (info.cpuID == CSL_ARM_R5_CPU_ID_0)?
                                 CSL_MCU_DOMAIN_VIM_BASE_ADDR0:
                                 CSL_MCU_DOMAIN_VIM_BASE_ADDR1;
    #endif
        pRegs       = (CSL_vimRegs *)(uintptr_t) regAddr;
        maxIntrs    = pRegs->INFO;
    
    #if defined (SOC_AM65XX) || defined (SOC_J721E)
        /* Limit the outstanding transactions to 2
         * only for AM65xx and J721e platforms
         * Later SoCs do not have this issue
         */
        CSL_armR5SetDLFOBit();
    #else
        /* Fix for PRSDK-8161
         * For AM64x and J7200, there is no issue of limitting outstanding
         * transactions. R5F core can support full 7 outstanding transactions
         */
    #endif
        _enable_mpu();              /* Enable MPU */
        _enable_cache();            /* Enable all caches */
        CSL_armR5StartupFpuEnable( 1 );    /* Enable FPU */
        CSL_armR5StartupIntrEnableVic(1);  /* Enable VIC */
        
        /* Disable/Clear pending Interrupts in VIM before enabling CPU Interrupts */
        /* This is done to prevent serving any bogus interrupt */
        for (loopCnt = 0U ; loopCnt < maxIntrs; loopCnt++)
        {
            /* Disable interrupt in vim */
            CSL_startupVimSetIntrEnable((CSL_vimRegs *)(uintptr_t)regAddr,
                                        loopCnt,
                                        false);
            /* Clear interrupt status */
            CSL_startupVimClrIntrPending((CSL_vimRegs *)(uintptr_t)regAddr,
                                         loopCnt);
        }
        CSL_armR5StartupIntrEnableFiq(1);  /* Enable FIQ */
        CSL_armR5StartupIntrEnableIrq(1);  /* Enable IRQ */
    }

    内核启动期间将调用上述命令。 我不确定矢量是否在 BRS 启动中使用相同的。

    在上述 API 中,我们将清除并禁用 VIM 中的所有挂起中断。 然后启用 FIQ 和 IRQ。

    /*在启用 CPU 中断之前禁用/清除 VIM 中的挂起中断*/
    /*这样做是为了防止提供任何伪造的中断*/

     之后是矢量的 OS_INIT、如果在 AUTOSAR 中启用了 MPU 保护、则会再次重新执行 MPU 配置。

    因为 OS 可以在 应用程序 main 达到之前使用中断、所以需要在启动阶段在 MPU init 中启用中断。

    此致

    Tarun Mukesh

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

    再次大家好:

    是的、我相信他们使用的是相同的、我已经看到这部分代码、尽管它是由 ti.csl.init.aer5f 映像获取的、因此无法浏览我相信您在这里所做的是正确的、但在 CCS 中没有考虑到一个事项、当我们重新启动或 CPU 复位外设未被清除时、基本上计时器 IRQ 仍在运行、即使 ACTVIM 已清除、它也很可能在到达 main 之前再次触发 IRQ。

    但无论如何..当前的情况如下:

    我修复了 ISR 触发问题、现在执行是稳定的、并且总是会导致相同的场景。 计时器 ISR 正在被触发、但只有 2 次。

    在这一行的第二个„BX R1“上、R1 具有正确的 SWI.PfrtIsr 地址、因此跳转到地址 0x8、即 Os_Timer。

    如果我这样做,它可以做跳,但再次失败,在里面的某个地方。 地址似乎已正确标记、CPU 处于 ARM 模式、没有经验。

    您是否知道操作系统处理是否应该提出 SWI 并卡在其中? 它应该以某种方式进行维护,还是只是一些缺陷? 不确定为什么 ISR Interrupt_38 (MCU_TIMER0) 上没有发生、但第二个在 ISR 上没有发生...

    你能帮我缩小范围吗?

    此致、

    Tomislav

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

    您好:

    通过它、我相信您在此处所做的操作是正确的、但在 CCS 中没有考虑一件事、当我们重新启动或 CPU 重置外设未被清除时、基本上计时器仍在运行、即使 ACTIRQ 已清除、它也很可能在到达 main 之前再次触发 VIM IRQ。

    内核或 CPU 的复位不会关闭外设及其系统复位、从而关闭外设。

    因此、是的、计时器将继续在后台运行并继续发出中断。

    您是否知道操作系统处理是否应该提出 SWI 并陷入困境? 它应该以某种方式进行维护,还是只是一些缺陷? 不确定为什么 ISR Interrupt_38 (MCU_TIMER0) 上没有发生、但在第二个上没有……

    您对操作系统处理提出的更多观点、最好向引导者提出此问题、而不是向 TI 提出。 TI 不知道内部 MICROSAR 调用。从 MCU_TIMER 的角度来看、它会根据配置的时间、中断注册和 ISR 处理不断提高中断。

    此致

    Tarun Mukesh