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.

[参考译文] MCF8329A:有关 I2C 通信缓冲器准备时间的问题

Guru**** 2393725 points


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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1449024/mcf8329a-question-about-i2c-communication-buffer-preparation-time

器件型号:MCF8329A

工具与软件:


大家好、我目前使用 MCF8329AQ1进行开发、在 I2C 通信期间会遇到问题。 让我逐步解释一下情况:

  1. 阅读 GATE_DRIVER_FAULT_STATUS 我创建并发送了寄存器(0xE0) GateDriverFaultStatusReadReq 如附加图像中所示。
    (任务完成一次)
  2. 在中收到了响应 GateDriverFaultStatusReadBuffer .
    (任务完成一次)
  3. 阅读 CONTROLLER_FAULT_STATUS 我创建并发送了寄存器(0xE2) ControllerFaultStatusReadReq 如附加图像中所示。
    (任务完成一次)
  4. 在中收到了响应 ControllerFaultStatusReadBuffer .
    (任务完成一次)
  5. ALGO_DEBUG1 寄存器(0xEC)、我解析并写入目标速度值、然后发送它。
    (任务完成一次)

我实现了这一过程、以2ms 的任务持续运行、但与驱动器的 I2C 通信会间歇性地出现故障。 一次只启用一个读取或写入操作时、在通信之间添加大约1.1ms 的延迟即可成功运行。 然而、在同时启用多个寄存器的情况下进行测试时、时序似乎会有所不同。

我怀疑该问题可能是由于缓冲器准备时间不足而造成的。 数据表缺少关于内部缓冲器的足够信息。 我想了解内部缓冲器所需的准备时间。 您能否提供任何相关材料或详细解释此事?

谢谢你。

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

    您好!

    感谢您的提问、我们建议 I2C 帧之间存在大约15ms 的延迟、以实现可靠的通信。

    谢谢。此致、

    Sachin S.

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

    我有疑问。

    引入15ms 延迟似乎太长。 如我所附的图片中所示、您是否建议我应该配置一个缓冲区、发送一个请求、等待15ms、然后执行一个读取操作?

    如果是、当我想在读取另一个寄存器之后立即读取一个寄存器时、是否也应该在读取和下一次发送之间等待15ms? 下面我将介绍运行顺序以便进行说明:

    1. 发送(请求)
    2. 15毫秒延迟
    3. 读取(缓冲器)
    4. 15毫秒延迟
    5. 发送(另一个请求)
    6. 15毫秒延迟
    7. 读取(缓冲器)
    8. ...

    如果我按照这种方法,读取2-3段数据将会花费大约30ms。 这是正确的方式吗?

    此外、我将使用64位选项执行一个任务、以一次读取附加的寄存器(0xE0、0xE2)。 在本例中、我是否应该等待30ms 而不是15ms? 序列是否需要遵循以下模式:
    发送→30ms 延迟→读取→30ms 延迟→发送?

    请你澄清。

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

    您好!

    仅对于器件、需要15ms 来获取另一个命令。 例如:

    发送(请求)-->等待15ms -->发送(另一请求)。

    在这种情况下、您可以将接收到的数据存储在 FIFO 中?  

    如果我理解您的实施是否正确、请告诉我。

    我将返回给您关于64位选项的问题。

    谢谢。此致、

    Sachin S.

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

    感谢您发送编修。

    根据您提到的情况、似乎只有在完成接收操作之后和访问另一个寄存器之前才需要15ms 的延迟。 从发送接收请求到实际接收响应之间应该有多长时间的延迟? 目前、我使用的延迟约为5ms、但您能告诉我 TI 建议的延迟吗?

    谢谢你。

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

    您能告诉我您运行的 I2C 的数据速率是多少?

    谢谢。此致、

    Sachin S.

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

    即100kHz

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

    好的、

    "实际接收到响应"是指直接将完整数据字节接收到缓冲区中? 如果是、根据我的计算结果、这个时间不应超过2ms。 但 TI 在这里没有建议、因为它取决于您正在运行的时钟频率。

    如果我的假设是错误的、请纠正我。

    谢谢。此致、

    Sachin S.

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

    感谢您发送编修。

    我将请求和接收之间的间隔设置为大约2–5ms、将连续请求之间的间隔设置为15ms、现在通信运行良好。

    但是、我有一个问题:是否有可用于复位整个系统的引脚? 例如、在驱动器的 I2C 无响应的情况下、是否有办法控制特定引脚来恢复该引脚?

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

    您好!

    Sachin 离职直至1月2日 我在这里补充一点意见。 为了复位器件、器件需要通过将器件配置为 SLEEP 模式并下拉 SLEEP/WAKE 引脚来进入睡眠模式。 另一个选择是下电上电。

    此致、

    制造商