问题导论

自从两个月前买到手ICM42688这款来自TDK的IMU后,就一直有数据读取偶尔异常的问题。

排查步骤1:

CSDN看到评论说是SPI极性问题,于是把SPI模式调整为模式3,再重新读写后发现,并不奏效。

链接:https://blog.csdn.net/NoDistanceY/article/details/106818331

读取仍然出错后,认为是芯片的问题,遂重新买了两个新的,再用来测试后发现好一点,但仍有数据读取错误的现象发生。

排查步骤2:

偶然想到会不会是SPI通信时,出现的错误

于是就找到了这篇博客https://bbs.elecfans.com/jishu_2221423_1_1.html

先用示波器抓取一次信号分析,再于官方手册进行比对,发现抓取的SPI时钟信号与手册要求不一致!

可以发现手册要求起始时SCLK,要求为高电平,而这里抓取后发现实际为低电平,所以这个问题导致了数据读取异常。

所以只需把连接SCLK的GPIO口配置为拉高即可。

经验总结

CS片选信号——低电平有效——GPIO配置拉高

MOSI, MISO——浮空即可

CLK时钟信号——据手册而定——GPIO一般为拉高

山和山不相遇,人与人要相逢