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操作成功

今天就完成到这儿,后面继续进行原始数据处理,待续。。。。
iic通讯 FPGA实现 mpu6050为例的更多相关文章
- MPU6050首例整合性6轴的姿态模块(转)
源:MPU6050首例整合性6轴的姿态模块 Mpu6050为全球首例整合3轴陀螺仪.3轴加速器.含9轴融合演:MPU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速 ...
- STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点
近日公司的项目重心要往米思齐的Arduino图形化编程上转移了,需要我将STM32和Arduino的IIC通讯调通.之前Arduino并没怎么使用过,仅仅是将超声波的代码移植成TOF激光测距而已.网上 ...
- 用Verilog实现IIC通讯
注意,此代码是错误代码,并不能实现想要的结果. 之所以留着,因为里面的enable 是独立开来的思想值得借鉴.就是控制单元和运算单元分开(我也是借鉴别人的实现思想).具体用verilogHDL实现II ...
- LPC1768的iic通讯
LPC1768有三路IIC,其中IIC0支持高速模式和plus模式,另外两路是普通IIC,使用IIC的过程如下 首先依然是打开IIC时钟,同时打开GPIO时钟 然后配置引脚为IIC功能 另外,因为ii ...
- 基于esp32的IIC通讯
本文源码地址在:http://download.csdn.net/download/noticeable/9962029 IIC 通讯应该是当代比较常用的几种通讯方式之一,其无需特殊的IO接口,连线方 ...
- Verilog实现IIC通讯第二版
HMC5883三轴磁力传感器IIC通讯模块的VerilogHDL的实现 上一版并没有实现我想要的功能 0.0.1版 正在修订中 2013/9/2 //date :2013/7/7 //desi ...
- 「STM32 」IIC通讯原理及其实验
I2C两线式串行总线通讯协议,它是由飞利浦开发的,主要用于连接微控制器及其外围设备之间,它是由数据线SDA和信号线SCL构成的,可发送和接收数据即在MUC和I2C设备之间,I2C和I2C之间进行全双工 ...
- 填坑-关于IIC通讯
01.概述 在之前的文章中<STM32IIC详解>中详细讲解了IIC协议,并且使用是NXP的官方手册,demo示例使用IIC读取RTC芯片,运行正常,没有任何问题.并且更新了<II ...
- IIC通讯协议(非原创,转载他人,用于学习)
I2C协议:1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效性 6.数据传输 IIC详解 1.I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2.IIC总 ...
随机推荐
- 小米2S 小米手机如何手动升级到开发版
1 从官网下载系统的更新包,比如对于小米2S,从下面的网址下载. http://www.miui.com/download-2.html 2 下载完成之后,放到手机的任意文件夹下,比如下面的S ...
- C++学习之命名空间
在C++中,命名空间(namespace)的目的是为了防止名字冲突.每个命名空间是一个作用域,在所有命名空间之外,还存在一个全局命名空间(global namespace),全局命名空间以隐式的方式声 ...
- mac 下安装Anaconda Python
# 将anaconda的bin目录加入PATH echo 'export PATH="/Users/work/anaconda/bin/:$PATH"' >> ~/.b ...
- mac 下安装caffe(一)
1.brew install --build-from-source -vd boost boost-python 这一步出错:libtool: unrecognized option `-stati ...
- DM8168 dead JTAG clock
针对新板调试,不针对EVM板. TI XDS560连上DM8168 20pin仿真接口 launch 8168.ccxml,右击CortexA8,选择Connect Target 出现错误例如以下: ...
- 【Swift】学习笔记(八)——类和结构体
1.类和结构体的定义 <pre name="code" class="html">struct Resolution { var width = 0 ...
- 【Unity】用Shader编程实现3D红心
有些形状,即使没有3D美术设计师提供模型,也能够用代码生成. 对于想保持原创性不想借用他人模型的独立开发人员来说,这无非是一个非常重要的途径. 今天献给大家的是用Shader编程实现的一颗红心,寄托下 ...
- luogu3379 【模板】最近公共祖先(LCA) Tarjan
LCA的Tarjan算法是一个离线算法,复杂度$O(n+q)$. 我们知道Dfs搜索树时会形成一个搜索栈.搜索栈顶节点cur时,对于另外一个节点v,它们的LCA便是v到根节点的路径与搜索栈开始分叉的那 ...
- C语言strdup()函数:复制字符串【转】
本文转载自:http://c.biancheng.net/cpp/html/166.html 头文件:#include <string.h> 定义函数:char * strdup(cons ...
- ubuntu安装vmware 64位
1.从官网上获取http://www.vmware.com/products/workstation/workstation-evaluation.html 2.执行安装程序 chmod +x VMw ...