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.

[参考译文] TMS570LC4357:通过在用户级别的 MCU 权限中读取 N2HET1 RAM 而触发的奇怪数据中止

Guru**** 2481465 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1020988/tms570lc4357-strange-data-abort-triggered-by-reading-n2het1-ram-in-user-level-of-mcu-privileges

器件型号:TMS570LC4357

您好!

使用用户权限级别读取 N2HET RAM 时遇到问题、我们无法找到原因。 PCR 完全打开、但不限于消除它作为问题源。 使用系统权限级别读取是正常的。

过程或每次异常中止、"同步外部读取、SD=1 "外部"意味着总线控制器有一些问题、但一切看起来都正常。

中止报告值 DFAR=FF4601C8 DFSR=00001008

指令是简单的32位读操作"LDR.w R1、[R3、#456];0x1c8"和 R3=0xFF460000

没有任何理由允许 MCU 在没有系统特权的情况下进行访问。  

NHET 指令测量两个上升沿之间的时间、这两个上升沿在读取时清零、并且我们正在尝试读取此指令的数据部分。

EVENT_A1 WCAPE{CONTRAINUE]、PIN=DEF_SIG_A1、EVENT_RISE、REG=NONE};
          SUB{src1=a、src2=IMM、dest=none、data=DEF_TIMEOUT};1.
           br {事件=N,COND_addr=L_CNT_B1 };1.
           MOV32 { REMOV=L_CNT_A1,type=IMTOREG&REM,reg=none,data=0 };1.
           MOV32{REMOV=L_S4_CNT、type=IMTOREG&REM、reg=none、data=0}

此事件不能由处理器 MPU 设置引起。 因为它是"外部"的、我们现在有适当的 MCU 设置。

RGNR[0x0]:DRBAR=00000000 DRSR=0000F73F DRACR=00001100影子
RGNR[0x1]:DRBAR=08000000 DRSR=00000025 DRACR=00001203 intRAM ro
RGNR[0x2]:DRBAR=FF000000 DRSR=0000002F DRACR=00001200外设
RGNR[0x3]:DRBAR=00000000 DRSR=00000000 DRACR=00000000
RGNR[0x4]:DRBAR=08000000 DRSR=00008021 DRACR=00001207共享 intRAM
RGNR[0x5]:DRBAR=08018000 DRSR=0000FF1D DRACR=00001203共享端卵巢
RGNR[0x6]:DRBAR=08000000 DRSR=0000801D DRACR=00001203 FW intRAM
RGNR[0x7]:DRBAR=00000000 DRSR=00000000 DRACR=00000000
RGNR[0x8]:DRBAR=08068000 DRSR=0000801D DRACR=00001303 RAM1
RGNR[0x9]:DRBAR=64000000 DRSR=00000011 DRACR=00001300额外的 MPU
RGNR[0xA]:DRBAR=68000000 DRSR=00000011 DRACR=00001301额外的 MPU
RGNR[0xB]:DRBAR=FF440000 DRSR=00000023 DRACR=00001300额外的 MPU
RGNR[0xC]:DRBAR=FFF7B800 DRSR=00008811 DRACR=00001300额外的 MPU
RGNR[0xD]:DRBAR=08020000 DRSR=00000000 DRACR=00000003堆栈保护
RGNR[0xE]:DRBAR=08025800 DRSR=0000F015 DRACR=00001303堆栈
RGNR[0xF]:DRBAR=00000000 DRSR=0000002B DRACR=00000602闪存

并且 PCR3.PMPROTSET1 = 0

对此行为有何想法?

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

    您好!

    NHET RAM 可在用户和特权模式下访问。 如果  PCR3.PMPROTSET1被置位、NHET RAM 也可在用户模式中被读取。

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

    否  PCR3.PMPROTSET1的意思是(TRM 2.5.3.2外设存储器保护设置寄存器1):  
    0 = 外设存储器帧(n)可在用户和特权模式下写入和读取。
    1 = 外设存储器帧(n)只能在特权模式下写入、但在用户和特权模式下都可以读取。

    相关位上有0、它允许 R/W 但我们无法读取在这两种情况下都必须能够实现的目标。 奇怪。

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

    刚刚尝试过。 在用户模式下、我从 N2HET1 RAM 读取内容没有问题:

    //切换到用户模式(M = 10000)
    asm (" cps #16");
    asm (" mov lr、r0");
    asm (" r1夫人、CPSR");
    asm (" mSR spsr_cxsf、r1");

    ABC =*(uint32 *)(0xx460000);