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**** 2546020 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 函数中绑定了该文本段

#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);
    }
}

00080000    00080000    00033020   00033020    rwx
  00080000    00080000    00033020   00033020    rwx .main_Msram

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

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

如 0x81fb4中的文本应为  

正确数据就像波纹管一样

   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

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

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

有许多地方已经改变了  

如这里所示  

如这里所示  

如这里所示  

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

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

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

    您好、TI 专家!

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

     

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

                    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

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

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

    您好、Han、

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

    此致、

    Brijesh

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

    您好、Han、

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

    此致、

    Brijesh

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

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

                    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);
                        }
                        else
                        {
                            /* To remove MISRA C error */
                        }
                        break;

    但是主域物理地址是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 地址。