问题导论
自从两个月前买到手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一般为拉高