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.

[参考译文] TMS320F28069M:I2C 读取数据位移

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1529695/tms320f28069m-i2c-read-data-displacement

器件型号:TMS320F28069M

工具/软件:

在这里、我们使用 instaspin 解决方案旋转电机、然后添加 I2C 通信以与 VL53L4CD 传感器进行通信。 读取数据位移时出现问题。

按照以下步骤进行发送和接收

第 1 步:  写入地址:0x29 ControlData:01 0F

第 2 步:  读取  地址:0x29 ControlData:EB AA

第 3 步:  写入地址:0x29 ControlData:00 E5

步骤 4.  读取  地址:0x29 ControlData:03 00

第 5 步:  写入地址:0x29 ControlData:00 2D 00

根据我的程序定义、EB AA 的值应返回到 ReadData[0]、且值 03 00 应返回到 ReadData[1]

但结果如下

ReadData[0]= 03 00

ReadData[1]= EB AA

有什麼問題嗎?μ s

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

    尊敬的 ChiHxiang:

    感谢您在 E2E 论坛上联系我们。 由于您看到了预期值并从范围进行了验证、因此您的硬件配置看起来是正确的。 我看到在你的示波器镜头上,你已经阅读了 EBAA 0300  EBAA 0300 的顺序。 我想知道代码中是否存在导致读取 EBAA(索引 2)的第一个实例被丢弃或未使用的问题。 那么在 ReadData 缓冲区中实际看到的是索引 4 和索引 7。

    是否有办法发送不会从目标器件重复的数据?

    您的代码轮询还是基于中断? 您能否检查 FIFO 是否溢出? 您是否曾经丢弃读取 FIFO 中的任何数据?

    此致、

    彼得

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

    您好、Peter


    感谢您的回复、我使用轮询与传感器进行通信、并使用 I2C 查询传感器的 ID 和固件版本。 传感器似乎为我提供了正确的信息。(没有遗漏的响应)


    我已经在我的程序中确认,只有屏幕截图中显示的区域使用 ReadData[0]和 ReadData[1]。 我只使用它们接收传感器响应的值、并且不会丢弃 ReadData[0]和 READ[1]。


    如何知道 FIFO 是否溢出? 是否通过检查 i2c 是否正忙来实现? 我仅在发送先前的数据后发送下一个数据 (bit.stp = 0)


    我找到了一种方法来防止接收到的数据移动。 接收开始后、增加 200 个计数的等待时间。 我怎么知道这一次? (我认为数据还没有准备好,所以出现了这种奇怪的现象。 由于查询和读取操作必须在电机运行时执行、因此增加等待时间可能会导致电机控制不平稳。 我希望尽量减少这种延迟。


    此致、
    CHIHSIANG

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

    您好、Peter

    我刚刚发现、如果移除用于测试的 56 个引脚、原来的 200 个计数将不足以满足需求、需要增加到 400 个计数。 原因是什么?

    此致、

    CHIHSIANG

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

    尊敬的 ChiHxiang:

    [报价 userid=“659198" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1529695/tms320f28069m-i2c-read-data-displacement/5885200 #5885200“]

    如何知道 FIFO 是否溢出? 是否通过检查 i2c 是否正忙来实现? 我仅在发送先前的数据后发送下一个数据 (bit.stp = 0)

    [/报价]

    由于您正在轮询、因此这意味着您应该在发送数据时读取数据以结束方式结束。 因此、您可以尝试配置 FIFO 中断、将其设置为超过当前读取的接收数据数量的特定 FIFO 级别。 如果触发 FIFO 中断、表明 FIFO 接收的数据多于预期数据、 我认为情况可能不是这样、但最好进行调试。

    由于查询和读取操作必须在电机运行时执行、因此增加等待时间可能会导致电机控制不平稳。 我希望尽量减少这种延迟。

    影响控制环路肯定不是最佳选择。 出于您的目的、您需要多长时间读取传感器数据、传感器信息是在电机控制环路中使用还是用于其他目的? 如果器件响应时间过长、您可能会将数据读取延迟到下一个轮询周期。 可以使用 FIFO 来存储上一个写入操作的数据

    此致、

    彼得

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

    您好、Peter

    我希望读取速度超过 250Hz。 我将对其进行修改、以便在下一个轮询周期中读取数据。

    我目前在读取前清除 FIFO 数据、以确保不会收到错误的信息。

    此致。

    ChiHxiang

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

    您好、Peter

    在这里、我参考您的建议并在下一个轮询周期中读取数据。 我可以成功读取 ToF 传感器传输的值。 谢谢你。

    此致、

    ChiHxiang