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:实现具有7位寻址而不是10位寻址的 I2C 驱动器

Guru**** 2568585 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/641621/iwr1642boost-implementing-i2c-driver-with-7-bit-addressing-instead-of-10-bit-addressing

器件型号:IWR1642BOOST

您好!

我尝试通过 I2C 协议将 IWR 传感器作为从设备连接到 Arduino 板。 我正在使用 I2C 驱动程序。 Arduino 上用于 I2C 的线库仅支持7位寻址。 IWR 驱动程序表示它支持10位和7位寻址。

我使用 SDK 中 drivers/i2c/test/slave.c 单元测试示例中的大多数初始化代码(MMWAVE_SDK_01_00_00_05)。 当我将 I2C 驱动程序配置为使用10位寻址模式时、不会出现错误。 但是当我使用7位寻址模式进行配置时、会出现以下打印输出错误:

错误:I2C 控制集 XA 失败[错误代码-20001]

以下是初始化函数:  

int32_t I2CSlave_Init (void)
{
I2CSlave_handle i2cHandle;
I2CSlave_Params i2cParams;
内部32_t 错误代码= 0;
uint32_t ARG;

PlatformInit();

/*设置传输缓冲区*/
memset (&txProxObjData、0、sizeof (txProxObjData));

/*初始化 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");

/*以7位或10位地址模式配置 I2C 器件。 *
ARG = 1;
errCode = I2CSlave_control (i2cHandle,0,(void*)&arg);//第二个参数:0将寻址模式设置为7位,1将寻址模式设置为10位
如果(错误代码< 0)
{
System_printf ("错误:I2C 控制集 XA 失败[错误代码%d]\n"、错误代码);
返回-1;
}
//System_printf ("调试:通过 I2C 从机控制\n");

返回0;
} 

感谢你能抽出时间。  

Herman

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

    您的问题已分配给相应的工程师。 当可用时、它们应该会返回给您。 请注意、由于假期、回复可能会延迟。

    此致、

    Adrian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我已经解决了这个问题。

    我对 I2CSlave_control 函数第二个参数的描述有误。 第2个参数设置 CONTROL 命令、在我的例子中为 I2C_CMD_ADDR_MODE = 1、第三个参数分别通过0或1个整数设置7位或10位寻址。

    总之、调用函数以将 i2c 从器件设置为7位寻址的正确方法是

    ARG = 0;
    错误代码= I2CSlave_control (i2cHandle、I2C_CMD_ADDR_MODE、(void*)&arg);//其中 I2C_CMD_ADDR_MODE = 1