我对定制板上的 DRV8847S 有一个非常奇怪的问题。 我在电路板上使用其中的3个器件、因此必须为每个器件设置地址。 当我第一次写入地址0x60 (默认地址)时、我永远不会像下面第一张图片中所示那样得到一个 ACK、并且时钟保持低电平。 经过一小段时间(< 1秒)后、总线卡在第二幅图中所示的模式中。 我一生都不知道为什么。 此外、当我写入总线上的另一个器件时、总线会"解卡"并成功写入/读取。 有人能提供一些见解吗?
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.
我对定制板上的 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。
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。
请仔细检查一下吗?
很高兴它能正常工作并理解您的观点。 我也必须考虑它。 我将向发展团队提供反馈。
如果您有任何其他问题、请告诉我。