ADI 技术
直播中

李海

7年用户 164经验值
私信 关注
[问答]

关于AD7192的状态寄存器问题

之前的一个问题描述有点错误,重新描述一下问题。
我现在使用的是连续转换模式,使能了双差分通道,DATA_STA为1。每次我先读取DOUT/nRDY是否为低电平,然后就读取数据寄存器,这时我发现有时候数据寄存器的nRDY位为1,这次的数据到底有效还是没效?这种现象是正常现象吗?
还有个问题就是我发现有的时候两次读取的数据都是同一个通道的,会漏掉某个通道的一次转换数据,概率大概为0.3%.这种现象又是什么导致的?

回帖(5)

郝思雨

2018-7-27 09:50:57
通常是SPI未能及时读取数据寄存器中的数据导致的
芯片的ODR为多少,上位机是通过中段去处理转换完成信号的吗?
举报

李海

2018-7-27 10:05:58
引用: 深圳王先生 发表于 2018-7-27 09:50
通常是SPI未能及时读取数据寄存器中的数据导致的
芯片的ODR为多少,上位机是通过中段去处理转换完成信号的吗?

芯片ODR双通道下为100Hz。上位机使用的HAL库的HAL_SPI_Transmit和HAL_SPI_Receive,先发送读数据寄存器,再阻塞式等待结果,没有使用中断
举报

郝思雨

2018-7-27 10:10:59
引用: msvsudsdf 发表于 2018-7-27 10:05
芯片ODR双通道下为100Hz。上位机使用的HAL库的HAL_SPI_Transmit和HAL_SPI_Receive,先发送读数据寄存器,再阻塞式等待结果,没有使用中断

很有可能是因为数据读取不及时(太频繁),导致数据寄存器被新的转换结果覆盖(新的结果仍然未完成),检查一下系统的查询周期。
在获取到转换完成的信号后,再发送指令 读取数据寄存器。
ADC始终是从机,不会主动发SPI时钟。
举报

李海

2018-7-27 10:18:46
引用: 深圳王先生 发表于 2018-7-27 10:10
很有可能是因为数据读取不及时(太频繁),导致数据寄存器被新的转换结果覆盖(新的结果仍然未完成),检查一下系统的查询周期。
在获取到转换完成的信号后,再发送指令 读取数据寄存器。
ADC始终是从机,不会主动发SPI时钟。 ...

这个很没有道理,我每次都先查询DOUT/nRDY是否为低电平,然后就直接读取数据寄存器。很奇怪的是只会出现在32bit的数据寄存器的8位状态寄存器的nRDY位上。我一开始怀疑是不是SPI通信有干扰和噪声,所以我对每次数据的状态寄存器的每一位都进行有效性验证,还开了奇偶校验,最后结果是只有这个nRDY位会出现异常的‘1’,奇偶校验位和其它0位都是正常的。
 
所以应该不是通信问题。是否推荐在DOUT/nRDY为低电平后等待一段时间再进行数据寄存器读取操作?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分