TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1291 spi 读寄存器无响应

刚拿到的板子,初始化时通过SPI读取 ADS1291的寄存器的值,用示波器看,命令成功发送出去了,但是DOUT一直没有数据出来。

会是什么原因呢?

Jason Shen:

是自己做的板子吗?新打的板子先检查下硬件是否有问题,主要是检查引脚的静态电压,然后再确认通信是否正常。

shaokai Lin:

回复 Jason Shen:

Jason Shen

     是自己做的板子,做了几块,都是一样的现象。

     硬件上没有发现什么问题,引脚START给高电平后,DRDY引脚能够输出脉冲信号。

     然而就是SPI通信时,读取ADS1291寄存器值,DOUT从来都没有数据出来。

     

shaokai Lin:

回复 shaokai Lin:

shaokai Lin:

回复 shaokai Lin:

如上图, 上电后,我尝试读取寄存器ID的数值,于是发送0X20,0X00,然后读取数据。但DOUT并没有数据出来。

读取其他寄存器也是一样的现象。

Yiping Chen4:

回复 shaokai Lin:

我用的是1281也遇到了和你类似的问题调了好久不知道问题出在哪

shaokai Lin:

回复 Yiping Chen4:

我按照手册,上电后先给他复位信号,让它复位。

之后我用IO口启动ADS1291进行采样,DRDY引脚会定时输出信号,然后触发MCU中断读取数据,是能够读出数据的,并且格式与手册一样(数据对不对暂没有去分析,但前面有固定数值的24bit的状态码)!

然而请求写、读寄存器等命令,DOUT都是一点反应都没有。

即便我在上电后发送SDATAC命令,再请求读取寄存器,DOUT也同样没有反应。

更加奇怪的一个现象是,一旦复位引脚下拉后,过几十us,DIN居然被ADS1291自动拉高了(这里绝对不是被MCU拉高的,因为我跑到这一步后就强制while(1)了)。。。

Yiping Chen4:

回复 shaokai Lin:

我也是按着手册来的 上电复位后 drdy会等间隔输出 dout也可以读到数据 但是我读写寄存器 dout就没有数据了 

shaokai Lin:

回复 Yiping Chen4:

Hi Yiping Chen4

    我这边也是跟着手册做的,我用IO控制START引脚,复位后,START拉高会使DRDY等间隔输出,拉低便停止。

    关键是寄存器的读写总是没反应,DRDY输出信号触发中断后,MCU去读取数据,倒也是有数据出来,格式也跟手册对的上。

    无奈读写寄存器总是失败,不知道为什么,而且DIN引脚在复位后总是被ADS1291器件拉低。

shaokai Lin:

回复 shaokai Lin:

现在大部分命令写进去有效了,包括START STOP RESET STANDBY WAKE 等系统命令,但其他命令都无法写进去(包括SDATAC RREG WREG等)。

手册36页说,默认的上电后为RDATAC模式,必须在发送其他命令之前写入SDATAC命令,然而,我发现SDATAC命令即便没有写入,也是可以写大部分系统命令的(START STOP 这些等等)。

并且RDATAC模式下,读取数据是无需发送读操作码的。

而在RDATA模式下,每次读取数据都要发送读操作码。

我尝试写入SDATAC,使之不再是RDATAC模式,但是当数据出来时,一旦SPI有时钟信号,DOUT就有数据出来,而不是等待我的读操作码。

也就是说,我的SDATAC命令写入是不成功的。

这到底是为什么呢?这个命令在手册中说对时钟什么的没有特殊要求,怎么这么难调~

shaokai Lin:

回复 shaokai Lin:

折腾了几天,问题总算解决。

要注意的东西很多:

1.SPI要设置CPOL = 0;CPHA = 1;(DATASHEET P10)

2.SPI使用1MHz为宜,因为读取寄存器时,要求SPI是在为ADS1291主时钟的2倍,我这里使用内部时钟(512KHz).

3.在复位完成、写入SDATAC命令前不要开启DRDY的中断(我在中断触发中读取数据)

4.复位的时序要严格

5.每条指令之间必须单独操作CS的拉高拉低(规格书有提到)

反正就是要吃透规格书,很多注意的地方,一个不小心经常就会失败。

赞(0)
未经允许不得转载:TI中文支持网 » ADS1291 spi 读寄存器无响应
分享到: 更多 (0)