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.

[参考译文] ADS1263:DOT/DRDY卡在0

Guru**** 2538950 points
Other Parts Discussed in Thread: ADS1263

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/633786/ads1263-dout-drdy-stuck-at-0

部件号:ADS1263

您好,

我正在尝试使用STM32F437处理器从ADS1263 SPI中写入和读取,但我在DOUT/DRDY上获得的数据始终为0。

我使用的SPI设置是:

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;  
SPI_InitStructure.SPI_NSS = SPI_NSS_soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;  
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;

SCLK频率为6 MHz (48 M / 8)。

要读取寄存器,请使用以下代码:

ADC_IN[0]= ADS1263_REG_CMD + REGX  // REGX = 0 .. 26.
ADC_IN[1]= 0;
SPI_ADC_ReadReg (ADC_In,ADC_OUT);

函数 SPI_ADC_ReadReg如下所示:

void SPI_ADC_ReadReg (u8 u8 * ADC_In,u8 *ADC_OUT)


/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)== set);

/*选择ADC:芯片选择低*/
SPI_ADC_CS1_LOW;
用于(int i=0;i<3+ADC_IN[1];i++)

/*通过SPI2外设发送半个字*/
SPI_I2S_SendData (SPI1, ADC_IN[I]);

/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== RESET;
}

/*等待接收字节*/
While (SPI_I2S_GetFlagStatus (SPI1,SPI_I2S_FLAG_RXNE)== RESET);

/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)== set);

/*返回从SPI总线读取的半个字*/
ADC_OUT [0]= SPI_I2S_ReceiveData (SPI1);

/*取消选择ADC:芯片选择低*/
SPI_ADC_CS1_HIGH;
}

 在逻辑示波器上,所有信号- CS,SCLK和MOSI均正常。 只有DOUT/DRDY卡在0。

你能告诉我我错过了什么吗?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ehud,


    如果您遇到通信问题,您可以检查以下几个事项。 但是,它首先有助于获得SPI通信的范围快照或逻辑分析器读取。 然后将它们与数据表中的时序图进行比较。 查看SCLK,DIN,DOUT和/CS可能会给出快速答案。

    另外,我会检查启动和/reset,以确保它们高,以便设备可以正常工作,而不是处于睡眠或重置模式。

    至于代码,我不是代码问题的最佳人选,但请查看SPI风味。 我认为STM32F437应该设置为SPI_CPHA_2Edge,而不是SPI_CPHA_1Edge。 请自行检查,但数据会在SCLK的下降边缘计时。 另外,检查整个通信的/CS是否为低电平。 如果您从寄存器读取或写入,则整个SPI事务的/CS应该较低,而不是字节到字节(在您的代码中,我认为它看起来不错,但我不是一个很好的程序员)。

    然后验证正时。 SCLK频率应为最大8MHz

    不管怎样,示波器应该是第一步。 一旦你得到了,你可以在这里公布结果.


    吴若瑟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Joseph:
    感谢您的建议。
    我将SPI设置更改为SPI_CPHA_2Edge,它很有帮助!!
    现在,我在DOUT / DRDY行上看到了正确的寄存器值。
    我在437中仍有一个问题需要阅读-但这可能是我尝试解决的另一个设置问题。

    再次感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ehud,


    我很高兴SPI CPHA变更成功了。 同样,如果您需要有关调试通信的更多帮助,请随时发布示波器快照或逻辑分析器输出。


    吴若瑟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Joseph

    所以我终于让ReadReg函数开始工作了。

    问题是:您必须读取前2个字节并丢弃它们。 因此,对于对此处感兴趣的任何人来说,都可以使用读取1个寄存器的设置和功能:

    设置:

     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
     SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//SPI_CPHA_2Edge
     SPI_InitStructure.SPI_NSS = SPI_NSS_soft;
     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;//如果使用SPI_BaudRatePrescaler_4,将创建垃圾数据im M25P128
     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
     SPI_InitStructure.SPI_CRCPolynomial = 7;

    功能:

    Void SPI_ADC_ReadReg (u8 * ADC_In,u8 * ADC_OUT)

     
     /*当DR在NOT emplty */中注册时循环
     while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)== set);

     /*选择ADC:芯片选择低*/
     SPI_ADC_CS1_LOW;
     用于(int i=0;i<3];i++)
     {

      /*通过SPI2外设发送半个字*/
       SPI_I2S_SendData (SPI1, ADC_IN[I]);

       /*当DR在NOT emplty */中注册时循环
       while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== RESET;

       /*等待接收字节*/
       While (SPI_I2S_GetFlagStatus (SPI1,SPI_I2S_FLAG_RXNE)== RESET);

       /*返回从SPI总线读取的半个字*/
       ADC_OUT [0]= SPI_I2S_ReceiveData (SPI1);
     }

    }

    再次感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Ehud,

    正确。 前两个返回字节(在REG + NUM命令字节期间)不重要,应丢弃。

    如果您对ADS1263有任何其他问题,请告诉我们!

    此致,
    Chris