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.

[参考译文] CCS/ADS8922B:菊花链通信

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/640554/ccs-ads8922b-daisy-chain-communication

部件号:ADS8922B
主题中讨论的其他部件: HALCOGEN

工具/软件:Code Composer Studio

您好,

我目前正在尝试从三个采用菊花链拓扑设置的ADS8922B接收转换数据。 我已经阅读了数据表,查看了时间图表,只是想确保我在拔出所有头发之前正确思考了这件事,并尝试做到这一点。

当前设置:

1) CCSv7

2) HALCoGen 4.07

3) RM48L952ZWT

我正在使用MibSPI1模块向菊花链式ADC发送数据并从其接收数据。 除CS引脚(配置为GPIO)外,所有连接均配置为SPI功能。

根据我的理解,ADC在第一次通电时应该采用SPI-00-S协议(这是我要使用的协议)。

问题:

1)每个控制寄存器的默认值是否全部为0?

2)如果是,是否仍需要配置任何控制寄存器,即使我计划使用它们的默认配置?

关于数据传输,我计划使用SPI 16位移位寄存器一次发送/接收11位。

3)这是否是发送要使用的命令的正确方法?

4) ADC上的哪个寄存器实际拥有转换,我应该如何使用RD_REG获取该值?

5)成功发送RD_REG后,我应在何时收到回复?

我知道这是很多。 我计划发布一些非常基本的代码想法,我计划尝试这些想法,以及我通过逻辑分析器观察到的与我发送的内容相关的内容。

一如既往,感谢您的参与和考虑

Calvin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们正在对此进行研究,并将很快回复给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bryan,

    是否有关于与ADS8922B通信的更新?

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

    下面是一些基本信息。 开机时,ADS8922B会将所有控制寄存器重置为所有0。 如果您喜欢这些设置,则无需配置寄存器。

    我正在看你的其他问题。

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

    更多信息(来自ADS8922B数据表第31页)提供了有关11位实时信息的一些清晰信息。

    在数据传输帧F的末尾:
    •如果SCLK计数器< 22,则IDR从SDI捕获不到22位。 在这种情况下,设备
    将帧F视为短命令帧。 在短命令帧的末尾,IDR不会更新和
    设备将帧视为no operation (NOP)命令。
    •如果SCLK计数器=22,则IDR从SDI捕获到22位。 在这种情况下,设备会处理
    帧F作为最佳命令帧。 在最佳命令帧的末尾,命令处理器
    将IDR的22位内容解码为有效的命令字。
    •如果SCLK计数器> 22,则IDR从SDI捕获超过22位;但是,仅捕获最后22位
    保留位。 在这种情况下,设备会将帧F视为长命令帧。 在长距离结束时
    命令帧,命令处理器将IDR的22位内容视为有效的命令字。
    对于任何数据传输帧中可以提供的最大时钟数没有限制
    f.但是,如上所述,请确保最后22位在CS上升之前转移到设备中
    边线构成所需的命令。

    换言之,假设SPI字是由控制器以16位突发发送的,您应该:
    1.将NCS降低。
    2.发送包含0b0000000000XXXXXX的16位,然后发送包含0bXXXXXXXXXXXXXXXX的第二个16位,其中X是您的cmd/addr/data位。
    3.将NCS拉高。

    如果系统允许11位突发,确保NCS引脚在它们之间保持低电平。 此外,如果发出的时钟超过22个,请确保您的通信是正确的。

    从寄存器(数据表第27页)读取数据涉及发送RD_REG命令,该命令是22位帧,然后是将NCS拉高。 接下来,将NCS调低,再发出22个时钟。 位D[21:14]将是寄存器的8位内容,后跟D[13:0],它们都是零。

    要读取转换的结果,只需拉低NCS并发出22个时钟。 位D[21:6],或前16位,将是您的转换结果。 (无需发出命令,这是设备的默认行为。)

    我希望这能有所帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我计划保留默认配置,因此应注意这一点。 到目前为止,我所做的是:

    1)将CONVST HI设置为开始转换
    2)提供转换完成时间的延迟(我使用了_DELAY CYCLES (1),比转换所需时间稍长,但现在应该没问题)
    3)将CONVST设置为低
    4)设置CS LOW (CS低)
    5)提供22*N时钟周期(在我的情况下N =3,因此总共66个周期)
    6)将CS设为高

    我肯定会从ADC (在saleae逻辑分析器上观察到)得到一个很好的响应,但我仍然需要验证我发送和接收的预期值。 我将在RM48/CCS线程上再发布一篇文章,因为我认为我在尝试将接收到的数据存储到缓冲区时没有使用正确的方法。

    感谢您付出的所有时间和努力!

    TI的受访者,一次可节省一个论坛帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,Calvin。

    RM48/CCC人员应该能够从这里开始提供帮助,但是如果您还有其他模拟或ADC问题,请告诉我们。

    ——布莱恩