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.

[参考译文] IWR1642BOOST:I2CSlave_open()返回零

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/780064/iwr1642boost-i2cslave_open-returns-zero

器件型号:IWR1642BOOST
主题中讨论的其他器件: IWR1642

您好!

我正在尝试将 I2CSlave 集成到 IWR1642Boost 中。 我从驱动程序文件夹中提供的示例中获取了一段代码。 我将 SDK2.0.0.4与 IT2.4结合使用。 我已按如下方式初始化 i2cParams。

/*初始化 I2C 从驱动程序*/
I2CSlave_init();

/*初始化 I2C 驱动程序默认参数*/
I2CSlave_Params_init (&i2cParams);

i2cParams.transferMode = I2CSLAVE_MODE_BLOCKING;
i2cParams.slaveAddress = 0x48;

/*打开 I2C 从驱动程序*/
i2cHandle = I2CSlave_open (0、&i2cParams);

if (i2cHandle ==空)
{
System_printf ("错误:I2C 驱动程序打开失败\n");
返回;
}
System_printf ("调试:通过 I2C 从设备打开\n"); 

在调试中、模式 i2cHandle 为零。 这里有什么问题?

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

    你好,Laxmi,

      我想您正在尝试访问温度传感器、  

    在调用 I2C 驱动器之前、您需要确保 将正确的外设连接到器件中的正确资源。

    即、在这种情况下、您需要将 I2C 器件 IP 连接到相应的引脚、此处的器件 I2C 线路连接到 SPIB_MISO (I2C_SCL)和 SPIB_MOSI (I2C_SDA)、默认情况下、这些线路由器件引导加载程序配置为 SPI 接口。  

    根据器件架构、这些引脚可针对许多外设进行多路复用、我们可以连接 SPI、UART、I2C、GPIO 外设。  因此、在进行通信之前、我们需要确保将正确的引脚多路复用到器件内的正确外设、这是使用如下所示的引脚复用寄存器完成的。

    您需要在下面的引脚多路复用寄存器 shwon 中正确设置 I2C_SDA、I2C_SCL 值。  

    您需要确保器件中的 I2C 主器件部分已正确设置。  

    此外、

      您需要在电路板上安装电阻器 R210和 R211、以便可以将 I2C 线路连接到我们的器件。 目前未按如下所示填充

    谢谢、此致、

    CHETHAN Kumar Y.B.

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

    您好、先生、

    我使用 iwr1642作为从器件、因此我已经在从模式下的0x48地址处对其进行了初始化。 我已经按照 SDK 2.0.0.4驱动程序文件夹中提供的示例项目进行了操作。 我尝试通过 I2C 而不是 UART 发送后处理的数据。 主器件被初始化、以查看0x48、iwr1642上的从器件。 我已按如下方式初始化 I2C 引脚

    /*设置 PINMUX 以显示 XWR16xx I2C 引脚*/
    Pinmux_set_OverrideCtrl (SOC_XWR16XX_PINF13_PADAH、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR16XX_PINF13_PADAH、SOC_XWR16XX_PINF13_PADAH_I2C_SDA);
    
    Pinmux_set_OverrideCtrl (SOC_XWR16XX_PING14_PADAI、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR16XX_PING14_PADAI、SOC_XWR16XX_PING14_PADAI_I2C_SCL); 

    在调试时、我看到 I2CSlave_open (0、&i2cParams)返回零。 这是否意味着初始化失败? 因为它通过了具有 NULL 的 I2Chandle 测试。

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

    拉克斯米、

       需要注意的一点是、电路板上有温度传感器、它们具有相同的 I2C 从器件地址、

    因此、您不能使用0x48H 和0x49H 地址、它将与给定给 IWR1642器件的相同从器件地址冲突、如下所示。

    还应物理探测 I2C 线路、查看物理接口是否发生 I2C 事务。  

    谢谢、此致、

    CHETHAN Kumar Y.B.

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

    您好、先生、

    我将对其进行研究。 同时、您能否查看我将 IWR1642用作 I2CSlave 的代码。

    void Test_benchmarkStart (uint32_t 计数器)
    {
    /*初始化计数器以计算周期数*/
    PMU_configureCounter (counter、0x11、false);
    
    /*重置 PMU 计数器*/
    PMU_resetCount (计数器);
    
    /*启动 PMU 计数器*/
    PMU_startCounter (counter);
    }
    
    //**
    *@b Description
    *@n
    * 此函数停止 PMU 计数器并返回电流
    * 计数器值。
    *
    *@param[in]计数
    器* 用于基准测试
    *
    *@retval
    *的计数器 ID 当前 PMU 计数器值。
    /uint32_t
    Test_benchmarkStop (uint32_t 计数器)
    {
    /*停止 PMU 计数器*/
    PMU_stopCounter (计数器);
    
    /*读取 PMU 计数器*/
    返回(PMU_getCount (counter));
    }
    
    //**
    *@b Description
    *@n
    * 特定于平台的实现。
    *
    *@retval
    * 成功 - 0
    *@retval
    * 误差 -<0
    */
    
    static Int32_t PlatformInit (void)
    {
    #if (定义的(SOC_XWR14XX))
    /*设置 PINMUX 以显示 XWR14xx I2C 引脚*/
    Pinmux_set_OverrideCtrl (SOC_XWR14XX_PINR3_PADAH、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR14XX_PINR3_PADAH、SOC_XWR14XX_PINR3_PADAH_I2C_SDA);
    Pinmux_set_OverrideCtrl (SOC_XWR14XX_PINP4_PADAI、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR14XX_PINP4_PADAI、SOC_XWR14XX_PINP4_PADAI_I2C_SCL);
    #else
    /*设置 PINMUX 以显示 XWR16xx I2C 引脚*/
    Pinmux_set_OverrideCtrl (SOC_XWR16XX_PINF13_PADAH、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR16XX_PINF13_PADAH、SOC_XWR16XX_PINF13_PADAH_I2C_SDA);
    
    Pinmux_set_OverrideCtrl (SOC_XWR16XX_PING14_PADAI、PINMUX_OUTEN_RETAK_HW_CTRL、PINMUX_INPEN_RETAK_HW_CTRL);
    Pinmux_Set_FuncSel (SOC_XWR16XX_PING14_PADAI、SOC_XWR16XX_PING14_PADAI_I2C_SCL);
    #endif
    
    返回0;
    }
    
    static Int32_t i2cBlockingModeTest()
    {
    I2CSlave_handle i2cHandle;
    I2CSlave_Params i2cParams;
    布尔 RetVal = false;
    内部32_t 错误代码= 0;
    uint32_t ARG;
    
    /*重置发送和接收缓冲器*/
    memset (&rxData、0、sizeof (rxData));
    
    /*初始化 I2C 从驱动程序*/
    I2CSlave_init();
    
    /*初始化 I2C 驱动程序默认参数*/
    I2CSlave_Params_init (&i2cParams);
    
    i2cParams.transferMode = I2CSLAVE_MODE_BLOCKING;
    i2cParams.slaveAddress = 0x48;
    
    /*打开 I2C 从驱动程序*/
    i2cHandle = I2CSlave_open (0、&i2cParams);
    
    if (i2cHandle ==空)
    {
    System_printf ("错误:I2C 驱动程序打开失败\n");
    返回-1;
    }
    System_printf ("调试:通过 I2C 从设备打开\n");
    
    /*在扩展地址模式下配置 I2C 器件。 *
    ARG = 1;
    错误代码= I2CSlave_control (i2cHandle、I2C_CMD_ADDR_MODE、(void*)&arg);
    如果(错误代码< 0)
    {
    System_printf ("错误:I2C 控制集 XA 失败[错误代码%d]\n"、错误代码);
    返回-1;
    }
    System_printf ("调试:通过 I2C 从机控制\n");
    
    TxData[0]= 0xA;
    
    /*从机写入*/
    RetVal = I2CSlave_write (i2cHandle、&txData、1);
    
    如果(RetVal == false)
    {
    System_printf ("错误:I2C 从设备写入失败\n");
    返回-1;
    }
    其他
    {
    System_printf ("调试:通过 I2C 从机写入\n");
    }
    
    /*从器件读取*/
    RetVal = I2CSlave_read (i2cHandle、&rxData、1);
    
    如果(RetVal == false)
    {
    System_printf ("错误:I2C 从设备读取失败\n");
    返回-1;
    }
    其他
    {
    System_printf ("调试:通过 I2C 从机读取\n");
    }
    
    /*关闭 I2C 从驱动程序*/
    I2CSlave_close (i2cHandle);
    返回0;
    }
    
    //**
    *@b 说明
    *@n
    * 初始化各种
    *的系统初始化任务 系统中的组件。
    *
    *@retval
    * 不适用。
    //
    静态空 Test_initTask (UArg0、UArgarg1)
    {
    内部32_t RetVal = 0;
    
    /*初始化测试记录器框架:*/
    MCPI_Initialize ();
    
    /*初始化平台*/
    RetVal = PlatformInit();
    如果(RetVal < 0)
    {
    MCPI_setFeatureTestResult ("平台初始化失败"、MCPI_TestResult_FAIL);
    MCPI_setTestResult ();
    BIOS_exit (0);
    }
    
    while (1)
    {
    System_printf (" \n");
    System_printf ("I2C 从设备测试菜单 \n");
    System_printf ("请选择要执行的测试类型:\n"\n);
    System_printf ("1. I2C 阻塞模式测试 \n");
    System_printf (" \n");
    System_printf (">输入您的选择:");
    
    while (testSelection =0);
    
    /*验证选择:*/
    if (testSelection = I2C_TEST_Blocking_mode)
    中断;
    }
    
    if (testSelection = I2C_TEST_Blocking_mode)
    {
    System_printf ("调试:阻塞模式测试\n");
    RetVal = i2cBlockingModeTest();
    如果(RetVal =-1)
    MCPI_setFeatureTestResult ("阻塞模式测试"、MCPI_TestResult_FAIL);
    其他
    MCPI_setFeatureTestResult ("阻塞模式测试"、MCPI_TestResult_pass);
    }
    如果(RetVal < 0)
    {
    System_printf ("调试:I2C 从设备测试失败\n");
    }
    
    MCPI_setTestResult ();
    
    /*退出 BIOS */
    BIOS_exit (0);
    
    return;
    }
    
    //**
    *@b Description
    *@n
    * 这是单元测试代码
    *
    *@retval
    *的入口点 不适用。
    */
    int32_t main (void)
    {
    Task_Params 任务参数;
    SoC_Handle 等式手柄;
    SoC_Cfg 等配置;
    内部32_t 错误代码;
    
    /*初始化 ESM:不要像 TI RTOS 那样清除错误*/
    ESM_INIT (0U);
    
    /*初始化 SOC 配置:*/
    memset ((void *)等配置、0、sizeof (SOC_Cfg));
    
    /*填充 SOC 配置:*/
    socCfg.clockCfg = SOC_SysClock_init;
    
    /*初始化 SOC 模块:此操作在应用程序启动后立即完成
    以确保 MPU 配置正确。 *
    socHandle = SOC_init (&socCfg、&errCode);
    if (socHandle ==空)
    {
    System_printf ("错误:SoC 模块初始化失败[错误代码%d]\n"、错误代码);
    返回-1;
    }
    
    /*初始化任务参数。 *
    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = 6*1024;
    Task_create (Test_initTask、&taskParams、NULL);
    
    /*启动 BIOS */
    BIOS_start();
    返回0;
    }
    

    原始文件也随附 在 e2e.ti.com/.../0456.slave.c 上

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

    拉克斯米、

      我已请求我们的软件团队专家对此进行审核。  

    谢谢、此致、

    CHETHAN Kumar Y.B.

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

    您是否能够解决此问题或是否仍需要支持?

    此致
    尼廷
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因缺少活动而关闭此问题。 如果需要更多支持、请创建新主题。

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