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.

[参考译文] TMS320F28069:I2C 读取的开始速度过快

Guru**** 2578945 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/914648/tms320f28069-i2c-reading-happen-too-fast-at-the-start

器件型号:TMS320F28069

我在100us 的循环中以10个字节读取 I2C 接收寄存器。 但每次我开始读取时、只要写入地址字节、前三个字节就会过快。 其余字节按预期相差100us。
 我的 I2C 频率为300k。  这是逻辑分析仪输出。
顶部的一个是 SCL 线路、第二个是 SDA 线路。
数据字节用蓝色方块表示、其中包括地址字节、R 在蓝色方块顶部表示。
底部的平方线显示发送地址字节后每个读取周期的开始。
您可以看到、在读取循环开始之前、两个字节位于读取循环开始之前。
为什么会发生这种情况。

这是读取开始代码
                  if (I2caRegs.I2CMDR.bit.STP==0){
               I2caRegs.I2CSAR =地址;
               I2caRegs.I2CCNT =数据长度;
               I2caRegs.I2CMDR.All=0x6C20;



这是数据读取循环代码

           if (I2cRegs.I2CSTR.bit.RRDY=1){
               GpioDataRegs.GPATOGGLE.bit.GPIO24=1;//这用于监视循环的运行。
               recevearray[(*v).dataReceveIndex]=I2caRegs.I2CDRR;
               (*v).dataReceveIndex++;
           }

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

    尊敬的 Damith:

    您能进一步解释一下您的问题吗? 我不清楚。 根据您的波形、在 SDA 线上传输1、目的是吗? 如果不是、您希望看到什么?

    F2806x 是您的设置中的主器件还是从器件?

    最棒的

    Kevin

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

    大家好、Kevin

    此问题在主接收器模式下发生。

    实际上、这些是0xFF 及其有意的。 I2C 总线上显示的数据正是我所期望的。 问题是它收到的时间戳。

    一旦我将 I2C 模块配置为接收数据、它会在我开始读取之前接收到两个数据字节。 但我在100us 后开始读取接收寄存器。 随后的读数也在 100us 环路中完成。  但是、正如您看到的、前两个字节在100us 间隔之前接收。 但它会在100us 内读取数据。 底部平方线中的边沿显示了100us 的读取循环执行。

    我仅使用配置器件对其进行了测试、而未读取 I2C 接收寄存器。 相关代码如下所示。  结果相同。 一旦从器件地址被发送、两个字节就会被接收。 下图显示了这种情况。

    为什么在我开始读取之前会出现两个字节。 不同的从器件、结果相同。

           if (I2caRegs.I2CMDR.bit.STP=0)
               {
               I2caRegs.I2CSAR =地址;
               I2caRegs.I2CCNT =数据长度;
               I2caRegs.I2CMDR.All=0x6E20;

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

    尊敬的 Damith:

    这里的波形似乎不匹配、因为您的原始帖子使用主控器件作为接收器(0x6C20)、而您的第二个帖子使用主控器件作为发送器(0x6E20)。 为什么这样做?

    I2C 还有一个4字节缓冲区、这可以是原始2-3个数据字节的源。  

    谢谢