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.

[参考译文] ADS1256:ADS1256

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/665492/ads1256-ads1256

部件号:ADS1256

我在Raspberry Pi 3b上使用Waveshare A/D板。 该主板包含ADS156 A/D芯片。 我正在使用Broadcom C库在Python中编写驱动程序代码,并绑定到Python。  这不是软件问题。

此库没有明确的SPI_WRITE函数,而是具有SPI_TRANSFER函数。 调用此函数时,它断言CS并在MOSI上为8但值输出时钟(ads1256 DIN),同时从miso (ads1256 DOUT)中读取数据,从而从从属设备读取8位数据。

我认为这是读取数据(单次拍摄模式)所需的操作: 从ads1256 (参考数据表中的图30)读取数据时,我等待DRDY降低,然后向MOSI (DIN)写入RDATA命令,并读取返回的数据,即字节1,即MS字节。 然后,我执行两个附加SPI事务,将返回的数据读取为中间字节和LS字节。

所以我的问题是,这些额外的交易也会将数据发送到MOSI。 我应该发送什么数据? 我应该发送RDATA (0x01),0xff,0x00吗? 不能不发送任何内容。

我认为,SPI驱动程序中不具有只读函数的问题很常见,因此ads1256必须能够忽略这些写入,但这是推测。

您对此问题有何想法?

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

    您好,Aubrey,

    尽管SPI能够 进行全双工通信,但ADS1256只能使用半双工模式进行通信;因此,需要忽略某些字节的数据。

    [报价用户="Aubrey Page"]

    我认为这是读取数据(单次拍摄模式)所需的操作: 从 ads1256 (参考数据表中的图30)读取数据时,我等待DRDY降低,然后向MOSI (DIN)写入RDATA命令,并读取返回的数据,即字节1,即MS字节。 然后,我执行两个附加SPI事务,将返回的数据读取为中间字节和LS字节。

    所以我的问题是,这些额外的交易也会将数据发送到MOSI。 我应该发送什么数据? 我应该发送RDATA (0x01),0xff,0x00吗? 不能不发送任何内容。

    [/引述]

    发送"RDATA"命令时,您可能需要读取返回数据(以清除Pi上的数据缓冲区);但是,应忽略此返回数据。

    发送RDATA命令后,您将通过发送3个额外的NOP字节(0x00)来对A/D数据进行计时。 这些字节将分别构成MSB,Mid-Byte和LSB。

    当超频数据时,发送NOP字节而不是任何命令字节(如另一个RDATA字节)非常重要,因为这可能会导致ADC重新启动读取操作。

     

    我不太熟悉Pi上的SPI API,但一般来说,所有SPI函数通常都是写入SPI输出缓冲区的组合,等待SPI完成TX字节的计时和RX字节的计时, 和从SPI输入缓冲器读取RX字节。 我不知道任何标准的SPI命令,我认为所有命令都遵循上述模式,但会因供应商和/或设备而异。

    我希望这会有所帮助,
    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我相信你已经告诉了我与我的问题相关的两件事。 1)我需要忽略作为对RDATA命令的响应而接收的第一个字节。 2)执行另外3个SPI事务,发送NOP (0x00)并接收3字节的数据MS,中间数和转换数据的LS字节。