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.

[参考译文] TMDS243EVM:I2C 读写 API 函数

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1497611/tmds243evm-i2c-read-write-api-function

器件型号:TMDS243EVM

工具/软件:

我正在使用 I2C LLD API 函数访问 EVM 板上的 I2C 端口。

以下的读取函数时会发生什么。 可以从器件获取良好的 I2C 数据。

然后尝试在读取代码之前使用写入函数来实施写入/读取操作、以验证数据是否已写入器件。

但它始终在读取器件时提供所有0结果、即使 I2C 句柄在写入和读取之间进行了初始化。

代码如下所示。

/*获取设备地址*/
deviceAddress = 0x74;

状态= I2C_LLD_PROBE (gI2cLldHandle0、deviceAddress);

IF (STATUS == I2C_STS_SUCCESS)


    
     DebugP_log ("[I2C] Device found in device address 0x%02x \r\n"、deviceAddress);
}

/*初始化 I2C_ExtendedParams 对象*/
extendedParamsTx.deviceAddress = deviceAddress;
extendedParamsTx.buffer = txBuf;
extendedParamsTx.size = 1U;
extendedParamsTx.extensionSA = false;

txBuf[0U]= 0x20;
/*Write to I2C*/
状态= I2C_LLD_WRITE (gI2cLldHandle0、&extendedParamsTx、I2C_WAIT_FOREVER);
IF (STATUS == I2C_STS_SUCCESS)

  DebugP_LOG ("[I2C] WRITE DONE\n");
}

gI2cLldHandle[0]->Clock_uSleep (delayMsec * 1000u);

/*初始化 I2C 句柄*/

I2C_LLD_INIT (gI2cLldHandle0);


extendedParamsRx.deviceAddress = deviceAddress;
extendedParamsrx.buffer = rxBuf;
extendedParamsRx.size = 0u;
extendedParamsRx.extensionSA = false;

/*从 I2C 读取多个寄存器的循环*/

对于(uint8_t i = 0;i < 8;i++)

  rxBuf[0U]=(uint8_t)(0U);

  extendedParamsRx.size = 1U;
  状态= I2C_LLD_READ (gI2cLldHandle0、&extendedParamsRx、I2C_WAIT_FOREVER);

  /*打印结果*/

  IF (STATUS == I2C_STS_SUCCESS)
  {
     DebugP_log ("[I2C]样本%u:%u\r\n"、i、rxBuf[0]);
  }


gI2cLldHandle[0]->clock_uSleep (delayMsec * 100u);
}

它看起来写入函数不成功。

我认为这是非常基本的操作。

您能否通过分析代码来了解写入和读取是否需要采取任何措施?

请分享一些指导。

谢谢。

谢谢&谨致问候

郝(王浩)

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

    您好、

    您使用的是哪个 MCU+SDK 版本?

    Unknown 说:
    它看起来写函数不成功。

    您使用的是哪个 I2C 实例? 此外、您还可以与我们分享 example.syscfg 文件。

    此致、

    Tushar

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

    Tushar

    我使用的是 am243x_09_02_00_50版本。

    我已基于 i2c_led_read_write_lld 创建了程序。  syscfg 为 attachment.e2e.ti.com/.../1581.example.syscfg

    e2e.ti.com/.../1581.example.syscfg

    我发现读取 API 只能提供来自第一个 I2C 读取操作的正确数据。

    第二次读取将始终为我提供所有0结果。  

    根据我对 I2C 标准协议的理解、第一个字节应为7位器件从器件地址和1位确认、后跟寄存器地址、然后是读取/写入字节。

    但看起来、I2C 读取/写入 API 只是通过从器件地址和读取/写入数据执行 I2C 访问、同时跳过寄存器地址。

    您能否告知哪些 API 能够定义寄存器地址以执行天才 I2C 访问?

    *

    谢谢。  

    谢谢& 谨致问候

    郝(王浩)

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

    您好、

    您使用的是哪个 I2C 器件? 在上面的代码中、我可以看到您使用0x74作为器件地址、但在 I2C_LED_READ_WRITE_LLD 示例中、使用0x60作为器件地址。

    此致、

    Tushar