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.

[参考译文] ADS7961:ADS7961 SPI 手动模式接收错误/垃圾帧。

Guru**** 2507255 points
Other Parts Discussed in Thread: ADS7961

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/869875/ads7961-ads7961-spi-manual-mode-receiving-wrong-garbage-frames

器件型号:ADS7961

您好!  

我一直在尝试使用 SPI 使用 STM32f07从 ADS7961读取值、但我只能在微控制器的 SPI 接收寄存器上读取垃圾值。

这可能是因为我在 SPI 上发送数据时错误地打包数据。

我正在尝试从第二个通道读取启动器的数据、从而发送0x1100、即手动模式和第二个通道的地址。

黄色的是时钟、蓝色的是微控制器输出(MOSI)(数据采集是第3个帧)

下面是上述帧的响应  

黄色是时钟、蓝色是 ADS 输出(MISO) (数据采集是第3个帧)

您可以看到、接收到的数据应包含通道编号2 (根据发送的配置)、但它不会按预期工作。

我认为传输的帧是正确的、代码也在下面提到。 但我错过了一些东西。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void ManualModeTest ()
{
uint8_t channel = 2;
uint8_t dataTx[2]={0}、dataTxSend[2]={0}、dataRx[2]={0};
uint16_t dataTx = TransPack (channel);
memcpy (dataTx、tempDataTx)、tempfliveTx;tempDatatpsizeTx
dataTxSend、2);
ADS_TransmitReceiveFrame (dataTxSend、dataRx、2、 HAL_MAX_DELAY);//dataRx 是接收到的数据、2是大小、HAL_MAX_DELAY 是超时
}

void flirr (uint8_t * arr1、uint8_t * arr2、uint8_t size)
{
for (int i = 0;i <

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

SPI 设置如下:

 hspi1.instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_MASTER;
 hspi1.Init.direction = SPI_DIRECT_2LINES;
 hspi1.Init.DataSize = SPI_DATASIZE_8位;
 hspi1.Init.CLKPolarity = SPI_POLICY_LOW;
 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi1.Init.nss = SPI_NSS_soft;
 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi1.Init.TIMode = SPI_TIMDE_ENABLE;
 hspi1.Init.CRCCalcirc= SPI_CRCCALCULATION_DISABLE;
 hspi1.Init.CRCPolynomial = 7;
 hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATAIZE;
 hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

任何帮助都是值得赞赏的。

提前感谢。

Pranay

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

    您好!

    对于该器件、SDI 数据在 SCLK 的上升沿被锁存、这意味着它需要在上升沿保持稳定、并在 SCLK 的下降沿改变状态。

    目前、您在 SCLK 的上升沿有 SDI 改变状态。 这 可能 会导致通信错误。

    请更改此设置并重试、您共享的命令应正确转换通道2。

    另请注意、在发出 SDI 命令后的第二个帧之前、将不会看到转换结果

    此致

    Cynthia

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

    您好、Cynthia、  

    您校正了帧。  正是由于 SDI 在 SCLK 的上升沿更改状态、导致了所有问题。 实际上、我是手动控制 CS (芯片选择)引脚、但忘记关闭在 STM32F07中启用的 TI 模式。 关闭它可以解决所有问题。

    再次感谢您的快速回复。

    此致

    Pranay