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.

[参考译文] DRA829V:[EP2000][Main2_1]:如何在 MAIN2_1内核中使用 MCU_SPI0?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1516134/dra829v-ep2000-main2_1-how-to-use-mcu_spi0-in-main2_1-core

器件型号:DRA829V
主题:SysConfig 中讨论的其他器件

工具/软件:

您好 TI、

我们需要在 Main2_1内核中配置具有 CS0的 MCU_SPI0、您能否提供任何如何配置的示例代码? 我们正在使用 RTOS SDK 10.1并进行检查、但无法找到 MCU_SPI0、我看到 MCSPI3已配置。  

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

    您好:

    相同的查询 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1516038/dra829v-ep2000-clarification-with-respect-to-mcu_spi0-availability-on-main21

    关闭此主题。

    此致

    Tarun Mukesh

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

    尊敬的 Tarun:

      感谢您的分享信息、您能否提供 MCU_SPI0通道的任何 SPI 参考配置? 在 SDK 中、我没有看到任何此通道的示例。  

    此致、

    Satya。  

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

    尊敬的 Tarun:

     下面的函数主要是空的吗?请告诉我们如何配置来自 Main2_1内核的该电源和 clksrc、我附加了来自 Main2_1内核的完整 SPI 模块代码、您能否验证一次?

    Void Spi App_Power AndClkSrc (void)

         /* MCU 模块(如果包含)将替换此操作*/
          返回;

    }


    e2e.ti.com/.../7242.spi.zip

    此致、

    Satya。  

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

    您好:

    在 SBL 中、我们将为 SPI 模块上电并提供调用。 请问您使用的引导流程是什么?

    [报价 userid="635888" url="~/support/processors-group/processors/f/processors-forum/1516134/dra829v-ep2000-main2_1-how-to-use-mcu_spi0-in-main2_1-core/5831205 #5831205"]

    Void Spi App_Power AndClkSrc (void)

         /* MCU 模块(如果包含)将替换此操作*/
          返回;

    }

    [/报价]

    如果 SPI 已上电、则无需使用此 API。 否则,我们在 MCAL 中有 MCU 模块,您需要在 AUTOSAR OS 中将 SPI 和 MCU 模块集成在一起。

    此致

    Tarun Mukesh

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

    你好、Tarun、

        我认为我们不是通过 uboot 进行控制、但如果我使用以下逻辑读取 power 和 clk 状态变为1、

    uint32 moduleId、clkId、uint64 clkRate)是 Std_Return App_Implementation 的类型 MCU_CB_Uint32

    uint32_t Val = E_NOT_OK;
    sint32 status = 0;
    Uint32 moduleState = 0U;
    Uint32 resetState = 0U;
    Uint32 contextLossState = 0U;

    UINT32 clockStatus = 0U;

    IF (STATUS =0)

    /*获取模块状态。 如果已打开、则无需更改状态*/
    状态= Sciclient_pmGetModuleState (moduleId、&moduleState、&resetState、
    contextLossState (&contextLossState)、
    SCICLIENT_SERVICE_WAIT_FOREVER);
    debug_log ("Sciclient_pmGetModuleState %X "、moduleState);

    IF (STATUS == E_OK)

    /*检查是否启用时钟*/
    状态= Sciclient_pmModuleGetClkStatus (moduleId、
    clkId、
    clockStatus、(&C)
    SCICLIENT_SERVICE_WAIT_FOREVER);
    debug_log ("Sciclient_pmModuleGetClkStatus %X "、clockStatus);
    }
    }

    返回(RetVal);
    }

    输入  

    moduleid: TISCI_MCU_MCSPI0

    clkid: TISI_DEV_MCU_MCSPI0_CLKSPIREF_CLK

    ModuleState、 clockStatus 的值为1表示时钟正常?  

    此致、

    Satya。

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

    您好:

    很抱歉我下班的时间太迟了、

    是、如果模块状态为1、则模块已开启。

    此致

    Tarun Mukesh

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

    您好:  

       但仍然无法在示波器中看到时钟、我们的 BSP 团队确认它未从 Uboot 初始化、因此我们是否需要从 MCU1_0内核或 MCU_SPI0的 MAIN2_1内核进行配置?

    此致、

    Satya。  

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

    您可以从两个域配置、是否正确复用 了您正在使用的 PIN?

    ModuleState 和 clockStatus 可以正确地告诉我们 SPI 的状态。

    Sciclient_pmGetModuleClkFreq API 调用可用于检查还提供的时钟。
     
    此致
    Tarun Mukesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以 App_Implementation  在示例中查看完整的 MCU_CB_API 使用情况

    td_ReturnType Mcu_CB_App_Implementation(uint32 moduleId, uint32 clkId, uint64 clkRate)
    {
      uint32 retVal = E_NOT_OK;
      sint32 status = E_NOT_OK;
      uint32 moduleState = 0U;
      uint32 resetState = 0U;
      uint32 contextLossState = 0U;
      uint32 i = 0U;
      uint64 respClkRate = 0;
      uint32 numParents = 0U;
      uint32 moduleClockParentChanged = 0U;
      uint32 clockStatus = 0U;
      uint32 origParent = 0U;
      uint32 foundParent = 0U;
      uint64 freqHz = 0U;
    
      status = Sciclient_init(NULL);
    
      if (status == 0)
     {
    
            /* Get the module state. No need to change the state if already ON */
            status = Sciclient_pmGetModuleState(moduleId, &moduleState, &resetState,
                                                &contextLossState,
                                                SCICLIENT_SERVICE_WAIT_FOREVER);
    
            if(moduleState == TISCI_MSG_VALUE_DEVICE_HW_STATE_OFF)
            {
              status = Sciclient_pmSetModuleState(moduleId,
                                                  TISCI_MSG_VALUE_DEVICE_SW_STATE_ON,
                                                  (TISCI_MSG_FLAG_AOP |
                                                    TISCI_MSG_FLAG_DEVICE_RESET_ISO),
                                                  SCICLIENT_SERVICE_WAIT_FOREVER);
    
              if (status == 0)
              {
                status = Sciclient_pmSetModuleRst(moduleId,
                                                  0x0U,
                                                  SCICLIENT_SERVICE_WAIT_FOREVER);
    
              }
            else
            {
              AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
                                " Module state is not set for module id = %d !!!\n",
                                                            moduleId);
            }
          }
    	    if (status == E_OK)
    	    {	  
    	      /* Check if the clock is enabled or not */
    		status = Sciclient_pmModuleGetClkStatus(moduleId,
                                                clkId,
                                                &clockStatus,
                                                SCICLIENT_SERVICE_WAIT_FOREVER);
    		}
        if (status == E_OK)
        {
            /* Get the number of parents for the clock */
            status = Sciclient_pmGetModuleClkNumParent(moduleId,
                                                    clkId,
                                                    &numParents,
                                                    SCICLIENT_SERVICE_WAIT_FOREVER);
            if ((status == LLD_PASS) && (numParents > 1U))
            {
                status = Sciclient_pmGetModuleClkParent(moduleId, clkId, &origParent,
                                           SCICLIENT_SERVICE_WAIT_FOREVER);
            }
        }
        if (status == LLD_PASS)
        {
            /* Disabling the clock */
            status = Sciclient_pmModuleClkRequest(
                                                moduleId,
                                                clkId,
                                                TISCI_MSG_VALUE_CLOCK_SW_STATE_UNREQ,
                                                0U,
                                                SCICLIENT_SERVICE_WAIT_FOREVER);
        }
    	if (status == E_OK)
    	{
    		AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
    								" Module clock request successful !!!\n");		
    	}
    	else
    	{
    		retVal = E_NOT_OK;
    	}	
        if (status == LLD_PASS)
        {
            foundParent = 0U;
            /* Try to loop and change parents of the clock */
            for(i=0U;i<numParents;i++)
            {
                if (numParents > 1U)
                {
                    /* Setting the new parent */
                    status = Sciclient_pmSetModuleClkParent(
                                                moduleId,
                                                clkId,
                                                clkId+i+1,
                                                SCICLIENT_SERVICE_WAIT_FOREVER);
                    /* Check if the clock can be set to desirable freq. */
                    if (status == LLD_PASS)
                    {
                        moduleClockParentChanged = 1U;
                    }
                }
                if (status == LLD_PASS)
                {
                    status = Sciclient_pmQueryModuleClkFreq(moduleId,
                                                            clkId,
                                                            clkRate,
                                                            &respClkRate,
                                                            SCICLIENT_SERVICE_WAIT_FOREVER);
                }
                if ((status == LLD_PASS) && (respClkRate == clkRate))
                {
                    foundParent = 1U;
                    break;
                }
            }
        }
        if (foundParent == 1U)
        {
            /* Set the clock at the desirable frequency*/
            status = Sciclient_pmSetModuleClkFreq(
                                    moduleId,
                                    clkId,
                                    clkRate,
                                    TISCI_MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE,
                                    SCICLIENT_SERVICE_WAIT_FOREVER);
        }
        else
        {
            status = LLD_EFAIL;
        }
        if ((status == LLD_PASS) &&
            (clockStatus == TISCI_MSG_VALUE_CLOCK_SW_STATE_UNREQ))
        {
            /* Restore the clock again to original state */
            status = Sciclient_pmModuleClkRequest(
                                                moduleId,
                                                clkId,
                                                clockStatus,
                                                0U,
                                                SCICLIENT_SERVICE_WAIT_FOREVER);
        }
        if ((status != LLD_PASS) && (moduleClockParentChanged == 1U))
        {
            /* Setting the original parent if failure */
            status = Sciclient_pmSetModuleClkParent(
                                        moduleId,
                                        clkId,
                                        origParent,
                                        SCICLIENT_SERVICE_WAIT_FOREVER);
        }
    		 
            if (status == 0)
            {
    		
                 status = Sciclient_pmGetModuleClkFreq(moduleId, clkId,
                                                     &freqHz,
                                                   SCICLIENT_SERVICE_WAIT_FOREVER);
    
                  AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
    							   " Module clock frequency set. Module = %d , Freq = %llu !!!\n",moduleId, freqHz);	
    			retVal=E_OK;	
              }
            else
              {
                AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
                             " Module clock frequency setting failed !!!\n");
                retVal = E_NOT_OK;
              }
    
    
      }
          else
          {
            AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
                              " Sciclient is not initialized  !!!\n");
          }
    
          return (retVal);
    }

    此致

    Tarun Mukesh

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

    你好、Tarun、

         是的我使用的 API 相同,但我必须传递哪些正确的参数?

    现在传递的参数是  

    moduleid 是 TISCI_DEV_MCU_MCSPI0、  

    CLKID 为 TISCI_DEV_MCU_MCSPI0_VBUSP_CLK

    clkRate 为2000000 (对于2MHz)

    类型 MCU_CB_API (App_Implementation moduleId、uint32 clkId、uint64 clkRate) 仍然无法通过以下 Std_Return、其中返回-1值。  

    状态= Sciclient_pmQueryModuleClkFreq (moduleId、
    clkId、
    clkRate、
    respClkRate、(&R)
    SCICLIENT_SERVICE_WAIT_FOREVER);

    此致、

    Satya。  

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

    您好:

    MCU_CB_API App_Implementation 从配置程序插件中获取参数、不应手动提供。

    您是否使用 EB tresos 配置程序来选择这些值? 如果是这样、您可以截屏配置。

    MCU_PLL2_HSDIV0_CLKOUT 是提供给 MCU_SPI0的时钟、是50 MHz 时钟

    此致

    Tarun Mukesh

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

    你好、Tarun、  

       我直接使用 MCAL 示例中生成的文件而不使用 EB_TRESOS、我可以根据您的可行时间安排短呼叫吗? 然后我将向您展示我正在做的事情、我认为很容易使它发挥作用。

    此致、

    Satya。  

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

    您好:

    没问题。 您能否在下周二上午11点至12点举行3/6/25的会议?

    t-puvvada@ti.com

    此致

    Tarun Mukesh

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

    你好、Tarun、

          感谢电话支持、正如我们所讨论的、我进行了必要的更改。

    1.无时钟配置、默认为50 MHz 和分频器 I 配置为49、因此我可以在 SPI_SCK 线路上看到1 MHz 时钟。

    2. D0用于 SPI 数据输出 D1用于 SPI 数据输入、I 请参阅、在 D0引脚上存在总线上的数据、但在尝试从 SJA1124 NXP LIN 芯片读取数据时、未将 D1引脚上的数据视为输入数据。  

    此 SysConfig 对于 MCU_SPI0是否正确?

    中断路由器配置是否是接收数据所必需的?

      {
        PIN_MCU_SPI0_CLK、PIN_MODE (0)|\
        ((PIN_PULL_DISABLE)( PIN_PULL_DIRECTION~Ω PIN_INPUT_ENABLE))
      }、
      /* MyMCU_SPI0_TEST -> MCU_SPI0_D0 -> E24 */
      {
        PIN_MCU_SPI0_D0、PIN_MODE (0)|\
        ((PIN_PULL_DISABLE)( PIN_PULL_DIRECTION~Ω PIN_INPUT_ENABLE))
      }、
      /* MyMCU_SPI0_TEST -> MCU_SPI0_D1 -> E28 */
      {
        PIN_MCU_SPI0_D1、PIN_MODE (0)|\
        ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE)(~PIN_PULL_DIRECTION))
      }、
      /* MyMCU_SPI0_TEST -> MCU_SPI0_CS0 -> E25 */
      {
        PIN_MCU_SPI0_CS0、PIN_MODE (0)|\
        ((PIN_PULL_DISABLE)( PIN_PULL_DIRECTION~Ω PIN_INPUT_ENABLE))
      }、

    根据原理图、D1是相对于 SOC 的数据输入、D0是数据输出。  

    .mcspi =

    .csEnable =(uint16) true、
    .csMode = SPI_Continuous、
    .csPolarity = SPI_HIGH、
    .csIdleTime = SPI_DATADELAY_0、
    .clkDivider = 49u、
    .clkMode = SPI_CLK_MODE_0、
    .txRxMode = SPI_TX_RX_MODE_BOTH、
    .startBitEnable =(uint16) false、
    .startBitLevel = SPI_LOW、
    .receptionLineEnable = DATA_LINE_1_RECEIVE、
    .transmissionLineEnable = DATA_LINE_0_TRANSFISION、
    }、

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

    您好:

    1. 无时钟配置、默认为50 MHz 和分频器 I 配置为49、因此我可以在 SPI_SCK 线路上看到1 MHz 时钟。

    好极了。

    [引述 userid="635888" url="~/support/processors-group/processors/f/processors-forum/1516134/dra829v-ep2000-main2_1-how-to-use-mcu_spi0-in-main2_1-core/5851858 #5851858"]

    2. D0用于 SPI 数据输出 D1用于 SPI 数据输入、I 请参阅、在 D0引脚上存在总线上的数据、但在尝试从 SJA1124 NXP LIN 芯片读取数据时、未将 D1引脚上的数据视为输入数据。  

    此 SysConfig 对于 MCU_SPI0是否正确?

    中断路由器配置是否是接收数据所必需的?

    [/报价]

    您的 SysConfig 在 MCU_SPI0中查找正确。

    是的、由于您从 MCU2_1访问 MCU_SPI0、因此必须配置中断路由器才能将数据接收到 Rx 缓冲区/NXP FIFO 中。但是、您的测试点应该会显示一些数据、因为它位于线路上、请确保  SJA1124 Rx 芯片正在发送数据。

    此致

    Tarun Mukesh