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.

[参考译文] TDA4VL-Q1:TDA4 SA5 RAT 问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1381365/tda4vl-q1-tda4-sa5-rat-issue

器件型号:TDA4VL-Q1

工具与软件:

TI exprits、您好!

在 BYD SA5中,我们遇到了一个非常奇怪的问题,我们配置了主域 MSRam,

https://e2e.ti.com/e2eprivate/valeo/valeo-ep-automotive/f/valeo-jacinto-forum/1373333/tda4vl-q1-can-mcu-domain-use-the-msram_512k0_ram-as-rw-data-region/5252249

在前面的数据包中、我们已经提到了这一点。

我们在0x80000中放置了一些文本段、我们在 RAT 函数中绑定了该文本段

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define CSL_MCU_ARMSS_RAT_CFG_BASE (0x40f90000UL)
#define MSRAM_RAT_REGION_INDEX 10U
#define MSRAM_RAT_REGION_BASE (0x4F02000000UL)
#define MSRAM_RAT_REGION_SIZE (0x80000UL)
#define MSRAM_RAT_REGION_LOCAL_BASE (0x80000UL)
void Rat_Msram512KBInit(void)
{
bool ratRetVal;
CSL_RatTranslationCfgInfo translationCfg;
uint32_t index = MSRAM_RAT_REGION_INDEX;
/* Add RAT configuration to access address > 32bit address range */
translationCfg.translatedAddress = MSRAM_RAT_REGION_BASE;
translationCfg.sizeInBytes = MSRAM_RAT_REGION_SIZE;
translationCfg.baseAddress = (uint32_t)MSRAM_RAT_REGION_LOCAL_BASE;
ratRetVal = CSL_ratConfigRegionTranslation((CSL_ratRegs *)CSL_MCU_ARMSS_RAT_CFG_BASE,
index, &translationCfg);
if (ratRetVal == false) {
UART_printf("\nFailed to configure the RAT index %d address 0x%lx\n", index, translationCfg.translatedAddress);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
00080000 00080000 00033020 00033020 rwx
00080000 00080000 00033020 00033020 rwx .main_Msram
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

但目前我们做了一些压力测试,发现,有时 SBL 将数据从临时存储器复制到主域 msram  

某些文本在主域 MSARAM 中不正确、但 DDR 和 MCU msam 中的文本都是正确的。

如 0x81fb4中的文本应为  

正确数据就像波纹管一样

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
81f9c: 03 10 a0 e3 mov r1, #3
; ACTL_Parking_DW.is_P4U_OUT_SC = ACTL_Parking_IN_P4U_OUT_PSM_SC;
81fa0: c1 01 c4 e5 strb r0, [r4, #449]
; ACTL_Parking_DW.A_SIG_APA_PARKING_TYPE_SELD = ACTL_Parking_ACTL_PARKINGOUT;
81fa4: a5 01 c4 e5 strb r0, [r4, #421]
81fa8: 01 00 a0 e3 mov r0, #1
; ACTL_Parking_DW.is_P4U_CTRL_ON_SC = ACTL_Parking_IN_P4U_OUT_SC;
81fac: b1 11 c4 e5 strb r1, [r4, #433]
; ACTL_Parking_DW.A_SIG_SET_DASW_MANEUVER_MODE = ACTL_Parking_ACTL_DASW_MM_PO;
81fb0: 9c 01 c4 e5 strb r0, [r4, #412]
; }
81fb4: 34 d0 8d e2 add sp, sp, #52
81fb8: f0 8f bd e8 pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
81fbc: 00 f0 20 e3 nop
; if (((uint32_T)ACTL_Parking_DW.is_P4U_FAILURE_SC !=
81fc0: b5 01 d4 e5 ldrb r0, [r4, #437]
; IN_P4U_5FAILURE_ST_FAILURETO_OF) && ((((uint32_T)
81fc4: 01 00 50 e3 cmp r0, #1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我直接读取存储器、发现从0x81fa0到0x81fbc 有32个字节已更改为0、

我们还检查主域 MSRAM 中的文本、

有许多地方已经改变了  

如这里所示  

如这里所示  

如这里所示  

所有更改的大小为32字节、应该是文本代码、但变为0、是否存在高速缓存问题或 DMA 问题?

我们可以将主域 SRAM 用于 MCU 文本代码吗? 您能否说明一下在 MCU 域中使用主域 MSRAM 的方法没有问题、您能否就此向您的 IP 设计团队核实。

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

    您好、TI 专家!

    似乎当我们改变主域 msram 的 MPU 配置时,情况已经消失了。

     

    但是在 SBL 代码中、在复制每个段之后都有一个 SBL_DCacheClean 函数、用于确保高速缓存被写回内存。

    Fullscreen
    1
    2
    3
    4
    fp_readData((void *)(uintptr_t)(section.addr), srcAddr, section.size);
    #if defined(BUILD_MCU1_0)
    SBL_DCacheClean((void *)(uintptr_t)(section.addr), section.size);
    #endif
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    但在这种情况下、这似乎不能与主域 MSRAM 配合使用。 为什么会 发生此问题、并且通过使用 RAT 转换模块在 MCU 域中使用主域 msram 是否安全?

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

    您好、Han、

    本质上、上述更改将使该区域为非缓存区域、因此 问题似乎与缓存有关。 您在缓存清理函数中使用的地址是什么? 是 RAT 映射地址还是原始物理地址?  

    此致、

    Brijesh

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

    您好、Han、

    但上面的代码并不负责新添加的 RAT 映射、对吧?  有一个代码用于映射 ATCM 和 BTCM 存储器、而不是 OCM 存储器。

    此致、

    Brijesh

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

    您是指此代码?所以缓存清理函数输入地址必须是正确的物理地址?

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    case MCU4_CPU1_ID:
    atcmSize = sblAtcmSize();
    btcmSize = sblBtcmSize();
    /*Remap TCM address from R5 local to SoC memory map*/
    if (section.addr < (SBL_MCU_ATCM_BASE + atcmSize))
    {
    /* Get offset into ATCM */
    SBL_log(SBL_LOG_MAX, "Translating coreid %d local ATCM addr 0x%x to ", CoreId, section.addr);
    section.addr = section.addr - SBL_MCU_ATCM_BASE;
    section.addr = SocAtcmAddr[CoreId - MCU1_CPU0_ID] + section.addr;
    SBL_log(SBL_LOG_MAX, "SoC MCU ATCM addr 0x%x\n", section.addr);
    }
    else if ((section.addr >= SBL_MCU_BTCM_BASE) &&
    (section.addr < (SBL_MCU_BTCM_BASE + btcmSize)))
    {
    /* Get offset into BTCM */
    SBL_log(SBL_LOG_MAX, "Translating coreid %d local BTCM addr 0x%x to ", CoreId, section.addr);
    section.addr = section.addr - SBL_MCU_BTCM_BASE;
    section.addr = SocBtcmAddr[CoreId - MCU1_CPU0_ID] + section.addr;
    SBL_log(SBL_LOG_MAX, "SoC MCU BTCM addr 0x%x\n", section.addr);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    但是主域物理地址是64位地址  

    #define MSRAM_RAT_REGION_BASE      (0x4F02000000UL)
    无法访问 MCU 域中的物理地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Han、

    是的、这是真的、我们无法访问 R5F 上的48位地址、这就是为什么我们需要在 CPU 尝试访问此存储器时使用 RAT 映射地址的原因。  

    正因为如此、此代码需要稍作更改、当它复制到该 OCM 存储器时、它需要使用 RAT 映射地址、当前 SBL 中不处理此问题、您需要使用此代码。  

    您能否首先确认此更改已出现在 SBL 的 RPRC 解析器代码中?  

    此致、

    Brijesh

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

    您好 Jadav、

    一定会有一些错误、在我们的 MCU 链接器文件中、我们已经将其写入 rat 地址、而不是物理地址、这使得 SBL_DChacheClean 函数输入地址已经是我认为的 RAT 地址。

x 出现错误。请重试或与管理员联系。