zoukankan      html  css  js  c++  java
  • iic通讯 FPGA实现 mpu6050为例

     IIC最常用的通讯协议,但普遍用于单片机、arm这些,用FPGA实现大材小用,但对于菜鸡水平练练手很不错,考验串并转换和时序的控制。今天我就以mpu6050陀螺仪为例,实现FPGA的iic通信。

    1.首先我们还是研究mpu6050的datasheet 。mpu6050我就不用介绍了,直接看关键信息

      1)mpu6050上电延时至少30ms 。

      2)iic最大时钟为400khz。slave address为 b110100 x r/w,x位是mpu6050的sd0引脚。第二张是我使用模块的原理图,很明显能看到sd0引脚被拉低,所以模块sd0管脚悬空就行,因此slave address为 b1101000 r/w。

      3)iic的 start 与 stop 信号 

      4)如图,ack为低电平,nack为高电平。

      5)读写的时序,注意一下读写差别很大,datasheet给的图很明白,我就不过多解释

       6)实现读操作,以设备验证寄存器为例,这个寄存器不用初始化,默认值为0x68。

    2.手册看得差不多了,我先实现读操作。

      1.)下图是iic读时序仿真,起始位、ack、nack、停止位以及数据。

    一定记得要上电延时至少30ms,我之前没发现上电直接读,数据读不出来,后来怀疑上电的问题,仔细看datasheet才发现有上电延时。

       2)最后加入uart模块,将读出的数据通过串口发送显示,如图数据完美正确,说明读没问题,说明我们的时序没问题,下一步就对mpu6050进行初始化

     ⅠⅠⅡⅢⅣⅤⅥⅦⅠⅡ

    3.读时序都写好了,写时序就没问题了,关键我们还是要认真读datasheet,初始化寄存器和读数据寄存器我总结如下,详细说明建议看英文版的datasheet。

      1)初始化仿真与上板验证

        仿真如图

      2)将原始数据经过uart上传,显示数据不停地被读出,初步判定iic操作成功

      今天就完成到这儿,后面继续进行原始数据处理,待续。。。。

  • 相关阅读:
    codeforces
    codeforces
    HDU
    poj
    poj
    HDU Problem
    HDU 3555 Bomb 【数位dp】
    POJ 1942 Paths on a Grid【组合数学】
    杭电 Problem 2089 不要62 【数位dp】
    codeforces 486c-Palindrome Transformation【贪心】
  • 原文地址:https://www.cnblogs.com/hqz68/p/10535195.html
Copyright © 2011-2022 走看看