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.

[参考译文] ADS131A04:从 ADS131A04 SPI 链中的第二个器件获取数据时出现问题。

Guru**** 2393265 points
Other Parts Discussed in Thread: ADS131A04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/725675/ads131a04-problem-getting-data-from-2nd-device-in-ads131a04-spi-chain

器件型号:ADS131A04

链中的第二个器件也存在此问题。 以下是这些行动的记录。

在复位线路的硬件置为有效后、我正在执行的初始化例程开始。

我已将回复配对、以快速反映命令与命令状态响应。

 

我正在使用 MSP432连接 ADS131A04。 第一个器件处于异步中断模式、第二个器件是同步从器件。

 

我的问题可能是由于 CMD_NULL 被发送、而第二个器件的应答表明重新同步故障。

重新同步故障。
每当信号路径因而暂时复位时、该位就会被置位
DRDY 同步事件。 该故障只能在同步模式下发生
从机模式。
0:设备处于同步状态
1:信号路径瞬间复位以保持同步

 

我正在使用下降沿 DRDY 输入信号在示波器上触发...并且不观察任何毛刺脉冲。

但是、我发现即使在发送 STANDBY 命令之后、DRDY 中断也会以编程的数据速率传入。

活动状态是一个高边沿到低边沿的转换、但是、随着我的菜单化、信号线会以编程的数据速率自行复位(在 ADS131A04传送新边沿之前返回高电平。

在 ADS131A04.pdf (SBAS590D)第50页的手册中提到了对 ADCx 寄存器的写入。

不过、这些寄存器用于数字增益、因此我假设 ADC_ENA 是预期禁用寄存器。

 

我不确定如何继续、因此我忽略了 Resynch_FAULT 和继续配置。

在尝试写入第二个器件中的 ADC_ENA 寄存器之前、所有值都显示良好。

从那一刻起,我就无法解释发生了什么。

 

下面是我之前描述的与2个 ADC 的通信序列。

我包含了与器件的十六进制字状态响应直接配对的(十六进制命令字/命令字类型)。

 j3:Cmd 已解析:found (initADC){}
就绪状态      0x82->DEV1回复
                  0x7f82 --> DEV2回复
CMD_RESET         0x04 --> DEV1应答
                  0x04 --> DEV2回复
CMD_UNLOCK        0x0655 --> DEV1应答
                  0x0655 --> DEV2回复
CMD_STANDBY       0x0022 --> DEV1应答
                  0x0022--> DEV2回复
CMD_NULL          0x2200 --> DEV1应答
                  0x2204 --> DEV2回复
CMD_UNLOCK        0x0655 --> DEV1应答
                  0x0655 --> DEV2回复
CMD_RREG|ID_MSB   0x2004 --> DEV1回复
                  0x2004 --> DEV2回复
CMD_RREG|ID_LSB   0x2103->DEV1应答
                  0x2103->DEV2应答
CMD_RREG|STAT_1   0x2200 --> DEV1应答
                  0x2200 --> DEV2回复
CMD_RREG|STAT_P   0x2300 --> DEV1应答
                  0x2300 --> DEV2应答
CMD_RREG|STAT_N   0x2400 --> DEV1应答
                  0x2400 --> DEV2回复
CMD_RREG|STAT_S   0x2500 --> DEV1应答
                  0x2500 -->DEV2应答
CMD_RREG|STAT_M2  0x2709 --> DEV1应答
                  0x270a --> DEV2回复
CMD_RREG|A_SYS_CFG 0x2b60 --> DEV1应答
                  0x2b60 --> DEV2回复
CMD_RREG|D_SYS_CFG 0x2c3c --> DEV1应答
                  0x2c3c --> DEV2回复
CMD_RREG|CLK1     0x2d08 --> DEV1应答
                  0x2d08 --> DEV2回复
CMD_RREG|CLK2     0x2e86 --> DEV1应答
                  0x2e86 --> DEV2应答
CMD_RREG|ADC_ENA  0x2f00 --> DEV1应答
                  0x2f00 --> DEV2应答
CMD_RREG|ADC1     0x3100 --> DEV1应答
                  0x3100 --> DEV2应答
CMD_RREG|ADC2     0x3200 --> DEV1应答
                  0x3200 --> DEV2回复
CMD_RREG|ADC3     0x3300 --> DEV1应答
                  0x3300 --> DEV2应答
CMD_RREG|ADC4     0x3400 --> DEV1应答
                  0x3400 --> DEV2回复
WREG=0x4d00       0x2d00 --> DEV1应答
                  0x2d00 --> DEV2应答
WREG=0x4e00       0x2e00 --> DEV1应答
                  0x2e00--> DEV2应答
CMD_RREG|CLK1     0x2d00 --> DEV1应答
                  0x2d00 --> DEV2应答
CMD_RREG|CLK2     0x2e00 --> DEV1应答
                  0x2e00--> DEV2应答
WREG=0x4f0f       0x2f0f --> DEV1应答
                  0x0000 --> DEV2应答
CMD_RREG|ADC_ENA  0x2f0f --> DEV1应答
                  0x0000 --> DEV2应答
CMD_WAKEUP        0x0033 --> DEV1应答
                  0x0000 --> DEV2应答
CMD_LOCK          0x0555 --> DEV1应答
                  0x00cb --> DEV2回复

 

我似乎需要解决第二个器件上的 Resynch_FAULT 问题、但我无法决定如何解决该问题。

 

谢谢你们的帮助!!!

 

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

    从之前的帖子中可以看到、AJMAJM 正在使用的 ADS131A04系统中可能会出现一些噪声。 我们的两个 EVM 通过导线连接在一起。 您是否在这里做过类似的事情、或者您是否在同一 PWB 上使用两个 DIVS 开发了自己的 PCB?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    这是我们整合的定制 PCB。 在连接到逻辑分析仪适配器之前、我最初查看了器件的 SPI 和 CS/ drdy / done、但我不记得在干扰或不必要的噪声方面从我身上跳出来的任何东西。 这是一种低功耗设计(msp432+ads131a04和独立 SPI 总线上的 SD 卡)。 但是我想确认这是低噪声低干扰...但是我4个月前的 xds200调试器昨天在我身上死了。 今天,我应该在今天结束时有一个新的。 我很确定这不是一个噪声问题。 如果我不得不猜测、我认为以数据速率生成 DRDY 中断会影响第二个器件。 在我看来、待机模式应该停止以数据速率进行的单调中断、但这显然不是它的工作方式。 当我获得新的调试探针时、我可以提供线路上噪声的一些示波器截图、但我认为这将不是问题。

    谢谢

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

    因此、我测量了 DRDY 线路上的噪声、该噪声约为35mVrms。 我正在尝试将其包括在下面。 我在 DRDY_AN (模拟)测量/示波器快照上被放大为100mV/分频。 即使器件处于待机模式、DRDY 线路是否应继续以数据速率生成中断? 我真的希望避免重新制作 PCB、以将每个 A/D 的通道数限制为原生4个通道。 任何帮助都是最感激的!!! 谢谢。

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

    如果您处于待机模式、DRDY 不应处于活动状态。 您能否抓取某些命令周期的屏幕截图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Tom、我将介绍示波器的一些屏幕截图。

    我将发送以下4条命令的序列。 末尾的 Extra Null (额外空)、以便我可以获得上一条命令(待机)的状态响应。 每个命令加倍、以便第二个器件接收相同的命令。

       CMD=cmd_reset; Reply=send_sys_cmd_ads (cmd、arg);
       CMD=cmd_unlock;Reply=send_sys_cmd_ads (cmd、arg);
       CMD=cmd_standby;Reply=send_sys_cmd_ads (cmd、arg);
       cmd=cmd_NULL;Reply=send_sys_cmd_ads (cmd、arg);

    为了补充示波器 SPI 解码、这里是以 ASCII 表示的回复。

    CMD_NULL          0x82 --> DEV1应答
                      0x7f82 --> DEV2回复
    CMD_RESET         0x04 --> DEV1应答
                      0x04 --> DEV2回复
    CMD_UNLOCK        0x0655 --> DEV1应答
                      0x0655 --> DEV2回复
    CMD_STANDBY       0x0022 --> DEV1应答
                      0x0022--> DEV2回复

     

    第一个范围屏幕截图显示了示波器上的这4个命令、这些命令已经过放大、足以按示波器显示 SPI 解码...与上面的 ASCII 答复匹配。 第二个示波器屏幕截图显示了部分时间的扩展、显示即使在执行 STANDBY 命令之后、drdy 线仍处于活动状态。 在展开的屏幕截图中、4个命令在示波器初始化时被滚动成一个鞭状、但这是相同的4个命令。


     


     

    我确实发现奇怪的是、两个器件都以0x0022进行响应、但这种单调的数据中断会不断消除 chuging。

    再次感谢您对此提供的任何帮助!

     

     

     

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

    感谢您的屏幕截图。 请看一下 ADS131A04数据表中的第9.4.3节、您是否也发送了 ADC_Disable 命令? 如果不是、请尝试一下、让我们知道 DRDY 是否同时停止麻醉。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    这也不会停止它。

    以下是初始化期间发送的命令。

    我在 STANDBY 命令之后插入了 WREG=0x4f00、但 DRDY 行不会停止。

    我们是否在我已经指出这个问题的过程中寻找一个红色的错误?

    我们是否确定这是第二个同步从站的 NULL CMD 的 STAT_1重新发送 F_RESync 错误的原因?

    您能否提供有关 F_Resync 的触发因素的任何进一步逻辑、而不是数据表所回避的触发因素?

    保留寄存器中是否有其他内容可以提供一些提示?

     

    以下是对以下已发出命令的答复。

    在这些寄存器下面、我还轮询了所有剩余的寄存器映射(保留的寄存器映射除外)。

    CMD_NULL          0x82 --> DEV1应答
                      0x7f82 --> DEV2回复
    CMD_RESET         0x04 --> DEV1应答
                      0x04 --> DEV2回复
    CMD_UNLOCK        0x0655 --> DEV1应答
                      0x0655 --> DEV2回复
    CMD_STANDBY       0x0022 --> DEV1应答
                      0x0022--> DEV2回复
    WREG=0x4f00       0x2f00 --> DEV1应答
                      0x2f00 --> DEV2应答
    CMD_NULL          0x2200 --> DEV1应答
                      0x2204 --> DEV2回复


    CMD_RREG|ID_MSB   0x2004 --> DEV1回复
                      0x2004 --> DEV2回复
    CMD_RREG|ID_LSB   0x2103->DEV1应答
                      0x2103->DEV2应答
    CMD_RREG|STAT_1   0x2200 --> DEV1应答
                      0x2200 --> DEV2回复
    CMD_RREG|STAT_P   0x2300 --> DEV1应答
                      0x2300 --> DEV2应答
    CMD_RREG|STAT_N   0x2400 --> DEV1应答
                      0x2400 --> DEV2回复
    CMD_RREG|STAT_S   0x2500 --> DEV1应答
                      0x2500 -->DEV2应答
    CMD_RREG|STAT_M2  0x2709 --> DEV1应答
                      0x270a --> DEV2回复
    CMD_RREG|ERROR_CNT 0x2600 --> DEV1应答
                      0x2600 --> DEV2应答
    CMD_RREG|A_SYS_CFG 0x2b60 --> DEV1应答
                      0x2b60 --> DEV2回复
    CMD_RREG|D_SYS_CFG 0x2c3c --> DEV1应答
                      0x2c3c --> DEV2回复
    CMD_RREG|CLK1     0x2d08 --> DEV1应答
                      0x2d08 --> DEV2回复
    CMD_RREG|CLK2     0x2e86 --> DEV1应答
                      0x2e86 --> DEV2应答
    CMD_RREG|ADC_ENA  0x2f00 --> DEV1应答
                      0x2f00 --> DEV2应答
    CMD_RREG|ADC1     0x3100 --> DEV1应答
                      0x3100 --> DEV2应答
    CMD_RREG|ADC2     0x3200 --> DEV1应答
                      0x3200 --> DEV2回复
    CMD_RREG|ADC3     0x3300 --> DEV1应答
                      0x3300 --> DEV2应答

     

    再次感谢您继续提供帮助。

     

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

    您好、Tom、

    在上面的初始化例程中、我在发出软件复位后添加了10ms 延迟。
    这使得第二个器件的 STAT_1响应不再报告 F_RESync 错误、如下所示。

    CMD_RREG|STAT_1   0x2200 --> DEV1应答
                      0x2200 --> DEV2回复

    遗憾的是、第二个器件未能成功接受 ADC_ENA 命令的初始问题仍然存在。

    在初始化序列的这一部分之前、所有操作都是完美的。

    //下面我们将写入 CLK1寄存器(响应反映了两个器件对命令的接受)
    WREG=0x4d00       0x2d00 --> DEV1应答
                      0x2d00 --> DEV2应答

    //下面我们将写入 CLK2寄存器(响应反映了两个器件对命令的接受)
    WREG=0x4e0c       0x2e0c -->DEV1应答
                      0x2e0c --> DEV2应答

    //下面我们写入 ADC_ENA 寄存器(响应反映了第一个器件的接受情况和器件2的0x0000响应)
    WREG=0x4f0f       0x2f0f --> DEV1应答
                      0x0000 --> DEV2应答

    //下面我们写入 lock cmd (响应反映第一个器件的接受程度、而器件2的0x0000响应)
    CMD_LOCK          0x0555 --> DEV1应答
                      0x0000 --> DEV2应答

    我完全被骗了。 为什么 ADC_ENA 写入到第二个用0x0000进行响应的器件?

     

    再次感谢

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

    您能否发送原理图? 我正在尝试将您发送的配置序列的屏幕截图(标有时间戳的 Sun SEP 09:37:06 2018)与数据表图96和97进行比较。 是否显示在字符串中第一个或第二个设备的屏幕截图中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、您的宝贵时间很耗时。 似乎我个人并不是器件一直存在故障。

    我认为我已经正确处理了固定帧与动态帧选项、但是我已经很明显地看到、一旦通过 ADC_ENA 启用器件、我就无法处理调整。 出于任何原因...我在发出该命令后将帧大小设置为6、而不是5 (默认情况下禁用 CRC_EN 位)、此时与通信不同步。

    感谢您努力帮助我解决这个问题。 我感到安慰的是、您可能会遇到工程师、他们确信他们正确行事、只是为了发现他们犯了一些愚蠢的错误。

    感谢 Tom 的耐心和努力!

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

    我很高兴听到它现在为您服务。 感谢您告知我们。