TI论坛
直播中

新疆切糕

13年用户 1266经验值
私信 关注
[问答]

使用STM32的SPI读取数据时,只有前两次数据是正确的,后续数据似乎全部发生了移位,为什么?


  • 我使用STM32的SPI对ADS131M04进行读写,SPI速率为10.5MBits/s,ADC的CLKIN频率为1MHZ,为占空比50%的PWM脉冲生成。
    每次对ADC进行读取时,会先启动1MHZ CLKIN时钟,然后发出SYNC脉冲重置 ADC,再监控DRDY引脚,如果产生下降沿,关闭时钟,进行SPI读取。
    但是我发现,只有刚上电前两次读取的数据是正常(或者接近正常的),到第三次读取时,ADC发出的DOUT数据就发生了明显移位现象,但是该数据仍然可以通过CRC校验。

    例如第三次我读到了450f00057ffbffd625ffcc8effd31ef63c00,抛去CRC的8bit补0,450f00057ffbffd625ffcc8effd31ef63c的CRC值是0,满足校验。

    PS: 已经确认AINP和AINN引脚的电压无震荡,符合预期,
    下图上面的是SPI的10MHZ的SCK,下面是SDO

回帖(2)

赖嘉宁

2024-11-22 17:02:12
您是否已验证了寄存器可以正确读写,即寄存器写入后可以正确读出来?如果可以的话,您可以附上寄存器配置吗?也建议读下STATUS 寄存器的值,看是否有报错?
同时您可以附上读取转换结果的DRDY、SYNC、CS、SCLK、DOUT信号时序波形吗?
举报

哼小曲

2024-11-23 16:27:10
根据您的描述,您在使用STM32的SPI读取ADS131M04数据时遇到了数据移位的问题。以下是一些可能的原因和解决方案:

1. SPI时钟速率过高:您提到的SPI速率为10.5MBits/s,而ADC的CLKIN频率为1MHz。过高的SPI时钟速率可能导致数据传输不稳定。您可以尝试降低SPI时钟速率,例如将其降低到5MHz或更低,以查看是否解决了数据移位问题。

2. 同步问题:在SPI通信中,确保主设备和从设备之间的时钟同步非常重要。您提到在读取数据之前会发出SYNC脉冲重置ADC。请确保SYNC脉冲的持续时间和时序正确,以确保ADC正确地同步到SPI时钟。

3. 硬件连接问题:检查您的硬件连接,确保SPI线和ADC的CLKIN线连接正确且无松动。不良的硬件连接可能导致数据传输不稳定和移位。

4. 软件时序问题:在您的代码中,确保在启动CLKIN时钟、发出SYNC脉冲、监控DRDY引脚和进行SPI读取之间的时序正确。错误的时序可能导致数据移位。

5. CRC校验问题:您提到数据可以通过CRC校验,但仍然存在移位现象。请检查您的CRC校验算法是否正确实现,以及是否正确地处理了CRC校验结果。

综上所述,您可以尝试以下步骤来解决数据移位问题:

1. 降低SPI时钟速率。
2. 检查SYNC脉冲的时序和持续时间。
3. 检查硬件连接。
4. 检查软件时序。
5. 检查CRC校验算法。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分