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.

[参考译文] ADS7066:STM32H743 SPI 模式 0 发出读取 ADS7066 寄存器的问题

Guru**** 2812305 points

Other Parts Discussed in Thread: ADS7066

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1612713/ads7066-stm32h743-spi-mode-0-issue-reading-ads7066-registers

器件型号: ADS7066

您好:

我在 STM32H743BIT(SPI 主器件)和使用 SPI 模式 0 (CPOL=0、CPHA=0) 的 TI ADS7066IRTER ADC 之间存在 SPI 通信问题。我写入一个配置寄存器并立即读回它、但读取的值与写入的值不匹配。 逻辑分析仪显示正确的 MOSI 数据、但 MISO 通常返回 0xFF 或 0x80、SPI 解码器报告“设置不匹配“。

写入/读取序列为:

SPI_ADS7066_writeSingleRegister (hADS7066、GENERAL_CFG_ADDRESS、OPMODE_CFG_CLK_DIV_6);

IF (SPI_ADS7066_readSingleRegister (hADS7066、GENERAL_CFG_ADDRESS)!= OPMODE_CFG_CLK_DIV_6)

throw (EMBL_ERROR);
}

使用的写入和读取函数:

void SPI_ADS7066_writeSingleRegister(处理程序 hADS7066、uint8_t 地址、uint8_t 数据)

PSPI_ADS7066DESC pADS7066DESC =(PSPI_ADS7066DESC) hADS7066;
uint8_t dataTx[4]={0};
Uint8_t numberOfBytes = SPI_CRC_ENABLED (pADS7066DESC)? 4:3;
EMBL_RETCODES ret;dataTx[0]= opode_WREG;
dataTx[1]=地址;
dataTx[2]=数据;
IF (SPI_CRC_ENABLED (pADS7066DESC))
dataTx[3]= SPI_ADS7066_calculateCRC (dataTx、3、0xFF);do{
RET = WRSPI_TRANSMIT (pADS7066DESC->hSPI、dataTx、numberOfBytes);
} while (ret == EMBL_BUSY);
}uint8_t SPI_ADS7066_readSingleRegister(处理程序 hADS7066、uint8_t 地址)

PSPI_ADS7066DESC pADS7066DESC =(PSPI_ADS7066DESC) hADS7066;
uint8_t dataTx[4]={0};
uint8_t dataRx[4]={0};
EMBL_RECADES ret;dataTx[0]= opode_RREG;
dataTx[1]=地址;
dataTx[2]= opode_NULL;do{
RET = WRSPI_TRANSMIT (pADS7066DESC->hSPI、dataTx、3);
} while (ret == EMBL_BUSY ); do {
RET = WRSPI_RECEIVE (pADS7066DESC->hSPI、dataRx、3);
} while (ret != EMBL_OK); return dataRx[0];
}

我附上一些图、其中显示了使用示波器获取的时钟信号和使用逻辑分析仪获取的所有信号。

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

    您好 Guillermo、  

    感谢您在 TI E2E 论坛上发帖!

    您能否分享一个包含 4 条数字线路的示波器图像?  

    从共享的图像中、第 1 个时钟似乎可能会偏移逻辑分析仪并导致设置不匹配。  

    如果是这种情况、它将读取预期的 0x080106、对吗?  

    这个第 1 个时钟也可能影响 ADS7066 命令通信、您能否确保满足数据表表表 6.6 中的时序要求?  

    同一帧中出现的 0xFFFF 是来自 ADC 的数据、如果没有发出寄存器读取命令、ADC 将输出转换数据。 满量程是否是所配置通道的预期输出?  

    提醒一下、当从寄存器读回值时、第 1 帧应具有读取命令以及地址、然后寄存器内容将在下一帧中输出。  

    也就是说、第 2 个帧似乎输出 0x0、这可能是因为前一个帧被用作读取寄存器命令。 SCLK 时序的另一个可能问题可能是最后一个 SCLK 的宽度、此占空比不匹配可能会导致最后一个位丢失、从而进一步移动 SPI 命令中的数据并导致其他问题。 SCLK 占空比是否至少与 24 或 32 个主 SCLK 时钟保持一致?  

    此致、  

    Yolanda