OpenEdv-开源电子网

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

请问什么情况下I2C的器件地址第一位用示波器抓不到?

[复制链接]

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-2-24 19:06:37 | 显示全部楼层 |阅读模式
20金钱
首先,不是STM32,是TI的一个芯片,调I2C发现不通,就拿示波器去抓SDA口的信号。TI论坛的人实在是少。。我想还是这里问吧,应该是相通的吧?
比如MPU6050器件地址是0xd0,我在用时先向I2C传输0xd0,再向I2C传0x75(就是who_am_i的口),结果用示波器一抓发现它抓到了0x50,和0x75两条信息中间还有其它东西应该是ACK吧?说明11010000的最高位1被弄没了,变成了01010000,然后我试了一下向0x50地址写0x75,示波器抓到的是对的,还是0x50。
那可能是什么原因导致最高位被弄没了呢?

最佳答案

查看完整内容[请看2#楼]

还是没有明白你的意思。 实际上第一个图的地址最第一位(就是最高位)确实是1,没有错。我猜你的器件所写的地址应该是包含了读写位。要不然不可能出现0xD0这样的地址的
自在随心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

58

帖子

0

精华

高级会员

Rank: 4

积分
542
金钱
542
注册时间
2016-2-24
在线时间
61 小时
发表于 2016-2-24 19:06:38 | 显示全部楼层
yuzeyuan1 发表于 2016-2-25 14:44
我错了。。我的意思是加上读写标志位是8位。现在看到的7位是包括了读写标志位的。。。实际的地址就只有6 ...

还是没有明白你的意思。
实际上第一个图的地址最第一位(就是最高位)确实是1,没有错。我猜你的器件所写的地址应该是包含了读写位。要不然不可能出现0xD0这样的地址的
回复

使用道具 举报

9

主题

58

帖子

0

精华

高级会员

Rank: 4

积分
542
金钱
542
注册时间
2016-2-24
在线时间
61 小时
发表于 2016-2-24 23:00:18 | 显示全部楼层
有没有看时钟线?如果可以的话拍个示波器抓到的波形下来大家看看?
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-2-25 08:57:05 | 显示全部楼层

最高位没了。。。这结论有点早。

回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 10:47:12 | 显示全部楼层
xuande 发表于 2016-2-25 08:57
最高位没了。。。这结论有点早。

图上是绿色的SCL和黄色的SDA,我随便写了一个进行测试,并不是传感器的器件地址。做的所有操作是发送0xd1,发送0x76,发送0xd2,接收数据。第一个图是取的一部分,能找的到0x51和0x76 yy.png ,这里面本来应该是0xd1,最高位的没了就变成了0x51,这是因为哪里没配置对吗?
第二个图是全部,前半部分是发0xd1和0x76,后半部分是发0xd2,并开始接收。 yy2.png 各位大神帮我看看可能的原因就行,TI的代码和STM32不一样,没看到有配置时序的地方。我连寄存器都没找到,找到最底层是结构体,再向下就找不到了。所以想改的话我还得好好找找怎么改。谢谢各位。



自在随心
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 10:48:34 | 显示全部楼层
shark_32 发表于 2016-2-24 23:00
有没有看时钟线?如果可以的话拍个示波器抓到的波形下来大家看看?

您懂这个SCL吗?请帮我看看呗,图在上面。
自在随心
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2016-2-25 13:53:24 | 显示全部楼层

看第一个波形,第一字节不是51,是A2。


回复

使用道具 举报

9

主题

58

帖子

0

精华

高级会员

Rank: 4

积分
542
金钱
542
注册时间
2016-2-24
在线时间
61 小时
发表于 2016-2-25 14:15:39 | 显示全部楼层
xuande 发表于 2016-2-25 13:53
看第一个波形,第一字节不是51,是A2。

第一个波形如果只看高七位,最后一位看成读写位的话0x51是对的。
问题是如果这样看地址就只有7位了怎么可能出现0xd0呢?这个最少8位呀。

第二个就实在是太模糊了实在没法看。
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 14:17:52 | 显示全部楼层
xuande 发表于 2016-2-25 13:53
看第一个波形,第一字节不是51,是A2。

不是的,因为我还抓了一个传0xd0的图,很明显那个是0001而不是0010,所以我认定是最高位没了。 yy4.png 红圈圈的有点儿大了,最后一个0不应该圈。那个所谓的ACK应该就是01,然后是数据01110101,就是0x75
自在随心
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 14:22:27 | 显示全部楼层
shark_32 发表于 2016-2-25 14:15
第一个波形如果只看高七位,最后一位看成读写位的话0x51是对的。
问题是如果这样看地址就只有7位了怎么 ...

第二个图只是第一个图的放大,因为我后面还有发0xd2和接收的代码。所以第二个图后面多了一段。我确认那个是0x51而不是0xA2,因为我改了许多个地址进行测试,都是最高位被吃掉了,根本就不显示,只有7个地址位。
最最前面还有个0,不管我怎么改,那个0是不会变的。所以。。。我就不懂了,为什么会出现这种情况。
自在随心
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 14:26:54 | 显示全部楼层
shark_32 发表于 2016-2-25 14:15
第一个波形如果只看高七位,最后一位看成读写位的话0x51是对的。
问题是如果这样看地址就只有7位了怎么 ...

您可能误解了,我发0xd1和0xd2纯粹是为了方便看,因为不管我发什么,最高位都是没有的。
如果正常用MPU6050的话,我应该发的是0xd0,读写位是最后一位,写就是0xd0,读就是0xd1,而现在变成了0x50和0x51。
自在随心
回复

使用道具 举报

9

主题

58

帖子

0

精华

高级会员

Rank: 4

积分
542
金钱
542
注册时间
2016-2-24
在线时间
61 小时
发表于 2016-2-25 14:29:15 | 显示全部楼层
yuzeyuan1 发表于 2016-2-25 14:22
第二个图只是第一个图的放大,因为我后面还有发0xd2和接收的代码。所以第二个图后面多了一段。我确认那个 ...

标准I2C确实就只有7位或10位地址。不知道你在哪里看过有8位地址的?
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 14:44:28 | 显示全部楼层
shark_32 发表于 2016-2-25 14:29
标准I2C确实就只有7位或10位地址。不知道你在哪里看过有8位地址的?

我错了。。我的意思是加上读写标志位是8位。现在看到的7位是包括了读写标志位的。。。实际的地址就只有6位了。
自在随心
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2778
金钱
2778
注册时间
2015-6-1
在线时间
394 小时
 楼主| 发表于 2016-2-25 15:12:45 | 显示全部楼层
shark_32 发表于 2016-2-25 15:05
还是没有明白你的意思。
实际上第一个图的地址最第一位(就是最高位)确实是1,没有错。我猜你的器件所 ...

你说的对呀!!!我以前一直在用0xd0,因为一直是STM32,写它时就得把读写位带上一起。现在我没用STM32,它说让我写器件地址我就想当然把0xd0写上了。其实根本就应该是0x68。。。多谢提醒!刚改了一下应该是对了。
自在随心
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 22:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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