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.

[参考译文] TMS320F28379D:I2C 读取问题

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/693004/tms320f28379d-i2c-read-problem

器件型号:TMS320F28379D

您好!

我正在尝试从从处理器读取数据、每当从处理器接收到来自主处理器的时钟时、它都会发送2字节的数据。

28379D 处理器在缓冲区中获取数据、但  在 I2caRegs.I2CCNT = 2后不发送 STOP 命令;变为0。 这是传输的示波器图像、但时钟保持低电平、因为停止条件未发送。

以下是我的初始化代码:

I2caRegs.I2CPSC.all = 19;//预分频器-模块时需要7-12MHz
I2caRegs.I2CCLKL = 495/2;//注意:必须为非零
I2caRegs.I2CCLKH = 495/2;//注意:必须为非零
I2caRegs.I2CIER.ALL = 0x24;//启用 SCD 和 ARDY __interrupts
I2caRegs.I2CSAR.ALL = 0x0044;//

 I2caRegs.I2CFFRX.ALL = 0x6000;

例程:

I2caRegs.I2CMDR.ALL = 0x6C20;//0x2E20;

while (I2caRegs.I2CFFRX.bit.RXFFST <2){}

for (j =0;j < 2;j++){

data[j]= I2caRegs.I2CDRR.all;

请告诉我应该怎么做? 从器件将始终发送两个字节的数据。

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

    在以下条件下、SCL 将保持低电平:
    •当在从接收器模式中检测到溢出条件(RSFULL = 1)时。
    •当检测到下溢条件(XSMT = 0)时、处于从发送器模式。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将作为双核与主核配合使用!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    I2CSTR.BB、I2CSTR.SCD 和 I2CMDR.STP 位的状态是什么?

    另外、请确认 I2CMDR.RM 位= 0 (重复模式被禁用)?

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

    此外、确保在给出起始位之前定义了 I2caRegs.I2CCNT。 如果 I2caRegs.I2CCNT 未定义、将不会生成停止位。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    I2CSTR.BB = 1、I2CSTR.SCD = 0。

    我认为从器件侧可能存在将时钟保持在低电平的问题。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否收到了从器件的 ACK?

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是、对于第一个事务、它可以正常工作。 但对于第二个事务、它保持时钟低电平。
    如果我在从主设备到从设备的两个事务之间设置1000us 的延迟、那么它可以正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    根据您的配置、它显示您已将 I2C 配置为仅主接收器。 我没有看到 I2C 配置为从设备。 我缺少什么吗?

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

    通信内容如下:
    双核主设备
    MSP 从设备

    while (1){
    交易:
    双核充当主发送器、MSP 将充当从接收器
    3个字节的数据之后
    双核充当主接收器、MSP 将充当从发送器
    发送3字节数据

    延迟1000微秒



    如果我消除延迟、则时钟变为低电平
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    萨加尔

    好的。 感谢您的澄清。

    根据您的 I2C 数据吞吐量、从器件接收3个字节需要多长时间? 1000us 延迟最有可能帮助您在转至下一个事务之前成功接收所有3个字节。

    您是否已经尝试等待 I2CFFRX.RXFFST >=3? 这将允许您删除1000us 延迟。

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

    我还有一个问题!
    如果我想以这种方式从从从器件读取事务:

    发送地址0x00
    写入命令寄存器0x3D
    发送8个时钟脉冲!

    如何做到这一点?

    代码中
    我写入地址
    I 写入0x3D
    我发送停止命令(我不希望这样做)
    我发送地址(我不想再发送)
    然后发送8个脉冲来读取数据?

    如何使用 RM 模式实现这一点、我对如何解决这一问题有点困惑?

    谢谢

    我再次在这里发布了它:

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是重复的线程。 我们将在原来的主题中恢复讨论。

    e2e.ti.com/.../696088

    此致、
    曼诺伊