OpenEdv-开源电子网

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

IIC读取传感器数据异常

[复制链接]

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
发表于 2016-10-17 09:19:54 | 显示全部楼层 |阅读模式
1金钱
本人小白,在iic读取到传感器数据时,在探索者开发板上单独iic工程读取数据正常,但是移植到之前的工程里,读取的数据不对,可能是哪写问题,麻烦指点一下。谢谢。。。

最佳答案

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

我终于发现了其中的奥秘,我的这个传感器是把配置数据放在eeprom,把采集数据放在ram,要先配置eeprom,才能读出来ram的数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-10-17
在线时间
7 小时
发表于 2016-10-17 09:19:55 | 显示全部楼层
我终于发现了其中的奥秘,我的这个传感器是把配置数据放在eeprom,把采集数据放在ram,要先配置eeprom,才能读出来ram的数据
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-17 09:20:29 | 显示全部楼层
可能是时序或者工作速度有关吗
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-17 10:53:40 | 显示全部楼层
Wm-sinior 发表于 2016-10-17 09:20
可能是时序或者工作速度有关吗

这个不知道,但是后来改了下,可以用了,但是不稳定。有时正常有时不正常。
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2016-10-17 11:33:34 | 显示全部楼层
你用的是硬件i2c还是模拟i2c?
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-17 14:52:29 | 显示全部楼层
zyjs1987 发表于 2016-10-17 11:33
你用的是硬件i2c还是模拟i2c?

模拟的
回复

使用道具 举报

26

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2013-8-1
在线时间
57 小时
发表于 2016-10-17 15:11:55 | 显示全部楼层

读写加延时没有啊?
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-10-17
在线时间
7 小时
发表于 2016-10-17 18:03:25 | 显示全部楼层
iic代码给看一下吧,我调不通
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-18 11:55:26 | 显示全部楼层
进击的蜗牛 发表于 2016-10-17 18:03
iic代码给看一下吧,我调不通

iic就是原子哥的例程,网上一搜一大把
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-18 11:58:23 | 显示全部楼层
zyjs1987 发表于 2016-10-17 15:11
读写加延时没有啊?

加了,现在的问题就是上电仿真,读到的数据正常显示维持一会就不更新了,但从新上电,再次仿真又正常
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-18 20:30:15 | 显示全部楼层
最好搞个示波器看看SCL和SDA的波形
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-10-17
在线时间
7 小时
发表于 2016-10-19 11:17:43 | 显示全部楼层
昨天我去找人在实验室给我搞了一天,别人给我的从机地址竟然是不对的,我一直按这个地址做的。在发送完从机地址和读写地址之后,再发一个开始条件,然后发从机地址和读写位,然后就通了
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-19 16:55:52 | 显示全部楼层
正点原子 发表于 2016-10-18 20:30
最好搞个示波器看看SCL和SDA的波形

原子哥,iic同时读取多个传感器数据,之间会发生冲突吗?
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-19 16:57:11 | 显示全部楼层
进击的蜗牛 发表于 2016-10-19 11:17
昨天我去找人在实验室给我搞了一天,别人给我的从机地址竟然是不对的,我一直按这个地址做的。在发送完从机 ...

这很正常,不过还有可能给的地址是对的,只不过在单字节读写时进行移位了。
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-20 10:44:47 | 显示全部楼层
正点原子 发表于 2016-10-18 20:30
最好搞个示波器看看SCL和SDA的波形

原子哥,再请教你一下,主机通过iic总线挂三个从设备(设备地址不同),主机使用不同的频率读取三个从设备的数据,这样会因冲突导致数据异常吗,如果冲突,软件上怎么处理,谢谢指点一下。
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-9-21
在线时间
11 小时
 楼主| 发表于 2016-10-20 10:49:30 | 显示全部楼层
谢谢各位帮忙,现在单独的读取这个外设的,数据比较稳定,但是iic上挂多个不同的从设备,数据就会收到影响。
回复

使用道具 举报

12

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2016-9-21
在线时间
59 小时
发表于 2016-10-20 16:55:12 | 显示全部楼层
GPIO模拟I2C控制器,其实不能完全实现控制器的功能,特别是硬件控制器会监测SCL和SDA的状态,进行仲裁,比如硬件控制器(主机)发现从机将SCL钳住,那么主机进入等待状态,直到从机释放SCL,主机才继续驱动SCL。模拟I2C要实现这种判断,代码会比较复杂。
I2C 硬件控制器和从机搭配时,两端都是OD门结构,没有总线转换周期的概念。而GPIO模拟I2C,主机是Push-Pull驱动结构(其实stm32可以配置OD门),而从机是OD门结构,某些场合会发生VDD经过两个MOS到GND,出现半高电平,而MOS的导通电阻是很小的,我个人认为是有危害的。
GPIO模拟I2C控制器的ACK检测代码要很灵活,因为有的从机保存数据和准备数据是需要物理时间的。GPIO模拟I2C控制器代码没有仲裁机制,如不管从机状态,强行操作会导致从机进入异常状态。
有条件的话,可以用简单CPU的硬件I2C控制去访问从机,抓取波形观察。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 13:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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