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.
我在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