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.

[参考译文] TMS570LS1224:启用 FIQ 会导致上电复位后的预取中止

Guru**** 2538955 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1117276/tms570ls1224-enabling-fiq-causes-prefetch-abort-after-a-power-on-reset

器件型号:TMS570LS1224

您好!


我所面临的情况是、启用 FIQ 仅在上电复位期间导致预取中止。

刷写软件后断开目标、然后执行上电复位、 系统未按预期运行、无法调试我连接到目标并发现系统 卡在 预取处理程序中的问题。

指令故障状态寄存器= 0x00000008
指令故障地址寄存器= 0x3E5BB2B0



SPSR_ABT 表示系统处于 FIQ 模式。 只有 ESM 中断为 FIQ、所有其它中断被配置为 IRQ

系统  在调试模式下按预期运行、但在上电复位后未运行、如果未启用 FIQ、我不会遇到此问题

为了 解决这个问题、我在 预取中止处理程序中执行了 S/W 复位、并且在软件复位后、系统按预期运行、但我真的不理解这背后的根本原因。 如果我能在解决这个问题方面提供一些帮助、那将会非常好。

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="506650" URL"~μ C/support/microsystems/arm-based microsystems-group/arm -based microsystems/f/arm based microsystems-forum/1117276/tms570ls1224-enabling-fiq-caus-prefetch abort-abort-after a power-on reset "]、发现系统 卡在 /报价处理程序中。[]

    预取中止的可能原因包括:

    • 读取指令时的 ECC 错误:IFAR 寄存器提供导致检测到错误的地址。 辅助 IFSR 指示 ECC 错误的来源。

    • 错误的返回地址或分支地址-返回地址已损坏-分支地址已损坏

    在 读取程序/数据之前、所有闪存存储器空间的 ECC 值必须被编程到闪存中。 这可以通过生成具有 链接器 CMD 文件的正确 ECC 值来完成。 Cortex R5F CPU 可以生成推测取指令、将其取指令到闪存存储器空间内的任何位置。  对具有无效 ECC 的位置进行推测取指令可能会导致中止。

    [~ userid="506650" URL"/support/microsystems/arm-based microsystems-group/arm-based microsystems/f/arm-based microsystems-forum/1117276/tms570ls1224-enabling-fiq-caus-prefetch-abort-abort-after a-power-one-reset ]如果  系统在调试模式下未按预期运行、但未在 FIQ 重置后出现此问题、则系统未按预期运行
    [/报价]

    ESM 状态寄存器2和 ESM 状态影子寄存器2的值是什么? 如果启用 FIQ、ESM 组2中的任何错误将触发 ESM 高电平中断(FIQ)?  

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

    如何使用链接器 CMD 文件生成 ECC:

    https://software-dl.ti.com/hercules/hercules_docs/latest/hercules/How_to_Guides/index.html

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

    您好、Wang、

    感谢您的回复。

    我按照您的建议(使用链接器文件生成 ECC)进行了操作、但遗憾的是、这没有解决我的问题、链接器生成的 ECC 和 CCS 生成的 ECC 的行为是相同的。

    辅助 IFSR 值为0x00

    我正在附加 CP15寄存器集的快照



    链接器文件

      /*所有基于 SafeRTOS 的设备都需要这些配置设置
       *应用程序。
       *如果整个编译使用 ARM 模式、则向量长度可以为0x20。
       *使用 Thumb 模式时、需要0x60来适应工作间的需要
       *代码。 *

      引导程序  (X)   :origin=0x00000000 length=0x00000060 vfill=0xFFFFFFFF
      KERR_FUNC (RX)  :origin=0x00000060 length=0x0000FFA0 vfill=0xFFFFFFFF
      Flash_API (RX)  :origin=0x00010000 length=0x00010000 vfill=0xFFFFFFFF
      FLASH0   (RX)  :origin=0x00020000 length=0x0011fc00 vfill=0xFFFFFFFF
      EPK     (Rx)  :origin=0x0013fc00 length=0x200 vfill=0xFFFFFFFF
      FLASH1   (RX)  :origin=0x0013fe00 length=0x100 vfill=0xFFFFFFFF
      CRC_TABLE (RX)  :origin=0x0013FF00 length=0x00000100 vfill=0xFFFFFFFF


      ECC_VEC      :origine=(0xF0400000 +(start (vectors)>> 3)) length=(size (vectors)>> 3)
                  ecc={算法=algoR4F021、input_range=vectors}
      ecc_Kern_flash  :origine=(0xF0400000 +(start (Kern_FUNC)>> 3)) length=(size (Kern_FUNC)>> 3)
                  ecc={算法=algoR4F021、input_range=Kern_FUNC}
      ECC_FLASH_API  :origine=(0xF0400000 +(start (flash_API)>> 3)) length=(size (flash_API)>> 3)
                  ecc={算法=algoR4F021、input_range=flash_API}
      ECC_FLAH0    :origine=(0xF0400000 +(start (FLASH0)>> 3)) length=(size (FLASH0)>> 3)
                  ecc={算法=algoR4F021、INPUT_RANGE=FLASH0}
      ECC_EPK      :origine=(0xF0400000 +(start (EPK)>> 3)) length=(size (EPK)>> 3)
                  ecc={算法=algoR4F021、input_range=EPK}
      ECC_FLAH1    :origine=(0xF0400000 +(start (FLASH1)>> 3)) length=(size (FLASH1)>> 3)
                  ecc={算法=algoR4F021、INPUT_RANGE=FLASH1}
      ecc_crc_table  :origine=(0xF0400000 +(start (crc_table)>> 3)) length=(size (crc_table)>> 3)
                  ecc={算法=algoR4F021、input_range=crc_table}

    ECC
      algoR4F021:address_mask = 0x003ff8 //地址位21:3 */
      汉明_MASK = R4     /*使用掩码中的 R4构建*/
      奇偶校验掩码 = 0x0c   //设置哪些 ECC 位是偶校验和奇校验*/
      镜像  = F021   /* RM4x 和 TMS570LSx 构建于 F021 */中



    QJ:ESM 状态寄存器2和 ESM 状态影子寄存器2的值是什么? 如果启用 FIQ、ESM 组2中的任何错误将触发 ESM 高电平中断(FIQ)?  - 当系统在调试模式下运行时、ESM 不会设置故障。

    如果此故障与闪存 ECC 有关,则预取处理程序上的软件复位不应掩盖此问题。

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

    要通过链接器 CMD 文件启用 ECC 生成、应启用链接器选项、

    并取消选中"Auto ECC Generation (自动 ECC 生成)"

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

    您好、Wang、

    感谢您的回复!

    是的、我启用了这些选项。  

    在 SRAM 上运行 ECC 测试之前,我最初调用了 checkRAMUERRTest()



    如果我在 __TI_auto_init()函数之后而不是在 CheckRAMECC 之前运行测试,则在 POR 上不会遇到预取问题




    运行 SRAM 地址解码测试是否有任何先决条件? 如果在 CheckRAMECC 之前运行测试,为什么会出现此问题?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="506650" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1117276/tms570ls1224-enabling-fiq-cause-prefete-abort-abort-about-abs-a-power-one-reset/4143833#414333#4143833]是否存在任何运行 SRAM 解码的前提条件[引用 spriso]

    不需要。运行此测试没有先决条件。

    [~ userid="506650" URL"/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1117276/tms570ls1224-enabling-fiq-cause-prefetch-abort-abort-after a-power-one-reset/4143833#414333#4RAM3833]为什么在测试运行前出现 ECC 问题?  [/报价]

    checkRAMUERRTest()用于测试 冗余地址解码和比较逻辑。  checkRAMECC()是为了测试 RAM 访问的 CPU ECC 机制。 在   checkRAMECC()测试之前或之后运行 checkRAMUERRTest()应该是可以的。

    我不知道为什么在  运行 checkRAMECC()之前运行 checkRAMUERRTest()时出现预取异常。  

    请在运行这些自检之前禁用中断。