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.

[参考译文] DAC8775EVM:SPI 通信不稳定

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1515190/dac8775evm-erratic-spi-communication

器件型号:DAC8775EVM
主题中讨论的其他器件:DAC8775

工具/软件:

德州仪器(TI)团队、

我使用评估板已有一周多时间、最近才开始遇到问题。

今天早些时候、我尝试配置一个额外的器件、以与评估板共享同一 SPI 总线。 新器件在时钟的上升沿对数据进行采样、而评估板的 DAC 在下降沿进行采样。 为了适应这种情况、我修改了固件以支持在不同 SPI 模式之间动态切换、因为 DAQ 仅支持在时钟的后沿进行数据采样。

成功使传感器与微控制器通信后、我注意到 DAC 不再正确响应。 为了排除固件问题、我切换到了开发软件和评估板附带的 SM-USB-DIG、但不稳定的行为仍然存在。

我唯一做的硬件更改是切换跳线配置:我移除了 JP9、添加了 JP13。 我还将微控制器的3.3V 输出连接到 J4的底部引脚、该引脚连接到 JP13。

即使将所有内容恢复到原始配置、DAC 的行为仍然不可预测。 它会做出响应、但输出没有意义。

我随附了两个屏幕截图、显示了问题发生前后的通信情况。 屏幕截图捕获了复位命令的启动以供参考。

非常感谢您为诊断或解决问题提供的任何帮助。

谢谢、

Jason Harrington

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

    Jason、


    不清楚设置中有什么问题、我也不知道您遇到了什么问题。 您是否遇到回读问题? 这似乎是您在两个图中显示的结果(相同输入的结果不同)。

    无论如何、我们首先稍微简化一下问题。 首先、我只是从 DAC8775的控制开始、并断开连接到 SPI 的任何其他连接。 其次、对于寄存器回读、我认为第一个读取帧是可以的、即0x820000。 但是、对于第二个帧、我要写入0x000000 (而不是0xFFFFFF)。 我认为带有零的 NOP 是必要的、而解释第二个帧可能会出现问题。

    首先检查这种特定的回读方法、告诉我这种方法是否有效。 之后、我们可以检查是否将另一个器件添加到 SPI 总线。


    Joseph Wu

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

    感谢您的答复。

    这两个屏幕截图显示了相同的配置、但结果不同。 第一个结果("良好")是在我最初使用提供的 SM-USB-DIG 和 DAC8775EVM 软件测试开发板时获得的。 第二个结果("坏")显示了相同的配置—仍在使用 SM-USB-DIG 和 DAC8775EVM 软件、但响应异常。

    如果第二个 MOSI 帧存在问题、则我无法控制该帧、因为它反映了 SM-USB-DIG 根据 DAC8775EVM 软件中的指令执行的操作。 我假设开发软件能正确执行所有操作、并可用作参考。 该假设是否有效?

    我想强调的主要问题是:在发送寄存器0x82的读取命令(即0x02 | 0x80)后、我希望 DAC 使用与第一个字节相同的地址进行响应、然后是两个数据字节。 "好"屏幕截图中显示了此行为。 但是、在"错误"的屏幕截图中、响应从0x84开始。

    此外、当我之前使用 DAC8775EVM 软件执行"全部读取"命令时、所有寄存器都将填充其默认值、例如、所有降压/升压选项都被禁用。 现在、当我运行相同的操作时、寄存器值会有所不同;设置了 DAC 偏移和增益校准值、这些值我从未修改过。 这对我来说表明 DAC 的响应可能不正确。

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

    Jason、

    好的、我认为我更好地理解了这个问题。 通常、我认为 GUI 软件代表了您希望如何与器件进行通信。  

    一般而言、我很幸运地使用此 EVM、我通常不会看到很多问题。 话虽如此、我之前已经查看了示波器上的信号、但我似乎记得 SM-USB-DIG 提供了一些较小的 SCLK 脉冲。 因此、可能存在一些数字通信问题。

    我注意到的一点是、您的读取请求是0x82、它返回了0x84。 如果 SCLK 线路上有噪声、器件可能会将噪声解读为额外的 SCLK 脉冲、从而将时钟提前1。 在这种情况下、 即使逻辑分析仪没有接收到脉冲、器件也可能已拾取脉冲。 如果您有机会、我会尝试读回0x85之类的内容、只是看看它是否更改为0x8B。  

    如果您看到一组寄存器设置为您预期不同的值、能举几个不同的例子吗? 查看其他寄存器及预期数据以及实际获取的数据可能会有所帮助。 可以使用0x05处的 DAC 数据寄存器、因为该寄存器可以设置为16位值。

    巧合的是、我稍后需要使用此 EVM。 我将查看 EVM 中是否有任何错误结果、看看是否可以增加一些额外的噪声。  

    Joseph Wu

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

    Jason、

    如果这个问题确实来自 SCLK 线路中的一些额外噪声、您可能能够在 SCLK 附近挂起一个100pF 电容器来查看它是否有所帮助。

    Joseph Wu

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

    Jason、

    我刚才注意到的一点是、DAC8775的 SDO 线路默认始终处于主动驱动状态。 我认为在菊花链模式下使用器件时是这样做的。 在 SPI 总线上有多个器件并将所有 SDO 线路连接在一起之前、需要禁用此功能。

    数据表中并没有很清楚地描述这一点、但您应该初始化器件、以便 在/CS 为高电平时将 SDO 线路设置为 Hi-Z。 这 通过将寄存器0x03中的 DSDO 位设置为1来完成。 之后、SDO 在/CS 为低电平时驱动、Hi-Z 在/CS 为高电平时驱动(在大多数 SPI 线路中符合预期)。

    Joseph Wu

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

    Joseph、

    感谢您的快速回答和建设性的建议。

    我已经尝试从 DAC 读取所有参数、但在比较发送的地址与接收到的地址时、我无法在响应中识别出一致的模式。 有时、响应似乎在一个方向上移动最后四位;而有时则似乎以相反的方式移动。 在某些情况下、我根本无法确定任何明确的逐位关系。 此外、在一些情况下、我针对不同的地址字节收到了相同的响应。

    已发送命令 收到命令 注释
    十六进制 二进制 十六进制 二进制
    0x81 1000001. 0x82 10000010. <<<1
    0x82 10000010. 0x84 10000100 <<<1
    0x83 10000011. 0x86 10000110 >> 1.
    0x84 10000100 0x88 100010001000 >> 1.
    0x85 10000101. 0x8C 10001100
    0x86 10000110 0x8C 10001100 >> 1.
    0x87 10000111. 0x8E 10001110 >> 1.
    0x88 100010001000 0x90 10010000 >> 1.
    0x89 10001001. 0x94 10010100
    0x8A 10001010. 0x98 10011000
    0x8B 10001011 0x9C 10011100
    0x8C 10001100 0x98 10011000 <<<1
    0x8D 10001101. 0x9C 10011100
    0x8E 10001110 0x9C 10011100 >> 1.
    0x90 10010000 0xA0 10100000 <<<1
    0x91 10010000001 0xA4 10100100

    此外、我运行了一个实验、从地址0x03读取数据、然后将相同的数据写回该地址、然后再次从同一地址读取。 但是、当我读回数据时、响应是不同的。  我使用逻辑分析仪仔细检查了通信、发现 SM-USB-DIG 发送和接收的数据与 DAC8775EVM GUI 中显示的数据之间完全一致、即所有传输的命令和接收的字节都是匹配的。  虽然软件和 SM-USB-DIG 之间的数据交换看起来正确、但 DAC 的响应不符合预期。 它未正确接收到我发送的数据、或者它发回的响应已损坏或无效。

    我尝试写入 DSDO 位、但我不 相信我能够更改该位、因为来自 DAC 的响应非常不稳定。 我还附上了在执行下电上电、复位和读取所有命令后的 GUI 屏幕截图。 如前所述、许多值在下电上电后都不作为默认值有意义、例如启用了降压/升压。

    如果您认为 SCK 线路上的电容器有所帮助、我很乐意尝试它。

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

    Jason、

    出于好奇心、您是否使用 SM-USB-DIG、或者连接到其他微控制器。  

    另一方面、我要检查 DVDD 线路和另一个微控制器是否在相同的电压下运行。 如果没有、则可能微控制器的输出并不总是足够高、无法达到 DAC DIN 的 VIH 电平。 此外、请检查以确保微控制器和 DAC 具有公共接地。 我还将使用示波器代替逻辑分析仪。 使用示波器、您会看到通信中存在任何不稳定或噪声。

    我也尝试了电容器的技巧、但可能没有用。 根据您显示的数据、SCLK 中不一定会产生额外的噪声、而是您在 SCLK 中看到的失效和进步、因此这可能是稳定性方面的一些其他问题。

    Joseph Wu

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

    Joseph、

    我们可能刚刚取得了突破!

    为了回答您的问题、我整个时间都在使用 SM-USB-DIG。 在检查我的设置时、我认为可能值得检查移除逻辑分析仪是否会产生影响。 我使探头引脚保持连接到 DAC8775EVM、但从逻辑分析仪上断开了主探头连接器。 然后、我使用了"Read All"命令—突然、所有内容都正确读取。

    即使在重新连接逻辑分析仪后、读数仍然按预期显示。 我仍不确定为什么逻辑分析仪会影响通信、但这个问题在过去几天一直存在。 到目前为止、我已经尝试过不同的 SM-USB-DIG 并重新启动设置多次、但未成功。

    感谢您的帮助! 如果我开始变得不稳定的沟通,我知道首先看什么。

       

    -杰森

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

    Jason、

    太棒了! 最后我要指出的是、您可以使用 GUI 窗口左上角的 Simple I/O 选项卡直接与寄存器进行通信。  

    您可以使用此选项卡直接读取和写入数据、并且可能会加快您的开发速度(我想您的 GUI 版本可能会比我更新一些):

    Joseph Wu

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

    谢谢 Joseph、是的、我熟悉"Simple I/O (简单 I/O)"选项卡。 谢谢! 我也使用了您正在谈论的软件版本。 该网站有两个版本的应用程序可供下载,但它并不真正区分两者之间的区别。 我想我当前使用的版本会更好一些。

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

    Jason、

    我知道我们最近发布了新版本的 GUI (看起来像是2023年)。 新版本增加了一些功能并纠正了一些问题。  

    DAC8775EVM-SW 看起来是原始版本、我想我们需要调低该版本。  

    不管怎样、我很高兴您能够让事情正常工作。 如果您有任何其他问题、可以将其添加到此主题或创建新帖子。

    Joseph Wu