查看: 13843|回复: 2

STM32磁力计MPU9150/AK8975数据读取I2C总线波形和分析

[复制链接]
  • TA的每日心情
    奋斗
    2013-7-4 23:49
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-3-9 14:00:47 | 显示全部楼层 |阅读模式
    分享到:
    STM32磁力计MPU9150/AK8975数据读取I2C总线波形和分析

    stm32_ak8975_400k.JPG

    1.首先是起始操作(图中红色线条处)
    2.接下来是设备地址,共9个时钟,前面7个是地址,然后是读写标志,最后是MPU9150/AK8975应答标志。我们看到,前面7个数是:0001100,换算成16进制,就是0x0C。第8个是0,表明是写传输,第9个是0,是由MPU9150/AK8975芯片驱动的,表明MPU9150/AK8975芯片应答了这个地址。如果MPU9150/AK8975芯片没有应答这个0x0C地址信号,那么第9个数会显示1。
    3.接下来是STM32发送要读的MPU9150/AK8975芯片寄存器地址,共9个时钟。前面8个依次是:00000000,换算成16进制,就是0x00。第9个是0,是由MPU9150/AK8975芯片驱动的,表明MPU9150/AK8975芯片应答了这个操作。
    4.前面STM32发送完MPU9150/AK8975芯片设备地址0x0C,,寄存器地址0x00后,要告诉MPU9150/AK8975芯片,接下来STM32要读数据了。所以STM32重新发送了一个起始操作,表示在上图中的一个时钟。
    5.接下来,STM32重复发送MPU9150/AK8975芯片地址,在图中,我们看到9个数据位,前面7个依次是0001100,即0x0C,第8个数据位变成了1,表明接下来的是读操作。第9个是0,表明MPU9150/AK8975芯片应答了这个地址。
    6.接下来总线上出现了9个时钟,前面8个时钟对应的数据01001000,换算成16进制,就是0x48。这个刚好是MPU9150/AK8975芯片的ID.第9个时钟对应的数据是1,表明STM32不再需要读数据,即I2C总线中的NACK.
    7.由于数据读取结束,STM32发送结束标志。至此,通讯完成。

    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-12-25 21:34:32 | 显示全部楼层
    你好,我最近在搞MPU9150,用的是STM32开发板,但一直读取不出数据,能给我发个程序参考下么?谢谢,540305534@qq.com
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-8-16 21:59:10 | 显示全部楼层
    感谢分享,下载学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 20:38 , Processed in 0.146570 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.