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.

[参考译文] MCT8316Z:使用 SPI 写入 MCT8316Z0R 时出现意外结果

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1485917/mct8316z-unexpected-results-using-spi-to-write-to-mct8316z0r

器件型号:MCT8316Z
主题中讨论的其他器件: DRV8316

工具与软件:

我正在开发一个原型、以将 MCT8316Z0R 集成到伺服应用中。  为了确保能够使用 SPI 正确配置 MCT8316Z0R、我有一个非常简单的设置、即为 MCT8316提供 VM/PGND (8.4V)、nSLEEP 保持高电平、nFAULT 保持高电平、并且按照数据表连接降压稳压器和电荷泵。  SPI 连接到 Arduino 处理器、其 SPI 设置为5MHZ 时钟速率、时钟极性0和时钟相位1。

首先、我将03h 写入控制寄存器1以解锁寄存器。  此步骤的日志如下:

解锁寄存器(控制寄存器1 (偏移3h))
写入偏移3输出数据字0 000011 0 00000011返回00000000 00000000
读取控制寄存器1 (偏移3h)
读取偏移3输出数据字1 000011 0 00000000返回00000000 00000011

这表明写入和读取工作正常。  状态寄存器2显示"电荷泵欠压"故障、因此我写入控制寄存器2A 以清除故障:

读取状态寄存器2 (偏移2h)
读取偏移2输出数据字1 000010 1 00000000返回00000000 10001000

清除故障(C2A (偏移4))
写入偏移4输出数据字0 000100 0 00000001返回00000000 01100000

读取状态寄存器2 (2)
读取偏移2输出数据字1 000010 1 00000000返回00000000 00000000

然而、在这个写入后、所有控制寄存器返回0:

检查控制寄存器复位值->
读取 C2A (4)
读取偏移4输出数据字1 000100 1 00000000返回00000000 00000000
返回值为十六进制0
读取 C3 (5)
读取偏移5输出数据字1 000101 0 00000000返回00000000 00000000
返回值为十六进制0
读取 C4 (6)
读取偏移6输出数据字1 000110 0 00000000返回00000000 00000000
返回值为十六进制0
读取 C7 (9)
读取偏移9输出数据字1 001001 0 00000000返回00000000 00000000
返回值为十六进制0

如果我没有清除故障、则读取上述寄存器会返回大多数合理的复位值:

检查控制寄存器复位值->
读取 C2A (4)
读取偏移4输出数据字1 000100 1 00000000返回00000000 01100000
返回值为十六进制60
读取 C3 (5)
读取偏移5输出数据字1 000101 0 00000000返回00000000 01000110
返回、采用十六进制46
读取 C4 (6)
读取偏移6输出数据字1 000110 0 00000000返回00000000 00010000
返回值为十六进制10
读取 C7 (9)
读取偏移9输出数据字1 001001 0 00000000返回00000000 00000001
返回值、采用十六进制1

我还会注意到、我无法生成任何 SPI 故障。  我曾尝试使用各种故障 SPI 结构(地址错误、奇偶校验错误)、但无法在状态寄存器中触发故障。

最后、如果未在上述第一步中解锁寄存器、则所有写入都会返回复位值并且不会观察到任何变化。  如果你能提供一些见解,我会非常感谢,因为这是相当令人沮丧。

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

    Andrew、您好!

    我们将对此进行深入探讨并回复您。

    描述看起来很正确、我将再次介绍详细信息以找出任何位问题。

    谢谢、此致

    Venkatadri S.

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

    感谢 Venkatadri -非常感谢。

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

    Andrew、您好!

    默认情况下禁用 SPI 故障报告。 我们需要使其能够报告故障。

    谢谢、此致

    Venkatadri S.

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

    您好 Venkatadri -感谢您的响应。  如何 启用 SPI 故障报告?  我看不到它的控制寄存器设置。 在 MCT8316Z 数据表(2021年11月修订版)的第3页上、提到了"SPI 故障配置"(2个奇偶校验、时钟和地址设置)、但数据表中唯一的另一个引用是状态寄存器(寄存器0中的 SPI_FLT 和 SPI_PARITY、寄存器2中的 SPI_SCLK_FLT、SPI_ADDR_FLT)中的故障位、这两个位都是只读的(根据文档)。  如果我错过了什么,道歉。

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

    Andrew、您好!

    感谢分享这些细节、我忘了提及该位 SPI_FLT 保留在 MCT8316Z 中。

    地址0x5的位1是 SPI_FLT、可以在 DRV8316数据表中看到此信息。

    在读取时、该位的位置显示为1。

    1表示已禁用、0表示启用。

    谢谢、此致

    Venkatadri S.

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

    谢谢 Venkatadri。  我从 DRV8316数据表中可以看到、需要清除 SPI_FLT_REP、尽管它未出现在寄存器0x5的文档中。  无论如何、我明天将尝试这项工作、并报告我的调查结果。  再次感谢您的帮助。  此致。

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

    当然、我将等待您的测试结果。

    谢谢、此致

    Venkatadri S.

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

    您好、Venkatadri。  SPI_FLT_REP 设置按预期工作、并正确报告 SPI 故障。  不过、该问题最终变为控制寄存器2A (偏移4)中 SDO_MODE 的值。  MCT8316的数据表显示该位的复位值为0h (开漏模式下的 SDO)、因此我复制了该设置。  但是、寄存器中的实际复位值为1h (推挽模式)- DRV8316也显示了复位值。  当我更改该寄存器的设置以反映该复位值时、一切都开始正常工作。  感谢您在这方面的帮助-也许可以更新 MCT8316数据表。  此致。