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.

[FAQ] [参考译文] 【常见问题解答】AM62A7:早期 MCU_I2C 和 MCU_UART 响应

Guru**** 2804455 points

Other Parts Discussed in Thread: SK-AM62A-LP

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1625016/faq-am62a7-early-mcu_i2c-and-mcu_uart-response

器件型号: AM62A7
主题中讨论的其他器件: SK-AM62A-LP

您能否告诉我、我可以使用 MCU+SDK/FreeRTOS SDK 来缩短 MCU_I2C 和 MCU_UART 响应时间的步骤以及测量该时间的方法?  

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

    AM62A

    本节介绍了优化 AM62A 的 MCU_I2C 和 MCU_UART 响应时间的步骤。在使用 OSPI NAND 引导模式时、应用程序在 MCU R5 内核上运行、并 使用 SK-AM62A-LP EVM 进行测试。

    MCU_I2C 和 MCU_UART 响应建议:

     在 SBL stage-1 中初始化 MCU_I2C 和 MCU_UART 模块、以避免对 MCU R5 应用程序的 DM 固件产生任何依赖。 在这种情况下初始化意味着启用 LPSC 门进行外设时钟并设置所配置模块的工作频率。

    在应用阶段会配置其他参数、如设置中断/轮询模式、I2C 的比特率、UART 的波特率、外设实例以及与不使用 DM/Sciclient 调用的 IP 相关的其他参数。   

    第一个 MCU_I2C 响应的阶段:

    SAR ADC 说明
    t1. 从 ECU 上电到 PMIC 完成电源轨斜升并从复位中释放 SOC 的持续时间。 该时序因电路板设计而异。
    T2 ROM 执行时间
    t3. SBL 阶段 1 引导 MCU R5 内核所需的时间  
    t4. MCU R5 应用程序启动数据传输的 MCU_I2C 启动条件所需的时间。

    第一个 MCU_UART  响应的阶段:

    SAR ADC 说明
    t1. 从 ECU 上电到 PMIC 完成电源轨斜升并从复位中释放 SOC 的持续时间。 该时序因电路板设计而异。
    T2 ROM 执行时间
    t3. SBL 阶段 1 引导 MCU R5 内核所需的时间  
    t4. MCU R5  应用程序启动 MCU_UART 事务所需的时间。

    优化 MCU_I2C 和 MCU_UART 响应时间的步骤:

    1.禁用 SBL 打印。

    2. 在 SBL 1 级中启用 MCU_I2C 和 MCU_UART 时钟。

    在 SBL stage-1 中添加以下代码:

    /* To enable MCU domain I2C */
    SOC_moduleClockEnable(TISCI_DEV_MCU_I2C0, 1);
    
    /* To enable MCU domain UART */
    SOC_moduleClockEnable(TISCI_DEV_MCU_UART0, 1);
    SOC_moduleSetClockFrequency(TISCI_DEV_MCU_UART0,TISCI_DEV_MCU_UART0_FCLK_CLK,48000000);

    3.更改 clock.c 以避免  在调用 pminit () 时复位 MCU_I2C 和 MCU_UART 时钟  

    应用以下补丁以避免复位 MCU 域的 MCU_I2C 和 MCU_UART 时钟。

    diff --git a/source/drivers/device_manager/rm_pm_hal/rm_pm_hal_src/pm/soc/am62ax/clocks.c b/source/drivers/device_manager/rm_pm_hal/rm_pm_hal_src/pm/soc/am62ax/clocks.c
    index 086b1f05..b1fadc06 100644
    --- a/source/drivers/device_manager/rm_pm_hal/rm_pm_hal_src/pm/soc/am62ax/clocks.c
    +++ b/source/drivers/device_manager/rm_pm_hal/rm_pm_hal_src/pm/soc/am62ax/clocks.c
    @@ -3782,7 +3782,7 @@ const struct clk_data soc_clock_data[260] = {
     		.drv		= &clk_drv_pll_16fft,
     		.freq_idx	= AM62AX_FREQ_VALUE_PLLFRACF2_SSMOD_16FFT_MCU_0,
     		.data		= &clk_data_pllfracf2_ssmod_16fft_mcu_0.data_pll.data,
    -		.flags		= 0,
    +		.flags		= CLK_DATA_FLAG_NO_HW_REINIT,
     	},
     	[CLK_AM62AX_POSTDIV1_16FFT_MAIN_1_HSDIVOUT5_CLK] =					{
     		.parent =									{
    @@ -4786,7 +4786,7 @@ const struct clk_data soc_clock_data[260] = {
     			1,
     		},
     		.drv	= &clk_drv_div_pll_16fft_hsdiv.drv,
    -		.flags	= 0,
    +		.flags	= CLK_DATA_FLAG_NO_HW_REINIT,
     		.type	= CLK_TYPE_DIV,
     		.data	= &clk_data_hsdiv4_16fft_mcu_0_hsdiv1.data_div.data,
     	},
    @@ -4796,7 +4796,7 @@ const struct clk_data soc_clock_data[260] = {
     			1,
     		},
     		.drv	= &clk_drv_div_pll_16fft_hsdiv.drv,
    -		.flags	= 0,
    +		.flags	= CLK_DATA_FLAG_NO_HW_REINIT,
     		.type	= CLK_TYPE_DIV,
     		.data	= &clk_data_hsdiv4_16fft_mcu_0_hsdiv2.data_div.data,
     	},
    

    4. 可以重新排序对 SBL S1 main.c 中 App_runCpus API 的调用、以缩短 R5F0-0 引导时间:

    应当在 App_loadImages API 之后立即移动 APP_runCpus。

    5.从在 MCU R5 上为 I2C 和 UART 运行的映像中删除 SCI 服务器调用

    在 main.c 文件中使用修改后的 System init:

    void mod_system_init()
    {
        /* DPL init sets up address transalation unit, on some CPUs this is needed
         * to access SCICLIENT services, hence this needs to happen first
         */
        Dpl_init();
        /* Now we can do pinmux */
        Pinmux_init();
        /* finally we initialize all peripheral drivers */
        Drivers_uartInit();
        I2C_init();
    }
    
    int main()
    {
        int32_t status = SystemP_SUCCESS;
    
        // System_init();
        mod_system_init();

    请注意、此处删除了 system_init 中可能需要 SCI 服务器服务的任何 API 调用、因此也会删除 CycleCounterP_init。 如果客户不使用 CycleCounter P、则可以将其移除、如果 MCU 应用中需要任何其他模块、则也需要为此在 SBL 中对其进行初始化。

    完成上述更改后、您必须重新编译库、SBL 和其他应用。

    测试设置:

    MCU+SDK 版本: 11_01_00_16

    EVM:SK-AM62A-LP

    引导模式引脚设置 (OSPI NAND):

    引导模式[ 8:15 ](SW1)= 0000 0000
    引导模式[ 0:7 ](SW2)= 1100 0000
    在 MCU R5 内核上运行的早期 I2C 和 UART 示例:
    为了进行测试、 使用了 SDK 中修改后的空示例。
    SBL 应用程序 (SBL+TIFS+boardcfg):292kB
    MCU 应用程序大小:32KB

    测量:

    有关测量方法 、请参阅 AM62A SK EVM 原理图、可使用以下引脚进行测量;

    MCU_PORz:J8 上的#28
    MCU_SPI0_D1:J8 上为#4
    MCU_SPI0_D0:J8 上的#6
    MCU_I2C0_SDA:J8 上的#21
    MCU_I2C0_SCL:J8 上#24
    MCU_UART0_TXD_CONN:J8 上的#19

    测试结果:

    EVM 的近似 PMIC 启动时间为 22.5ms、这取决于硬件、因此该数字在定制电路板上可能不同。

    SAR ADC 说明 时间 (ms)
    t1. PMIC 22.5
    T2 ROM 执行时间 48.2.
    t3. SBL 引导 MCU R5 内核所需的时间   56
    t4. MCU R5 应用程序 启动 MCU_I2C 启动条件所需的时间 0.069
    t4. MCU R5  应用程序启动 MCU_UART 事务所需的时间 0.035
    总 MCU_I2C 响应时间

    127.

    总 MCU_UART 响应时间

    127.

    以下是 SBL stage1 和 MCU 应用程序的工程。

    注意:要检查早期 I2C、请删除/注释 UART 相关 API;对于早期 UART、请从给定工程中删除/注释所有 I2C 相关 API。

    Project - Early_I2C_UART.zip

    Salae 逻辑分析仪的日志。

    早期 UART -

    早期 I2C -  

    此致、

    Tushar