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.

[参考译文] ADS8694:与 ADS8694 18位 ADC 和 TMS320F28379D Launchpad 进行 SPI 通信

Guru**** 2511415 points
Other Parts Discussed in Thread: ADS8694, TMS320F28379D

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/727029/ads8694-spi-communication-with-the-ads8694-18bit-adc-and-the-tms320f28379d-launchpad

器件型号:ADS8694
主题中讨论的其他器件: TMS320F28379D

尊敬的所有人:

我在将 SPI 与 ADS8694搭配使用时仍然遇到问题。

如果我使用不带 SPI 的 GPIO、ADC 会响应我的所有命令并发回结果。 所有信号都按其应有的方式在那里。

但是、如果我在 SPI 下使用相同的引脚、我只能使缓冲区填满1

我单独控制 SPISTE 信号、现在不使用 DMA。

如果我选择 SpiaRegs.SPICCR.bit.SPILBK = 1、则一切都随我所需而来。 如果它= 0、则我发送的每个命令只返回1、无论哪一个都没关系。

另外、我正在出差、无法使用示波 器来检查时钟是否按需要工作、但 SPISTE 的软件检查显示它正在工作。

附件是我的代码的相关部分。

一如既往、非常感谢您的帮助!

此致、

Gustavo

e2e.ti.com/.../forTi10092018.c

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

    您好 Gustavo、

    我注意到   您在8月的 C2000论坛上发布了类似的帖子(SPI 接口、可以很好地用于回送、但在 SDO 线上获取所有帖子以实现"生命周期")、标记为"已解决"、您能帮助我们 更好地了解差异吗? 除了 GPIO 引脚定义或相同物理引脚上的标准 SPI 引脚外、随附的 c 文件是否完全相同? 最好使用示波器来检查两个测试(GPIO 和 SPI 引脚)的时序图。

    e2e.ti.com/.../719946

    此致

    戴尔

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

    让我尝试解释一下:
    另一篇文章被解决了、因为我成功地使用了与我的软件控制的普通 GPIO 相同的引脚来替换 SPI (请参阅随附的文件"Forti-rual-Force-Force-Forcut-11092018.c")、从而使 ADC 做出响应。
    因此、我正在制作自己的 CLK 信号、使引脚60切换、发送数据设置或清除引脚58 (SDI)、并读取引脚59 (SDO)的状态以从 ADC 获取位。
    一切都很好。

    现在的区别是、我为 SPI 配置了相同的引脚、但 SPISTE 除外、我仍在通过软件控制它、但可以肯定的是、它在整个帧中变为低电平。 我不是设置或清除引脚58、而是写入 SPITXBUF、正如您在8月份的示例中所做的那样。

    ´s 我发送命令后、ADC 会在 SDO 上返回1 μ s。 数据表显示、这应该为0´s
    ADC 根本没有任何有效信息。

    我认为时机应该是这样的、但我很确定、我缺少了一些东西。 我们已在一个团队中进行了检查、找不到任何原因。

    波特率足够低:#define SPI_BRR ((200E6/4)/500E3)- 1.

    我需要 SPI 和 DMA、因为应用程序对时间敏感、所以我无法通过切换时钟信号来保持处理器总线。

    我可以使用其中一个 PWM 来生成时钟和中断、但作为 TMS320F28379D 的强大处理器、这似乎是一种耻辱。

    我没有图、很伤心。 我正在出差、下周之前无法使用示波器、但无论如何、我的方法仅限于查看屏幕上发生的情况、或使用变量和断点对其进行检查。

    我确信、CS 会像它应该的那样变为低电平或高电平、RST 是高电平、Lopback 工作。 只有 CLK 线路我无法测试。

    那么、重要的问题是:为什么 SDO 始终为高电平? 我还检查了 SDO (引脚59)中是否允许上拉、但结果相同。

    我将整个文件与 SPI 代码一起包括在内、并按现在的原样将文件与用于 SPI 和 GPIO 的初始文件一起包含在内。 很抱歉耽误你的时间。 (其中有许多测试变量和断点)
    我希望这不是太令人困惑...
    谢谢、此致、
    Gustavo (今天在华沙)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gustavo、

    我对延迟回复表示歉意、我不得不花一些时间浏览您的代码文件。

    您说过、当您在 SPI 下使用相同引脚发送命令时、您只能获得填满1的缓冲区。 您能否告诉我您是通过写入或读取 ADS8618的内部寄存器、还是通过发送命令来选择用于数据转换的通道来检查 SDO 上的数据? 或者 、对于所有这些命令、您 将所有1的数据返回到 MCU (SDO 上用于写入或读取寄存器的8位数据、突出显示如下屏幕截图、SDO 上用于转换的16位数据)?

    我注意到您的在 SPI 初始化代码中使用以下 SPI 配置、实际上 ADS8694将在 SCLK 的每个下降沿读取 SDI 上的数据以 捕获 命令、 此外、MCU 应在 SCLK 下降沿读取 SDO 线上的数据、因此模式1 (CPOL=0、CPHA=1)应为 MCU 上 SPI 接口与 ADS8694 ADC 通信的正确配置。 请更正此问题并重新检查。

    SpiaRegs.SPICCR.bit.CLKPOLARITY = 0

    SpiaRegs.SPICTL.bit.CLK_PHASE = 0;

    如果在修改相位后仍然存在问题、我想   用示波器检查 SPI 配置下数字引脚的时序图、这是识别问题的最佳且最简单的方法。

    谢谢。

    此致

    戴尔

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

    早上好、戴尔、

    再次感谢您、我按照 您的建议将配置更改为 CPOL=0、CPHA=1。 裸片问题仍然存在。

    在回答您的问题时、我  为我发送的所有命令获得1 `s。 我在发送16位后检查数据、并在整个封装传输完毕后再次检查。 SDO 始终为高电平。  `s、更好的说法:读取 SPIRXBUF 只会得到1 μ s

    我还检查了是否允许在线路中上拉、而不改变读数。

    我甚至通过使用其他引脚进行 SPI 检查、但没有任何变化。

    因此、为了避免浪费您的时间、我建议我先到我的办公桌、使用 OSCi 检查所有事项、制作一份图并在下周发送给您。

    一个问题:在开始新帧之前、我是否需要清理任何寄存器? 在我的代码中,我在发送命令后重新初始化了 FIFO (SPI_Fifo_init();并安全地重新初始化了整个 SPI)。 我想,这太残酷了,没有必要,但我忘记在我发送给你的文件中将它注释掉。

    此致!

    Gustavo

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

    您好 Gustavo、

    我不清楚"清理"任何寄存器、但对于任何寄存器配置、您只需要在 ADC 上电后执行一次、例如、如果范围相同、则需要执行输入范围寄存器。 为了进行调试、使用的代码和功能越少、调试就越简单、所以如果可能、不要使用 FIFO、也要尝试在不对它们进行编程的情况下使用默认寄存器值。 谢谢、当您获得数字信号的示波器图时、请告诉我。

    此致

    戴尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dale、
    我在逻辑分析仪上进行了检查、发现引脚60上没有 CLK 工作。 引脚58和59的行为也很奇怪。
    原因是 SPI 引脚配置错误。 我的错,正如预期的那样:)

    它是:

    // GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;//将 GPIO58配置为 SPISIMOA
    // GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 1;//将 GPIO59配置为 SPISOMIA
    // GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 1;//将 GPIO60配置为 SPICLKA

    但它应该是:

    //将 GPIO58配置为 SPISIMOA
    GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;
    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;

    //将 GPIO59配置为 SPISOMIA
    GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;
    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;

    //将 GPIO60配置为 SPICLKA
    GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;
    GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;

    现在我已经准备好了!
    我们可以关闭此功能(快乐)。 非常感谢您的帮助!
    此致、
    Gustavo