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.

ADS1291 spi 读寄存器无响应

Other Parts Discussed in Thread: ADS1291

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

会是什么原因呢?

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

  • Jason Shen

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

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

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

         

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

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

  • 我用的是1281也遇到了和你类似的问题 调了好久不知道问题出在哪
  • 我按照手册,上电后先给他复位信号,让它复位。

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

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

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

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

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

  • Hi Yiping Chen4

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

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

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

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

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

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

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

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

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

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

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

    要注意的东西很多:

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

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

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

    4.复位的时序要严格

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

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