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] [参考译文] [常见问题解答] PROCESSOR-SDK-AM64X:无法打开 MCU I2C 的 I2C 驱动程序

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1501801/faq-processor-sdk-am64x-not-able-to-open-i2c-drivers-for-mcu-i2c

器件型号:PROCESSOR-SDK-AM64X

工具/软件:

我在 AM64x 器件上使用 M4F 内核中的 MCU_I2C 实例。 我无法初始化 MCU_I2C 实例、它始终无法打开。

我使用的是 SDK v10.0。 请指导我们解决相同问题的步骤。

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

    在 SDK v10.0发布到 SDK v11.0后、I2C 驱动程序似乎损坏。

     I2C_LLD_isBaseAddrValid() API 返回失败状态、因为未检查 MCU_I2C 地址。 请将 I2C_LLD_isBaseAddrValid 函数代码替换为以下提供的代码。  I2C_LLD_isBaseAddrValid   位于  ${MCU+SDK}/source/drivers、soc、am64x_am243x/sdk.h soc  添加到工程。

    static inline int32_t I2C_lld_isBaseAddrValid(uint32_t baseAddr)
    {
        /* Set status to invalid Param */
        int32_t status = (int32_t)(-3);
    
        if (    (baseAddr == CSL_I2C0_CFG_BASE) ||  \
                (baseAddr == CSL_I2C1_CFG_BASE) ||  \
                (baseAddr == CSL_I2C2_CFG_BASE) ||  \
                (baseAddr == CSL_I2C3_CFG_BASE) ||  \
                (baseAddr == (uint32_t)AddrTranslateP_getLocalAddr(CSL_MCU_I2C0_CFG_BASE)) ||  \
                (baseAddr == (uint32_t)AddrTranslateP_getLocalAddr(CSL_MCU_I2C1_CFG_BASE)) )
        {
            /* Set status to success */
            status = 0;
        }
    
        return status;
    }

    还 应在 soc 文件中包含 AddrTranslateP.h 文件。

    另请替换中的代码  I2C_OPEN  功能如下图所述。  

    指定  I2C_OPEN  在上找到的函数  ${MCU+SDK}/source/drivers/i2c/v0/i2c_v0.c  添加到工程。

    完成上述更改后、请重新构建库并重新构建示例工程。
    gmake -s libs PROFILE={release|debug} clean
    gmake -s libs PROFILE={release|debug}

    现在、您将能够运行示例。