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.

[参考译文] DAC8741H:SPI 通信问题第二部分

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1186547/dac8741h-spi-comms-issues-part-ii

器件型号:DAC8741H

您好!

我之前问过一个有关通过 SPI 与 DAC8741进行通信的问题、这导致获得了预期的通信。 不过、回顾一下我的 PCB 和代码片段、我得到的结果完全不同。 我发送[82、00、00]来读取控制寄存器-第一次运行代码片段时、我返回所有0、第二次我获得一系列随机数、每次重新启动时都不同。 似乎器件正在响应、但未处于正确的时钟周期(当我返回所有0时、我可以在 SDO 线路上看到通信、 但它们在发送消息的3个字节内、当我返回随机数时、它们似乎未正确同步)。 此外、有时 SDO/MISO 线路似乎在整个消息中一直保持高电平或保持高电平。 我尝试了多条不同的消息、包括读取和写入、这些消息都写入到不同的寄存器中。 我还尝试发送[07、00、01]来复位所有寄存器、结果相同。 我仍在使用 Raspberry Pi 4、我的 PCB 仍与之前随附的原理图相同、我仍在使用 spidev 库中的写入字节和读取字节。 我已经尝试使用两个不同的 PCB 来验证 DAC8741本身不是问题所在。 我在下面附上了示波器照片、希望尽快获得任何调试建议。 也很高兴与应用工程师进行通话。

请注意、在图像中、黄色是 CS、绿色是 SDO/MISO、粉色是 SDI/MOSI、蓝色是 SCLK。

谢谢!

Libby

H2Ok 创新

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

    Libby、

    为了验证 SPI、让我们从一件简单的事情开始。 启动时调制解调器 IRQ 掩码寄存器(21h)的默认值应为0x0024。 首先、确保您可以阅读该内容。 对于该器件、我认为读取将以 A1 00 00的帧开始、然后要读回该帧、您将发送00 00 00。 (我很确定这是读数、但您也应该在数据表中验证读数)。

    保持示波器打开以查看传输和接收位。 此外、我要对齐接地、使它们在屏幕上大致用2个分区隔开、并将信号设置为2V/div。 这样的阅读将更容易。

    如果数据返回为0x0024、让我知道读操作返回正常。 之后、我会向器件发送一个写入以更改一个位。 然后将其读回同一寄存器。 如果可行、您应该可以使通信正常工作。 如果出现问题、请告诉我。

    吴约瑟

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

    您好、Joseph、

    我发送 A1 00 00并读取3个字节、第一次发送 Pi 读取响应为00 00 00 00 (SDO 和 SDI 信号重叠的第一个图像)、第二次响应为3 7d f0 (第二个图像)。

    但是、如果我对 PCB 进行下电上电、那么我第一次发送的时间是00 00 00、第二次得到的时间是60 81 00。

    我等了大约1分钟后又试了一下,第二次发送的是52 A 00。

    我已附上示波器照片。

    谢谢!

    Libby

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

    Libby、

    由于结果不一致、我认为通信中可能会有噪声。 您是否认为您可以缩短导线、并尝试降低噪声。 具体而言、我认为 噪声可能来自 SCLK、而这种噪声可能比任何其他噪声更会干扰通信。  

    如果 SCLK 中存在噪声、线路可能会出现尖峰、这将被 DAC 解释为 SCLK 脉冲、而微控制器尚未发送。 在这种情况下、当读回数据时、时钟会变得先进。 当读取诸如0005的内容(最后一个字节0000 0101)并且您在 SCLK 中得到噪声时、您可能会读回000a (0000 1010)。 发送数据可能会出现相同的问题、器件接收到的值与预期值不同。

    同样、您可能需要清理导线以尽可能缩短导线。 添加几个 pF 的电容来清理 SCLK 也可能有所帮助。

    吴约瑟

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

    您好、Joseph、

    设置与上次让器件工作时基本相同、但我尝试清理跳线。 我将获得相同的结果: 当我对器件进行循环通电时、第一次发送 A1 00时、我返回00 00 00、第二次返回60 81 00、第三次返回00 00 00、第四次返回52 A 00、然后交替显示00 00 00和52 A 00。 我不认为这是一个噪声问题、因为它有点一致、只是我应该得到的信息。

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

    Libby、

    我刚刚注意到、该原理图在 SPI 线路旁边标记了_iso 信号。 您是否使用了一些隔离器进行电源或通信?

    吴约瑟

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

    Libby、  

    根据我们的通信、您似乎在微控制器和 DAC 之间的隔离方面遇到了一些问题。  当绕过隔离时 、会出现预期结果。

    如果您有任何其他问题、请随时回帖。

    吴约瑟