OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4683|回复: 1

记录STM32调试MPU6000的SPI通信踩过的坑

[复制链接]

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-10
在线时间
6 小时
发表于 2021-4-16 10:40:02 | 显示全部楼层 |阅读模式
本帖最后由 velonica 于 2021-4-16 10:43 编辑

昨天搞了一天,到晚上终于调好了。发出来防止后人踩坑
MPU6000和MPU6050的区别在于,MPU6000支持最高1MHz的SPI通信,另外两者都支持I2C通信,但速率较低(但我还是要说,我用SPI真是闲得蛋疼)
SPI读写配置:
模式3:高电平空闲,第二个边沿采样
SPI通信速率要小于等于1MHz
流程:

->片选


->写第一个字节:R/W+7位地址(write 0, read 1)


->读/写第二个字节:读/写8位数据


->取消片选


(一定要注意不是每个字节都片选,不是每个字节都片选!每个字节都片选可能导致能读不能写,我就是栽在这里了)
注意事项
  • MPU6000支持的SPI最高速率是1MHz
  • SPI模式是模式3(即时钟空闲极性为高,第二个边沿采样)
  • 使用软件片选,没试过NSS_OUTPUT(NSS_OUTPUT是个坑,建议真正测过时序后使用,可能会有问题)【SPI通讯模式太复杂。 比如常见的SPI flash,需要一个CS拉低,然后连续几个字节,才能拉高CS。 而SPI DAC类的,需要每个字节后,都拉高CS来确认输出。 所以,当初设计SPI硬件NSS的时候,就没法实现主动CS拉低拉高了。——引自[某网友](http://www.armbbs.cn/forum.php?m ... id=86291&fromuid=58)的回答,不保证正确性,仅供参考】
  • 检查是否按照上面的流程操作
  • 时钟引脚的初始状态最好配置为高(即时钟空闲),以防万一
  • 片选引脚我用的是开漏加外接上拉电阻,推挽应该问题也不大吧,没试过
  • 剩下两个引脚就是推挽复用

如何测试SPI读
上电后什么都不做,延时1s后,直接读取0x75寄存器看它等不等于0x68,读取0x6B寄存器看它等不等于0x40。都等于则SPI读大概率没问题(见下)。
但还有一种情况需要注意:就是用SPI模式0(空闲极性低,第一个边沿采样),然后采用片选->第一个字节->取消片选->片选->第二个字节->取消片选.....这种流程。这种流程可能会导致读没问题,但写寄存器无效
如何测试SPI写
上电后,延时1s(看数据手册没理解错的话4ms就够了,但1s肯定没问题,测试没问题再缩小),然后写0x6B这个寄存器(上电后初始值是0x40,睡眠模式,不解除睡眠模式其他寄存器也没法写入,解除睡眠模式的方法就是给这个寄存器赋值),赋值为0x00,延时1s后读,看是不是等于0x00,如果还是等于0x40那么SPI写就有问题



用的是STM32F405RGT6,如果芯片频率较快的话,要注意一下时序图里面片选信号有效(低电平)后8ns时钟才可以开始下拉,最后一个时钟上拉后500ns,片选信号才可以设为无效(高电平)。我的板子没有用延时也通过了,我就没管了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-4-16 18:38:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 03:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表