OpenEdv-开源电子网

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

I2C总线连接BH1750,发送数据后一直没回ACK什么情况,求大神解答

[复制链接]

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
发表于 2016-4-14 16:49:29 | 显示全部楼层 |阅读模式
5金钱
我用stm32连得BH1750发送数据后应该接收到ACK位才能证明从机已经收到数据是吧?可是我一直收不到是什么情况?是地址发送错误吗

最佳答案

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

比如,你如何知道没有ACK的? 一定是某个函数里面看到的。 假如这样判断是对的: 如你所说,有很多可能。 但首先有个疑问:你发的数据正确吗? 会有很多可能性。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11551
金钱
11551
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-4-14 16:49:30 | 显示全部楼层

比如,你如何知道没有ACK的?

一定是某个函数里面看到的。

假如这样判断是对的:
如你所说,有很多可能。

但首先有个疑问:你发的数据正确吗?

会有很多可能性。


回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-14 19:19:33 | 显示全部楼层
求大神解答一下啊,这跟地址到底有没有什么关系啊
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11551
金钱
11551
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-4-14 19:26:14 | 显示全部楼层

应当有关系。
但你的情况就未必。

回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-14 20:31:07 | 显示全部楼层
xuande 发表于 2016-4-14 19:26
应当有关系。
但你的情况就未必。

如果这个地址是空的,发过数据之后也会返回ACK吗
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11551
金钱
11551
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-4-14 20:32:50 | 显示全部楼层
zhuri 发表于 2016-4-14 20:31
如果这个地址是空的,发过数据之后也会返回ACK吗


这个地方我也模糊。
如果子机根本没有这个地址,应当是不回应吧。。。

你有示波器吗?



回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-14 20:37:16 | 显示全部楼层
xuande 发表于 2016-4-14 20:32
这个地方我也模糊。
如果子机根本没有这个地址,应当是不回应吧。。。

没有,不过我看到三种不会ACK的情况
1、当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
2、如果从机接收器在传输过程中不能接收更多的数据时,它不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
3、主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输。
好像不包括从机地址不存在的情况
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11551
金钱
11551
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-4-14 20:39:55 | 显示全部楼层
zhuri 发表于 2016-4-14 20:37
没有,不过我看到三种不会ACK的情况
1、当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线 ...


没仔细看你的话,
但这样做就对了,去分析,想,研发必须这样。

但是,没有示波器比较难吧。


回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-15 08:31:56 | 显示全部楼层
xuande 发表于 2016-4-14 20:43
比如,你如何知道没有ACK的?

一定是某个函数里面看到的。

这跟数据也有关系?从机不是接收到8位数据就发送ACK位吗
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2016-4-15 09:01:41 | 显示全部楼层
这么简单的芯片都吃不下来 就真的是对IIC不理解,或者没有理解到精髓。

我告诉你,这个是标准的iic,也就是说你用原子哥的iic函数就可以了。那么你的情况肯定是时序问题,而经验告诉我,无非就是IIC里面的延时,你可以调大一些。还有 地址是要左移一位的,最低位用来判断读写。如果还是不行,你应该检查代码,肯定是哪里写出了,不是技术问题。
自己选择的路,成家前走完。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11551
金钱
11551
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-4-25 11:52:16 | 显示全部楼层

问题解决了?
什么情况?


回复

使用道具 举报

11

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2016-4-3
在线时间
41 小时
 楼主| 发表于 2016-4-25 16:10:59 | 显示全部楼层
xuande 发表于 2016-4-25 11:52
问题解决了?
什么情况?

硬件问题,没弄跳线帽,所以那个地址是空的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 16:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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