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.

[参考译文] DAC70504:SDO 数据读取问题

Guru**** 2503345 points
Other Parts Discussed in Thread: DAC70504

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1192082/dac70504-sdo-data-reading-problem

器件型号:DAC70504

您好!

我正在尝试写入和读取 DAC70504EVM 上的寄存器。 我尝试写入 DAC0数据寄存器(0x08)、然后从该寄存器中读取。

据我从文档(sbas871c.pdf)中了解、从第25页的表格中可以看出、需要发送(24位长)消息:

首先、我发送了"写入"消息、以便在  DAC0数据寄存器(0x08)中写入0xEE 值

0 000 1000 0000000011101110

然后我发送"已读"消息、以便从 SDO 读取响应:

1 000 1000 000000000000000000000000

问题是 SDI 引脚(橙色信号)始终处于高电平、并且运行不正常:


(SCLK -黄色、SDI -蓝色、SDO -橙色、CS -绿色)

此外、我尝试了 SCLK 连续的配置 、SDO 行为相同:


(SCLK -黄色、SDI -蓝色、SDO -橙色、CS -绿色)

问题是、消息的发送方式是否正确、如果不正确、我会做什么?

此致、
Marko

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

    您好、Marko、

    将 0xEE 写入   DAC0数据寄存器后、您是否在 DAC 通道上看到正确的输出? 如果现在、我们应该首先调试写入周期。

    就读取周期而言、总共应该有两个访问周期、不包括对寄存器的原始写入(写入0xEE 时)。 第一次访问是从寄存器中读取的、第二次访问是一个24位的虚拟周期。 这个虚拟周期可以是对另一个寄存器的写入、也可以是对另一个寄存器的读取开始。 这是必需的、以便 SDO (或 MISO 线路)可以对读取命令请求的数据进行时钟恢复。 您是否正在执行第二个周期? 这可能是问题所在。

    最棒的

    Katlynne Jones  

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

    您好  Katlynne、

    代码如下所示:

      // ...
      
      // CS low
      USART_Tx( USART0, 0x08 );
      USART_Tx( USART0, 0x03 );
      USART_Tx( USART0, 0xEE );
      // CS high
    
      while( 1 )
      {
          // CS low
          USART_Tx( USART0, 0x88 );
          USART_Tx( USART0, 0x03 );
          USART_Tx( USART0, 0x00 );
          // CS high
      };
      
      // ...

    将 0xEE 写入  DAC0数据寄存器后、我将检查响应输出。

    好的、在 while 环路中、我应该在 读取周期之后添加一个24位的虚拟周期。 我将用 示波器图片进行回复。

    谢谢 Katlynne。

    此致、
    Marko

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

    我将在项目中添加几个 DAC70504、同时使用 DAC70504EVM。 此器件是否有任何示例代码?

    谢谢!

    进行了比较

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

    您好、Jared、

    我们没有示例代码。 DAC70504EVM 具有可用的 GUI、但这可能对其他器件没有帮助。 我们确实有一个在该论坛帖子中共享的该系列的头文件: https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/924727/dac80501-source-code

    通过添加额外的数据寄存器、应该可以轻松地将其扩展到4通道器件。

    最棒的

    Katlynne

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

    你好  Katlynne!

    我在传输过程开始时使用触发器捕获了数据。 图片如下:


    (SCLK -黄色、SDI -蓝色、SDO -橙色)

    1、0x0803EE
    2. 0x0903EE
    3、0x880300
    4、0x890300

    首先、我尝试按照您的建议使用虚拟命令进行写入和读取、但 SDO 没有任何答案。
    您是否有任何关于后续步骤的建议以解决问题?

    此致、
    Marko

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

    您好、Marko、

    感谢您尝试使用虚拟命令。 您是否能够确认写入命令是否更新了 DAC 输出?

    我再看一下您原来的示波器快照、该快照放大了很多、我认为您可能使用了错误的 SPI 模式。 SCLK 可以高电平或低电平空闲(由时钟极性配置)、但数据需要在上升沿移位并在下降沿捕获(由相位配置)。 因此、读取或写入命令可能都不起作用。 您可以尝试修改 SPI 模式吗?

    最棒的

    Katlynne Jones  

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

    您好  Katlynne、

    写入命令未更新 DAC0输出。 从 上一张图片中可以看出(使用白色箭头)、SDO 没有使用任何数据进行响应。 此外、当我检查 J2[0]引脚上的电压时、它没有给出 预期值。

    我将尝试修改 SPI 模式、并将结果通知您。
    如果您认为有其他可能的原因、请通知我。

    此致、
    Marko

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

    您好  Katlynne、

    我将外部电源置于 VDD (3V)上。 然后我执行以下代码:

        // ...
    
        GPIO_PinOutClear( US0CS_PORT, US0CS_PIN );
        USART_Tx( USART0, 0x08 ); // write
        USART_Tx( USART0, 0x03 );
        USART_Tx( USART0, 0xEE );
    
        USART_Tx( USART0, 0x00 ); // dummy
        USART_Tx( USART0, 0x00 );
        USART_Tx( USART0, 0x00 );
        GPIO_PinOutSet( US0CS_PORT, US0CS_PIN );
    
        while( 1 )
        {
          GPIO_PinOutClear( US0CS_PORT, US0CS_PIN );
          USART_Tx( USART0, 0x88 ); // read
          USART_Tx( USART0, 0x00 );
          USART_Tx( USART0, 0x00 );
          
          USART_Tx( USART0, 0x00 ); // dummy
          USART_Tx( USART0, 0x00 );
          USART_Tx( USART0, 0x00 );
          GPIO_PinOutSet( US0CS_PORT, US0CS_PIN );
      };

    所以、想法是在  DAC0寄存器中写入一些值、然后在循环中读取该值。 这是一个 while 周期(紫色光括号)中的示波器图片:


    (SCLK -黄色、SDI -蓝色、SDO -橙色、CS -绿色
    )

    因此可以看到、写入命令未 成功配置 DAC0寄存器。 还尝试使用写入命令配置其他寄存器、但也未成功。

     解决此问题的后续步骤是什么?

    SPI 模式、对我来说很好。


    (SCLK -黄色、SDO -橙色)

    此致、
    Marko

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

    您好、Marko、

    Katlynne 将于明天作出回应。

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

    您好、Marko、

    确保每个写入/读取命令之间的 CS 都变为高电平:

     以下是读取的时序图:

    对 DAC0寄存器的写入可能不会进行、因为根据 切换 CS 引脚的时间、访问周期超过24位:

    最后一条评论。 您正在使用 DAC70504、对吧? 数据为14位、需要在寄存器中左对齐。 寄存器中的最后2位将被忽略:

    最棒的

    Katlynne Jones