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.

[参考译文] TMS320F28388S:I2C 读取错误数据

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/907412/tms320f28388s-i2c-read-the-wrong-data

器件型号:TMS320F28388S

您好、专家、

我的客户正在为 Epprom 使用 F28388 I2C、他们面临读取错误值的问题。

他们将数据0xA5写入 地址0x00、如下所示、波形看起来是正确的。

高地址0x00的波形。

2.低地址0x00的波形。

写入 EEPROM 的数据0xA5的波形。

但当他们读取地址0x00的数据时、发现数据不正确、全部为0xff。 波形如下所示:

对此有任何建议吗? 以下是他们使用的代码:

e2e.ti.com/.../i2c_5F00_ex1_5F00_slave_5F00_receive_5F00_int.c

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

    强、

    从您的帖子中、我相信客户正在尝试在 EEPROM 地址0x0写入0xA5。 对吧?

    根据波形、它看起来像是从器件(在本例中、EEPROM 没有响应)。 我这么说是因为它看起来像是 I2C 主设备正在接收 NACK。

    当您尝试将0xA5写入 EEPROM 地址0x0时、波形将是这样的。

    我的 EEPROM 从地址为0x50。

    此致、

    曼诺伊

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

    您好 、Manoj:

        我使用此 CM 内核 I2C、我的问题:

    1 μ A 为主器件、SLAVE_ADDRESS 为0x50、I2C_setSlaveAddress ( I2C0_BASE、SLAVE_ADDRESS、I2C_MASTER_WRITE)输入?(使用280049 I2C、SALve 地址为0x50)

    2、我使用 CM 内核 I2C、如何获取 C28 (CPU1) ex2_EEPROM 或外部 EEPROM 演示的示例? 我不知道如何使用 cm i2c API。  

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

    Youbing bao、

    您是否正在尝试将 F28388D.CM-I2C (主器件)与 F280049.I2C (从器件)相连? 当您谈论 EEPROM 和 F280049.I2C (从器件)时、这会令人困惑。

    因此、请确认您正在尝试实现的目标。

    此致、

    曼诺伊

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

    您好 Manoj,

    客户正在使用 具有 EEPROM 的 F28388D.CM-I2C (主器件)、并且从发布的波形中应该有来自 EEPROM 的 ACK 信号。

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

    最好知道 EEPROM (从器件)正在从主器件确认 I2C 字节。 从示波器快照可以看出从器件地址0x50 +写入位+第一个字地址已成功发送和确认。 大多数 EEPROM 都要求发送两个8位地址字节、如下所示。 在您的情况下、我认为 EEPROM 希望主器件发送第二个地址字节、并将数据编程到 EEPROM 地址。 由于缺少 EEPROM、因此无法读取正确的字节。

    此致、

    曼诺伊

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

    您好 Manoj,

    客户已修复此问题、但他们面临另一个问题、即当编译器优化级别打开时、会出现以下问题、这将错过发送高地址的机会、并且未在高地址读取数据。

    下面 是包含高地址和低地址以及相关数据0x05和0x5A 的正常波形。

    以下是编译器优化级别开启时出现读取数据0x05缺失问题的波形。

    单步运行发现编译器优化级别打开时没有删除函数、代码也没有问题。

    此外、如果他们在下面添加一些延迟代码、即使优化级别处于开启状态、也可以解决该问题。

    问题是函数 I2C_setMasterConfig 和 while (I2C_isMasterBusy (I2C0_BASE))之间是否存在任何时序要求?

    我们认为、当优化级别开启时、从 I2C_setMasterConfig 到 while (I2C_isMasterBusy (I2C0_BASE))的运行时间会减少并导致问题、在增加一点延迟后、此问题会得到解决。

     

     

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

    强、

    我需要与设计团队核实我们是否有任何最小时序要求。

    我想知道 while (I2C_isMasterBusy (I2C0_BASE))是否在 I2C_setMasterConfig 函数之前执行。

    1. 您是否检查了组装代码以查看发动机罩下面发生了什么?
    2. 选择的优化级别是多少?
    3. 在执行 while (I2C_isMasterBusy (I2C0_BASE))之前、所需的最小 delay_clk 是多少?
    4. 您是否能够出于调试目的共享源代码 CM_I2C?

    此致、

    曼诺伊

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

    1. 您是否检查了组装代码以查看发动机罩下面发生了什么?

    2. 选择的优化级别是多少?  -->级别1
    3. 在执行 while (I2C_isMasterBusy (I2C0_BASE))之前、所需的最小 delay_clk 是多少?
      -->不知道所需的最小 delay_clk 值是多少,但 在 I2C_setMasterConfig 和 while (I2C_isMasterBusy (I2C0_BASE))之间添加了一个非常小的延迟,可以解决这个问题,如 counter =10,while (counter--!=0) delay 函数。
    4. 您是否能够出于调试目的共享源代码 CM_I2C?

    -->是的,您可以在 F28388上重现此问题。

    e2e.ti.com/.../CM_5F00_I2C_5F00_EEPROM-POLL-OK.rar

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

    我已请求设计团队研究此问题。 请在接下来的几周内收到我们的回复。

    此致、

    曼诺伊

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

     优化被打开时、您能否检查 while (I2C_isMasterBusy (I2C0_BASE))函数在 I2C_setMasterConfig ()函数前是否正在被执行?

    此外、请在启用优化的情况下共享反汇编窗口的快照。

    此致、

    曼诺伊

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

    我早就没听到过你的反馈。 客户是否对解决方法满意?

    我可以关闭此主题吗?