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.

[参考译文] ADS8166:寄存器的 SPI 读/写问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/984857/ads8166-spi-read-write-problems-of-register

器件型号:ADS8166

您好!

你好。

我们的客户正在使用 ADS8166、他们有以下问题。

"使用数据表中描述的寄存器读取程序。 我无法读取任何寄存器。 我将 Raspberry Pi 与 spidev 搭配使用。 寄存器地址0x00的读数如下所示:
SPI.xfer2 ([0b00010000;29;0x00])#read 命令
DATA=SPI.xfer2 ([0b00010000;29;0x00])#根据数据表、无论要在此处发送什么
我所期望的是8位寄存器数据后跟两个零字节。
我得到的是两个字节(ADC 值)后跟一个零字节。

但是、我可以使用 spi.xfer2 ([0b00001000、29、1])更改 ADC 通道
我通过将其中一个输入固定到 GND、另一个输入固定到固定电压并从这两个输入之间交替获取数据来进行测试。 -> MOSI 线路也正常工作、MISO 也正常工作
我将逻辑分析仪连接到系统、但它只是验证我通过 RPI 获得的数据。
由于这个写入命令起作用、我试图盲目地将器件置于调试模式。 (在寄存器访问寄存器中写入 REG_ACCESS_BIits、并将0x01写入 Data_CNTL_Reg 0x10以启用调试模式)但这也失败了、并且 ADC 只为我提供了更多16位数据、这些数据与调试值不同。

我也使用逻辑分析仪检查了第二个 SDO 线路、但它始终保持低电平、因此会按预期停用。

我是否缺少对寄存器进行读取访问的内容?
是否缺少对写访问寄存器或除 Chan ID 寄存器之外的任何其他寄存器的写访问权限?
在读取寄存器值之前、我是否需要停止16位 ADC 数据输出?
如果是、如何停止输出? 我已经尝试关闭 ADC 模块的电源、但也失败了。
我是否需要使用某些特殊频率? 我已经尝试过400000Hz 800000Hz 1600000Hz
我是否需要一些特殊的中断/读取更多字节? 已经尝试   过 bburstread 6字节 SPI.xfer2 ([0b00010000,290x00,0b00010000,290x00])得到[ADC_MSB;ADC_LSB;0x00,16,29-0]->刚刚在正常帧之后返回我的前三个字节的消息。"

我们感谢你就此问题提出意见。 谢谢你。


此致、

Cedrick

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

    您好、Cedrick、

    请要求客户提供读取寄存器期间 SPI 总线捕捉的图像。  它应与下图类似:

    另请注意、读取寄存器命令需要传输帧、其中帧1是 RD_REG 命令、而在帧2中、您可以得到8b 寄存器的内容、后跟16个零。  对于所有其他命令、包括 NOP (无操作、全为零)、您将获得转换结果。

    没有停止转换的命令。  如果发送读取寄存器命令、转换器仍将转换、但输出将替换为8b 寄存器值。  您无需首先写入任何寄存器即可读取寄存器值。  为了写入配置寄存器地址04h 至11h、您必须首先将 aah 写入地址00h 处的 REG_ACCESS 寄存器。

    此致、
    Keith Nicholas
    精密 ADC 应用

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

    您好、Keith、

    你好。 感谢您的支持。

    这是总线的捕捉。


    逻辑捕捉显示了使用寄存器访问命令对寄存器0x00进行写入以及寄存器0x00读取之后的情况。 最后一帧应包含寄存器0x00的数据(170)、同时是寄存器0x00的另一个读取命令。 我附加了一个读取命令特写、以显示位对齐(Cpha=0 Cpol =0)和400kHz 的 Clock 频率。 两次访问之间 CS 线路的低电平状态不是预期的、但可以在代码中防止。 (逻辑分析仪 RPI 和 spidev 组合的副作用、因为它也适用于其他 SPI 器件)。


    此致、

    Cedrick

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

    您好、Cedrick、

    问题出在读取命令的帧1和帧2之间的额外/CS 低脉冲。  在这个/CS 低电平转换时、寄存器读取的结果被载入到 ADS8166输出寄存器中。  由于没有时钟被发出、它将这个帧解释为一个 NOP、然后在下一个帧中、它输出下一个转换数据结果。

    为了使寄存器读取操作正常工作、客户需要弄清楚如何消除这个额外的/CS 脉冲。  如有必要、它们始终可以通过 GPIO 线路控制/CS。

    此致、
    Keith