我正在研究一种FPGA设计,它用于连接ADS1258以采集模拟样品。
FPGA设计使用专用逻辑通过SPI进行通信,并使用DMA引擎将数据传输到内存。
到目前为止,该电路已被用于每100次采样一个通道。 但现在我们希望采样速度快得多,每10个。 根据数据表,这在单通道模式下不应该是问题。 但我对如何去做感到困惑,确切地说。
据我估计,我需要处理三个阶段: A/D转换时间,SPI数据传输时间,DMA写入内存时间。
DMA数据写入时间很短,通过在数据写入路径中添加FIFO,我可以忽略不计。
SPI数据传输时间将受SPI时钟速率的限制,该时钟速率需要低于8 MHz。 如果我能以8 MHz的速度运行,那么传输32位需要4个Us。 这会留下A/D转换时间。 我猜这实际上是我们8个人。 因此,为了达到最大采样率,SPI数据传输必须与转换重叠。 这是否正确?
但是,数据表警告说,如果在确定DRDY之前未读取旧数据,数据将会损坏。 所以我的第一个问题是:旧数据的SPI数据传输必须在下一个DRDY之前完成,还是只能开始? 如果SPI数据转换寄存器独立于A/D转换寄存器,那么我希望一旦SPI传输开始,数据将传输而不会损坏。 如果不是,则在我确定当前SPI传输将在采集前完成之前,我无法开始下一次采集。
我的下一个问题是,数据传输真的需要多少位SCLK? 数据表的图56显示了获取三个字节模拟数据的四个字节(32位)的数据。 但第一个字节显示为"status"(状态),其中注明固定信道模式为"disabled"(已禁用)。 "禁用"是否意味着不发送,我实际上只需要提供32个时钟即可获取模拟数据? 或者‘禁用’只是意味着第一个字节的内容没有意义吗?
一个额外的问题: 如果我只对数据的上16位感兴趣,我是否可以提前终止SPI传输? 我的意思是否定 ADS1258的芯片选择。
谢谢
杆