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.

[参考译文] ADS127L18EVM-PDK:调试 SPI/ADC 代码帮助申请

Guru**** 2864100 points

Other Parts Discussed in Thread: MSPM0G3507, ADS127L18, TXB-EVM

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1636026/ads127l18evm-pdk-request-for-help-debugging-spi-adc-code

器件型号: ADS127L18EVM-PDK
Thread 中讨论的其他器件: ADS127L18、MSPM0G3507、 TXB-EVM

下午好、

以下存储库包含我们编辑的 P. Edwards 代码版本。 在原始 Pedwards 代码中、他使用两个 SPI 外设来实现两个数据通道、并使用位拆裂 GPIO 作为 SPI 控制器。 但是、对于我们的应用、我们只需要一个 SPI 外设 用于数据采集、并需要另一组 SPI 用于控制器、无需位拆裂 GPIO。  

 

在实施中:

  • 一个 SPI 外设用于接收 ADC 数据。

  • 第二个 SPI 数据路径会映射 DOUT0 和 DCLK、从而进行基于 DMA 的数据传输。

  • 一个 SPI 控制器用于配置和更改 ADC 寄存器。

  • 我们没有像在原始 P. Edwards 实现中那样使用 GPIO 位拆裂。

  • START 和 RESET 映射到 GPIO。

  • 我们将 DOUT0 和 DCLK 与单个数据通道配合使用。

目前、我们正在接收中的数字 gRxPacket、但通道输入未被填充。 无论是否应用了外部输入(例如来自函数发生器)、这些值在 0–255 范围内保持看似随机的。

此外、我们想验证 SPI 控制器是否正常运行。 在主代码文件中 MSPM0xADS127L18.c,我可以使用单寄存器读写函数,并在速度检查变量的 watch 变量中查看预期输出。 但是、我无法正确读取器件 ID。 它看起来像 0,即使它应该是 6.

您是否能够帮助我们确定导致此问题的原因、并提供验证与 ADS127L18 SPI 通信是否正常工作的理想方法?

更新的 PEdwards 代码(忽略自述文件): https://github.com/JesusPinzon4803/MSPM03507xADS127L18 

原始 Edwards 代码: https://github.com/TexasInstruments/precision-adc-examples/blob/main/devices/ads127l18/MSPM0_example/README.md 

谢谢你。

 

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

    你好,耶稣,

    您使用哪个 SPI 端口来传输转换数据(帧同步端口)、使用哪个 SPI 端口来进行器件配置?  器件配置端口需要 SPI 模式 1、其中 SCLK 在空闲状态下为低电平、SCLK 上升沿启动数据、下降沿捕获数据。

    此外、您是否将 MODE 引脚 54 通过 3k Ω 或更低的电阻拉至高电平?  EVM 板默认使用 100k Ω、该值不足以在 Mode 引脚上建立高电平。

    由于除固件之外、这还可能是一个硬件问题、因此最好从逻辑分析仪开始测量信号。  这将有助于跟踪硬件错误或软件。  首先、请为配置端口捕获完整的 SPI 帧、包括/CS、SCLK、SDI 和 SDO 信号。

    此致、
    Keith Nicholas
    精密 ADC 应用

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

    对于帧同步端口、我们使用引脚 PB17 (DOUT0) 和 PA12 (DCLK)、而 CS、SCLK、SDO、SDI 的器件配置 SPI 端口为 PB6-9

    我们可在 1.8V 时将 MODE 设置为高电平以进行 SPI 编程。  

    我们知道 SCLK 负责将 SPI 模式从 0 更改为 1 我们如何更改该模式、是通过 syscfg 进行更改、还是与硬件相关。 逻辑分析仪显示未发生 SPI、因为 CS、SCLK 等图形都是平坦的。 有关我们物理引脚连接的更多信息、请查看我们的 syscfg 文件。 谢谢你

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

    校正逻辑分析仪能够显示一些数据、但似乎很不寻常。 这将是逻辑分析仪 https://github.com/JesusPinzon4803/MSPM03507xADS127L18/blob/main/Screenshot%202026-04-14%20225601.png 的输出

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

    对于用于读取/写入寄存器的 SPI 端口、需要更新以下内容:

    相位:在第二个时钟沿捕捉数据

    帧大小:16

    /cfs-file/__key/communityserver-discussions-components-files/81/MSPM0_5F00_x_5F00_ADS127L18.syscfg

    此致、
    Keith

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

    感谢您的答复! 很遗憾、这并没有解决我的问题、我是可以联系 TI 的 P-Edwards 来帮助我们、还是可以致电/与 TI 员工进行实际互动。  

    在调试过程中、我尝试两个 SPI 通信测试点以进行 speedcheck、以检查 ADC 的速度模式

      // speedcheck = readSingleRegister (GEN_CFG2_REG_ADDRESS);// retunrns 0!?
      initalizeRegisters (OSR、SPEED_MODE、DP_TDM、DCLK_DIV、ADC_CLK_SEL、 ADC_CLK_DIV);
      speedcheck = readSingleRegister (GEN_CFG2_REG_ADDRESS);//在早期代码中将速度模式设置为最大值时重新启动 6
      
      DEVICEID = readSingleRegister (DEV_ID_REG_ADDRESS);//应为 L18 返回 6、但返回 0
    执行建议的修改后、结果仍会在器件读取上输出 0。 很抱歉头疼!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,耶稣,

    检查您之前发送的波形、看起来 SPI 模式现在是正确的。  但是、我仍然认为这可能是硬件问题。  请从其中一个寄存器捕获读取事务。  寄存器 CH0_GaN_MSB 地址 16 应在复位后读回 0x40h。  这将是两个 16b 帧、如下所示:

    这将使我们能够确认 SPI 命令正确、如果我们没有接收 0x40h、则表示 ADC 未正确响应。

    我确实注意到、您的逻辑捕捉上有相当多的噪声。  这可能是由于逻辑分析仪上设置的电压电平不正确(应为 1.8V CMOS 逻辑)、或者可能是由于数字线路上的大量噪声/振铃造成的。

    我假设您使用的是 MSPM0G3507 LaunchPad。  如果是、您使用什么来将 3.3V LaunchPad 逻辑电平转换为 ADS127L18EVM 所需的 1.8V 逻辑电平?  这种逻辑电平转换可能会产生噪声问题、因此我提出来。

    此致、
    Keith

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

    您好! 是的、我们使用电压转换器 (TXB-EVM)。 我们能够确认 SPI 通过逻辑分析仪正常工作(因为它与您提供的图像相匹配)、但是监视变量仍然无法正确更新、逻辑分析仪是否足以证明 SPI 正常工作? 现在主要问题是 ADC 的数据通道、DCLK (PA12) 和 DOUT0 (PB17) 引脚。 数据通道中的 MCU 充当外设、从控制器 ADC 接收数据。 在代码中、我禁用了之前启用的+/- FS 测试、由于我们的 ADC 没有输入、因此预计值很低/接近 0。 然而、当从逻辑分析仪观察到时、我们会看到具有一致 255 个值的随机值。 由于 MCU 是外设、我们将其设置为 SPI 模式 0 并在上升沿捕获。 我已 在 GitHub 中上传照片、其中显示了成功的 SPI 和意外的数据通道值。  此外、我的电压转换器连接经过了 TI 员工的验证。

    另一个问题是、该代码的目的是在 Windows 中连续收集数据或收集数据。  

    感谢您的观看!

    下面是 GITHUB 的照片:

    https://github.com/JesusPinzon4803/MSPM03507xADS127L18 

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

    你好,耶稣,

    是的、SPI 现在似乎正常工作。  如果您希望充分执行 SPI 配置、可以将值写入任何偏移寄存器、然后立即读回该值。  例如:

    将 0xA5 写入寄存器 0x16、然后读回。  这将是 3 个 SPI 帧、使用以下 MOSI 数据:

    0x96A5、写入寄存器 0x16 命令、寄存器数据 0xA5

    0x1600、读取寄存器 0x16 命令

    0x0000、读取寄存器内容

    当 ADS127L18EVM 输入通道悬空时、结果应接近 0V 并存在一些噪声。  请记住、输出代码可能发生很大变化、因为由于数据的二进制补码编码、较小的正值将接近 0x000000h、而较小的负值将接近 0xFFFFFF。

    在 DCLK 和 DOUT 线路上捕获的数据看起来正确。  分析仪似乎在 1 个时钟周期内关闭、但这可能是由于您的触发器设置所致。  使用逻辑分析仪捕获数据时、您应使用 FSYNC 信号作为 SPI 芯片选择并在 FSYNC 上升沿触发。  然后、这将使逻辑分析仪能够正确解释传入的数据。  此外、您可以轻松判断新的数据转换周期何时从 FSYNC 的每个上升沿开始。  

    传输完所有通道 (8 个通道为 24*8=192 个 DCLK) 后、数据端口帧中的其余数据将全为 1、或在使用 ADS127L18EVM 时为高电平。  这是由于数据端口的“菊花链“行为;一旦传输了所有通道数据、就会读取并传递 DINx 引脚上的任何数据。  在 ADS127L18EVM 中、DINx 引脚被拉高、因此数据端口帧中所有剩余数据均为 0xFF。

    根据您提供的内容、我认为硬件现在可以正常工作、包括 SPI 配置。  您应该能够使用代码中的默认设置、通过 8 个通道捕获 512 个 24b 数据的样本。

    此代码的目的是简单地展示标准 SPI 端口如何使用低成本处理器捕获转换数据。  如果没有 CPLD 等额外的外部逻辑、大多数处理器无法直接使用 FSYNC 信号。  MSPM0 没有足够的处理能力来持续采集数据并对其执行某些操作。  对于 512 个短样本突发、可以使用该器件、但对于连续实时应用、则需要性能更高的 MCU、例如 TI 的 Sitara 多核应用处理器或 FPGA。

    此致、
    Keith

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

    非常感谢您的耐心、并帮助解决问题!