8533|21

1403

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

【LPC54100】 I2C 读写MPU6050 [复制链接]

 
本帖最后由 shinykongcn 于 2015-4-21 01:56 编辑

时间过的好快的说~~转眼距离上个帖子都快一个月了!哎,惭愧啊,给力的论坛,终于拿到官方版的板子,可以跨平台使用LPCXpresso了,之前由于LPCXpresso不支持Jlink调试,所有万坑板只能在windows下面玩,终于从坑里跳出来了!
I2C(Inter-Integrated Circuit)总线是两线式串行总线,由philips公司开发,(nxp出自philips,自家技术)仅有两根线就可以通信,一根时钟SCL,用于同步,一根数据SDA,用于传输数据。

从机地址分为7位和10位,平时使用较多的位7bit的地址。I2C通信是双向的,由主机控制,数据传输采用高位在前(MSB)的方式,即先传送高位地址数据。

I2C通信分为读和写,读写控制由地址位后的1bit控制,为0时表示发送(写),1时表示接收(读)。以MPU6050的7bit地址0x68为例(MPU6050可以设置两种地址,由pin9控制,低为0x68;高为0x69)。
0x68 = 110 1000
如果加1bit读写位可以组成8bit刚好一个字节(byte)的数据,有人因此使用一个8位的地址来进行数据传送,这样的好处时只需写一个数据传输方法即可,通过不同的地址来实现读写操作。


接下来连接mpu6050,这里有一点小风波,我直接使用两端都是母口的杜邦线,所有就使用FTDI口的VCC给mpu6050供电(对了,前几天感谢@nmg和另外一位坛友,我换到来官方板子,哈哈~~各位表打我,小得瑟。。)结果发现mpu6050的指示灯只亮了一点点,感觉电压不够,以为mpu模块坏了,后来换到之前买的ble开发板上面,发现好的,才怀疑时电压问题,于是重新找vcc,最后选了J7插座的+5.0接口,就好了!MPU6050的SCL ,SDA分别接LPC54102的J3口的9,10。

来个图,醒醒脑,大半夜的:





MPU的读写寄存器操作步骤为:寄存器地址->读写数据,这里我们需要做的就是通过I2C发送一个自己数据117,然后读取一个字节数据,再验证读取回来的数据是否正确即可。

然后就是Lu代码了,虽然有坛友已经使用硬件I2C完成了MPU6050的操作,但还是决定按自己的路子来一遍,不然就只能做“大自然的搬运工了”。开发环境使用LPCXpresso,挺好用的,跨平台,还有Free版本可以用,我喜欢~~



直接简单复制rom_i2cm_polling工程,使用同步阻塞方式操作I2C,刚开始,就不讲究了,怎么简单怎么来。。

看MPU手册,MPU6050使用400kbit/s的速率,跟例程中一致,无需更改,重新 #define MPU_ADDR 0x68 一个i2c从机地址。

开始验证I2C通信是否正常,方法为读取MPU6050的WHO_AM_I寄存器(117),默认应返回0x68.

例程只需做少许修改即可
  1. /* Write address, write 1 btye, read 8 bytes back */
  2.                 mXfer.slaveAddr = I2C_ADDR_7BIT; // 0x68
  3. #define MPUADDR_WHO_AM_I 117
  4.                 tx[0] = MPUADDR_WHO_AM_I;
  5.                 mXfer.txBuff = tx;
  6.                 mXfer.rxBuff = rx;
  7.                 mXfer.txSz = 1;
  8.                 mXfer.rxSz = 1; //  1 byte!!!

  9.                 /* I2C master driver will block if blocking flag is used */
  10.                 mXfer.flags = ROM_I2CM_FLAG_BLOCKING;

  11.                 /* Start transfer and wait for completion */
  12.                 ROM_I2CM_Transfer(i2cmHandle, &mXfer);

  13.                 /* Check status of the transfer */
  14.                 DEBUGOUT("I2C transfer completed: status = %x\r\n", mXfer.status);
  15.                 if (mXfer.status != LPC_OK) {
  16.                         errorOut("Error during I2CM transfer\r\n");
  17.                 }
复制代码

手头没用串口,打算直接用debug看结果,于是在if (mXfer.status != LPC_OK)  处放置一个断点,方法为在该行左侧双击边框。然后build->debug,激动人心的时刻到了。

LPCXpresso调试还真方便,只需鼠标移上去,就可以现实变量。由于之前做开发使用eclipse比较多,所以这个环境用起来也比较顺手。duang~~ 代码停在断点处,赶紧查看状态,发现出现的不是该有的LPC_OK,而是ERR_I2C_SLAVE_NOT_ADDRESSED!!! Damn!大半夜的,惊吓我。



找不到从机地址,好伤心~~是不是插针没接好呢,找出万用表,测了发现没问题,奇怪了,找了好久,期间还猜测这个错误代码是什么情况。。。代码检查也没发现问题,最后眼睛落在gpio初始化上,是不是我接错线了,代码里面使用的是P0_23、P0_24, 翻出原题图,一对照,发现我接J3的 9、10脚是I2C2的,汗。。。赶紧找I2C0的引脚,发现连在了J1的1、2脚,粗心出大乱子。。。重新接好,调试,OK!!!!!!

返回LPC_OK:



验证MPU6050返回数据,I2C读取的数据保存在rx中,这里注意我们只读取了1个字节的数据,因为MPU6050的WHO_AM_I返回的只有一个字节,详情看数据手册,rx[0]的值确实为0x68,可以收工了!











最后上点资源,刚搜集的,方便后面开发。。。

I2C 总线规范_中文版(免费).pdf (847.49 KB, 下载次数: 30)

MPU6050-英文原版数据手册.pdf (1.42 MB, 下载次数: 25)

MPU-60X0寄存器中文版V4.0.pdf (1.27 MB, 下载次数: 37)

MPU6050寄存器英文版本.pdf (899.87 KB, 下载次数: 21)

MPU-6000.6050中文资料.pdf (718.97 KB, 下载次数: 37)

MPU6050-DMP指南.pdf (778.82 KB, 下载次数: 31)

MPU6050原始数据分析.pdf (1.93 MB, 下载次数: 28)

MPU6050最原始_官方.zip (68.34 KB, 下载次数: 34)

圆点dmp库.zip (27.26 KB, 下载次数: 28)





此帖出自NXP MCU论坛

最新回复

谢谢,确实是  需要外接上拉电阻,才可以输出高电平。  详情 回复 发表于 2016-1-13 10:07

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名HELLO_WATER
 

回复
举报

1403

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
消灭沙发沙发沙发~~~~~~~
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
顶起
此帖出自NXP MCU论坛
 
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

4
 
很不错,但不是很完善,如何能简单讲解一下MPU6050芯片的功能,并谈谈和I2C通信的思路就更好了。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

5
 
zhaojun_xf 发表于 2015-4-21 09:03
很不错,但不是很完善,如何能简单讲解一下MPU6050芯片的功能,并谈谈和I2C通信的思路就更好了。

多谢指点,有时间以后补一贴哈~~
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

6
 

多谢支持~~
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

940

帖子

0

TA的资源

纯净的硅(高级)

7
 
不错,楼主好快,拿到板子就用上了,我还在做功课,昨晚刚了解双核跑闪烁灯的事情
此帖出自NXP MCU论坛
 
 
 

回复

5263

帖子

239

TA的资源

管理员

8
 
wgsxsm 发表于 2015-4-21 09:33
不错,楼主好快,拿到板子就用上了,我还在做功课,昨晚刚了解双核跑闪烁灯的事情

不懂的可以看看54102先行者们的帖子
此帖出自NXP MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

940

帖子

0

TA的资源

纯净的硅(高级)

9
 
nmg 发表于 2015-4-21 09:47
不懂的可以看看54102先行者们的帖子

恩,有参看他们的帖子,不过还是需要自己走一遍例子才能理解。
此帖出自NXP MCU论坛
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

10
 
可以用jlink,装gnuarmeclipse插件,然后装segger的驱动
此帖出自NXP MCU论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

11
 
不错呀,我也之前也驱动过
此帖出自NXP MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
新手学习中
此帖出自NXP MCU论坛
 
 
 

回复

5

帖子

3

TA的资源

一粒金砂(初级)

13
 
感谢楼主资料!
此帖出自NXP MCU论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢分享 谢谢分享 谢谢分享 谢谢分享
此帖出自NXP MCU论坛
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

15
 
强仔00001 发表于 2015-4-21 17:43
不错呀,我也之前也驱动过

关注你好久了,跟踪你学习,哈哈~~
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

16
 
freebsder 发表于 2015-4-21 13:18
可以用jlink,装gnuarmeclipse插件,然后装segger的驱动

这个还真每研究过,发个帖子传播一下啊,哈哈~~
此帖出自NXP MCU论坛
 
个人签名HELLO_WATER
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

17
 
shinykongcn 发表于 2015-5-6 20:55
关注你好久了,跟踪你学习,哈哈~~

谢谢关注
此帖出自NXP MCU论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

18
 
我也是使用的官方板子。请问楼主试过将I2C速度提升到1MBits吗?除了IOCON寄存器之外,是否还需要另外的配置?
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

19
 
很好的说明,感谢
此帖出自NXP MCU论坛
 
 
 

回复

116

帖子

2

TA的资源

一粒金砂(中级)

20
 
请教
LPC54102的  P0_23~28是用于I2C或GPIO, 我的板子不需要I2C,想用它们作GPIO,调试发现这6个脚一直是0, 输入输出无效。
这是怎么回事?
默认状态应该是GPIO模式,怎么读写不了呢??
多谢指教!!
此帖出自NXP MCU论坛
 
个人签名熙熙攘攘的世界,我们不懈前行......
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表