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.

[参考译文] DAC161S997:与 MCU 的 SPI 链路故障排除

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/910359/dac161s997-troubleshooting-spi-link-with-the-mcu

器件型号:DAC161S997

团队、

客户提出的有关 DAC161S997与 DAC161S997EVM (未焊接 MSP430)上的 STM32 MCU (STM32l476RG)结合使用的问题。

SPI 是根据文档进行配置的、但在任何情况下、它们都没有观察到 DAC 和 MCU 之间的正确 SPI 通信链路(也检查了数据表中图14中提到的内容)。  

是否需要研究任何特定的问题来解决此问题? 他们最终希望通过 USART (同步 UART)从 STM32进行通信。  

谢谢。

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

    您好 Bart、

    更确切地说、他们在 MCU 和 DAC 之间看不到任何 SPI 信号? 或者、他们是否看到通信正确且 DAC 没有响应?

    最后、我认为最好的起点是共享 EVM 原理图、该原理图已标注为显示其新连接。  通常、这类问题是由两个系统连接不正确或其中一个系统未正确通电导致的。  这很难使用精确的原理图进行调试。

    谢谢、

    Paul

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

    尊敬的 Paul:

    感谢您的反馈、我已经离线与您分享了原理图。

    DAC 在 SPI 通信上做出响应、但不符合数据表中描述的协议。

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

    您好 Bart、

    我不确定您说" DAC 正在对 SPI 通信做出响应、但不符合数据表中所述的协议。"时的意思。  您能否分享您看到的内容的范围截图? 此外、请务必记住、DAC161是环路供电型器件、因此需要为 L+和 L-提供浮动电源环路。

    我提到这一点是因为我在您的原理图中没有看到新 MCU 和器件的接地端。  MCU 的接地端必须连接到 DAC161的 COM 接地端、并且该接地端不应连接到环路的 L-节点、这一点很重要。  COM 接地电位始终高于 L-。  如果环路电源不悬空、L-有可能被连接至与微控制器一样的接地(例如、接地、通过 MCU 的 USB 电源)。   

    谢谢、

    Paul

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

    尊敬的 Paul:

    我们还没有相应的范围(可能会得到)、但要先解释一下、请查看图 14在数据表的第二部分(第7、第8和第9字节)、我们是否应该接收到与第4、第5和第6部分相同的数据?

    如果我们将数据保存到 DACCODE 寄存器、在下一个步骤中从该寄存器读取数据(分别增加和减少写入的值)、我们会在读取中看到类似的效果: 在第二个数据包中(如图14所示读取数据时)、该数据包中的前两位完全不正确、而第三个数据包根据 PRV 中写入的数据增加或减少。 步骤。  

    电路板和 STM32通过 COM 而不是 L-接地(原理图中未显示)。 此电路板由9Vdc 电源供电、由 L+和 L-供电。  

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

    他可能只是软件问题吗? 您是否已将 SPI 主器件配置为正确返回全部三个字节? 如果前两个错误、第三个错误、则我怀疑您有阵列索引问题。  MCU 上的大多数 SPI 模块都要求您规定要读回的字节数。   

    对此进行的快速测试是将 MISO 和 MOSI 线路短接在一起。  MISO 线路应具有主器件发送的准确数据。  使用数据分析器或示波器也可以快速验证这一点。  

    COM 和 L-之间的电压差是多少?

    什么是 ERRB 电压?

    谢谢、

    Paul

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

    尊敬的 Paul:

    我们将 SPI 配置为主器件并发送3个字节和接收3个字节。  

    在将 MISO 和 MOSI 短接后、我们确实会接收到与主器件发送的数据完全相同的数据。

    COM 和 Loop 之间的电压差为168mV。

    ERRB 电压为0V。

    你怎么看?

    谢谢。

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

    您好 Bart、

    我想从保罗离开的地方接你。 DAC161S997始终重复 SDO 上先前写入的24位(3字节)输出、并与 CSB 同步。 唯一的例外情况是前一条 SPI 命令是读取地址操作。 对于测试用例、您能否详细说明发送到器件的写入命令序列? 您是否正在使用器件的受保护写入模式功能?

    COM 和 Loop 之间的电压差-对我来说是可以的。 ERRB 为0V 表示存在故障、您必须重新读取状态寄存器以确定故障。 请注意、默认情况下、DAC161S997需要连续 SPI 通信、否则它将指示故障。

    此致、

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

    您好、Reza、

    这到底意味着需要连续 SPI 通信、您是说使用 NOP 寄存器并在序列之间向其发送信息吗? 如果我们发送24位、然后再发送24位、响应是否正确?

    我们尝试使用受保护的写入模式和不使用、结果相同。 我们的序列是-尝试将数据写入 DAC161_ERR_CONFIG_REG (comenda、MSB、lsb、nop_reg、0x55、 0x55)、读取状态(comenda、0x55、0x55、nop_reg、0x55、 0x55)、 DACCODE (Comenda、MSB、lsb、nop_reg、 0x55、0x55)、 读取 DACCODE (COMenda、0x55、0x55、nop_reg、0x55、 0x55)。

    了解到如果我们不读取或写入任何数据到寄存器中、DAC 需要将没有实际用途的数据接收到 NOP 寄存器中?  

    谢谢你。

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

    您好 Bart、

    加电后、DAC ERR_CONFIG 寄存器配置为在 ERRB 驱动为低电平时报告 SPI 超时错误和此类错误。 为了避免这种情况、总线上应始终存在由同时位于 ERR_CONFIG 寄存器中的 SPI_TIMEOUT 位定义的周期内的 SPI 通信。 当来自主机处理器的通信中断时、它充当看门狗计时器来触发警报。 通过向位0写入"1"、可以在 ERR_CONFIG 寄存器中禁用此功能。

    您的 SPI 操作的常规序列应该起作用。 您能否提供有关不同命令的"comenda"代表的详细信息? 此外、此时、如果您可以提供 SPI 的示波器屏幕截图以供进一步检查、这将有所帮助。 具体而言、我正在寻找 CSB 边沿如何与您的24位帧对齐。

    此致

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

    您好 Bart、

    是否有此问题的更新? 您现在是否能够正确回读 SDO 上的数据?

    此致

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

    您好、Reza、

    我们正在检查它、一旦我有一些结果、请告知您。

    kr

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

    谢谢。 然后、我将等待您的更新。

    此致

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

    您好、Reza、

    感谢您的耐心等待。 下面您可以找到随附的示波器快照、其中显示了写入 daccode 寄存器的操作、然后读取该寄存器。  

    通信方案是:发送 0x04、(2个字节的数据)、0x02、0x55、0x55、0x55、因此总共为6字节。 接下来、尝试通过发送0x04、0x55、0x55、0x02、0x55、0x55、0x55进行读取。 正如您将在范围内看到的、第3、第4和第5个字节中存在一个影响、具体取决于我们尝试写入 daccode 寄存器的内容。

    配置从复位启动、然后向 ERR_CONFIG 寄存器写入值并读取状态。 遗憾的是、它不会改变器件的工作方式。 如果器件在电源供电后始终处于故障状态、则看起来更像是硬件问题而不是软件问题。

    期待您的反馈。

    MOSI -红色

    MISO -黄色

    CS -蓝色

    e2e.ti.com/.../scope_5F00_shots_5F00_24_5F00_06_5F00_2020.zip

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

    您好 Bart、

    感谢您的更新。 使用这些示波器屏幕截图非常有用。 您能否确认蓝色迹线是否确实是 CS? 如果是、这可能会解释您遇到的问题。 SPI 帧之间的 CS 应为高电平、24位 SPI 帧期间的 CS 应为低电平。 在一个帧中只应发送24位或其倍数、否则将报告 SPI 帧错误。 帧长度由 CS 处于低电平时发生的 SCLK 周期数决定。 您提供的示波器截图中的 CS 跟踪肯定会导致错误。  

    是否可以按如下所示格式化 CS 并重试? 我希望在您执行该操作时看到新的示波器屏幕截图。  

    此致