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.

[参考译文] DRV8847:I2C 通信不工作

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/970997/drv8847-i2c-communication-not-working

器件型号:DRV8847

我对定制板上的 DRV8847S 有一个非常奇怪的问题。  我在电路板上使用其中的3个器件、因此必须为每个器件设置地址。 当我第一次写入地址0x60 (默认地址)时、我永远不会像下面第一张图片中所示那样得到一个 ACK、并且时钟保持低电平。  经过一小段时间(< 1秒)后、总线卡在第二幅图中所示的模式中。  我一生都不知道为什么。  此外、当我写入总线上的另一个器件时、总线会"解卡"并成功写入/读取。 有人能提供一些见解吗?

  

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

    Katrina、

    您是否遵循数据表中概述的以下步骤:

    通过将所有连接器件的 DISFLT 位(IC2_CON 寄存器)写入1b、DRV8847S 器件型号配置为多从运行。 此步骤将禁用所有 DRV8847S 的 nFAULT 输出引脚、以避免主器件和从器件之间的任何竞态条件。

    •将三个器件(2、3和4)的 nFAULT 引脚(nFAULT2、nFAULT3和 nFAULT4引脚)拉至低电平、以释放从器件(器件-2、器件3和器件4)的 I 2C 总线。 现在、只有器件-1连接到主器件。

    •由于只有一个器件 DRV8847S (1)连接到控制器、因此、其从器件地址可从默认的0x60 (7位地址)重新编程为另一个唯一地址。

    •同样、通过结合 nFAULT 引脚、可将其他三个器件(器件2、器件3和器件4)的从器件地址(SLAVE_ADDR)按顺序重新编程为唯一地址。

    •当所有从器件地址被重新编程时、将 DISFLT 位写入0b (IC2_CON 寄存器)。 这将启用 nFAULT 输出引脚以进行故障标记。

    •所有 nFAULT 引脚被释放并且一个多从器件设置完成。 现在、可以使用新重新编程的地址访问所有连接的从器件。

    •在电源复位(nSLEEP)的情况下、应针对任何器件重复上述步骤。 。

    从示波器捕获中、看起来您正在执行读取操作。  对于写操作、地址之后的最后一位应该为0。   

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

    我知道、为了在一条总线上支持多个 DRV8847S 器件、需要数据表中说明的内容。  我的问题是、我无法写入它、周期。  此外、如果您查看下面标记的图像、您可以看到地址是 B1-B7、读/写位实际上是0、用于写入(W)、最后一个时钟脉冲应该允许器件通过将数据线保持在低电平来确认通信- 这是未发生的情况(NA=NACK)。

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

    Katrina、

    发送最后一个"W"位后、发送器是否释放总线?   

    https://www.ti.com/lit/an/slva704/slva704.pdf

    请参阅上面链接的应用手册的第2.3节。   

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

    是的--我对这个部件使用与对总线上其它部件一样的软件功能。  我能够成功地写入和读取除此器件之外的所有其他器件。

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

    好的、让我来探讨另一个可能的解释。

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

    还有几个问题可帮助您进行调试:

    1) 您是否将其他2个器件(2、3)的 nFAULT 引脚(nFAULT2、nFAULT3引脚)拉至低电平以释放从器件(器件-2、器件-3)的 I 2C 总线。 现在只有器件-1连接到主器件?

    2) 2) 如果无法正常工作、请尝试通过将 nSLEEP 引脚保持在低电平来将其他2个器件置于睡眠状态。   

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

    在尝试写入 IC2_CON 寄存器以禁用 nFault 功能后、我将三个器件中的两个器件的 nFault 拉为低电平-这不起作用、因为我无法成功写入 IC2_CON 寄存器。  我没有尝试让其他两个设备入睡——这是一个很好的尝试方法。  明天我会再试一次。  谢谢!

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

    Katrina、

    谢谢...期待结果。

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

    我仍然有同样的问题。  不过我有一个问题-- nFault 引脚到底是如何与 I2C 总线交互的?  例如、如果我没有对寄存器进行写操作以禁用 nFault 功能、但无意中将 nFault 拉低、会发生什么情况?  I2C 总线是否不工作?  目前、nFault 引脚为低电平、但没有任何器件连接到输出、因此我希望旧的检测功能将该引脚拉低。 我的目标是让器件 ACK 起始地址0x60。  然后、我可以从那里获取它、但我不理解它为什么不生成 ACK。  示波器波形看起来不错、我在 SDA 和 SCL 引脚上测量了 I2C 总线、以验证它是否到达 IC。  

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

    非常有趣的观察。  当 nFOUT 为低电平时、器件从 I2C 总线中释放。  

    从数据表中:

    '故障指示引脚。 该引脚在出现故障情况时被拉至逻辑低电平。 这个开漏输出需要一个外部上拉电阻器。 该引脚还用作 DRV8847S 器件的输入引脚、用于释放 I2C 总线"

    这通常在外部完成、MCU I/O 在地址重新编程期间作为输出引脚运行、然后用作监控故障状态的输入。   

    您能否通过连接负载来测试该理论、以避免旧负载?  功率电阻器或电机将执行的操作。   

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

    我将2个功率电阻器连接到一个器件的输出端、将其他2个器件置于睡眠模式、并确保我要与之通信的一个器件未出现故障且未处于睡眠模式(我直接测量了所有器件上的引脚以确定这一点)。  我还确保组装室放置了正确的部件--标记为8847SPW,所以它是正确的。  我仍然遇到同样的问题--示波器波形与我原来的帖子中的波形完全相同。  我100%确定总线是否正常工作、因为我可以成功地与总线上的所有其他器件进行通信。  我能够使用分立式输入使器件正常工作、因此我还知道电源设置正确。  有趣的是,在这个部件的数据表的方框图中,我注意到 SDA 线路上只有一个外部上拉电阻器,它显示了一个 SCL 上的内部下拉电阻器--这是准确的吗?  根据 I2C 标准、应该在两条线路上都有一个外部上拉电阻(我确实有)、但我对 SCL 线路上的内部下拉电阻器感到好奇。

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

    让我在我的结尾再多带一些人看看他们是否有任何想法。   

    在 EVM 上、每条线路上都有一个10k 上拉电阻器... SDA 和 SCL。  我不确定内部下拉电阻、但它似乎不会以负面的方式影响信号电平。

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

    一位同事再次查看了示波器捕获、似乎地址可能不正确。   

    位1-7似乎是0110000 = 0x30。  对于地址...1100000、此值应为0x60。

    或者、如果包含 R/W 位、则发送的数据应为0xC0。   

    请仔细检查一下吗?   

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

    是的、就是这样-我看到的大多数数据表都说明了地址、假设读/写位是0。  该数据表非常令人困惑。  可能添加实际位会有所帮助?  我在下面附上了一个示例。  非常感谢您的帮助。

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

    很高兴它能正常工作并理解您的观点。  我也必须考虑它。  我将向发展团队提供反馈。

    如果您有任何其他问题、请告诉我。