你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL_I2C_Mem_Read()读取I2C问题

[复制链接]
matttsai 提问时间:2018-4-16 15:21 /
我用HAL_I2C_Mem_Read()去读取TI AFE的register
在power on/reset之后, 不是百分之百, 但有时候会发生MCU一直读取I2C失败的情况

请问一下会是什么问题造成吗?

Thanks

收藏 评论9 发布时间:2018-4-16 15:21

举报

9个回答
YELLOW TAO 回答时间:2018-4-16 16:41:44
顶上去
废鱼 回答时间:2018-4-16 16:50:01
发生时监听一下I2C波形,看一下是否因为操作问题导致I2C总线进入忙状态。I2C返回的结果是什么?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

琦子 回答时间:2018-4-16 17:10:54
对于IIC  我一直认为应该用硬件模拟更可靠

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

matttsai 回答时间:2018-4-16 17:42:27
I2C返回是HAL_TIMEOUT

目前遇到的情况有3
1. power on之后, 第一次就读取OK
2. power on之后, 前几次读取失败, 之后就一直读取OK
3. power on之后, 一直都读取失败, 没有读取I2C成功过

第2种情况, 只要retry就可以解决了
但如果是第3种情况, 就无法读取到I​​2C, 这一种情况会是什么原因造成?

Thanks

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励,赞一个

查看全部评分

GKoSon 回答时间:2018-5-5 15:30:04
bargagebaobei 发表于 2018-4-16 17:10
对于IIC  我一直认为应该用硬件模拟更可靠

问下 你说的 硬件模拟是什么意思?我看代码 有两种方式 一种是软件模拟IIC时序 一种是库函数IIC
跟你说的是一回事儿吗?
QQ截图20180505152534.png
QQ截图20180505152621.png
羽夜霜降 回答时间:2019-1-16 21:51:07
楼主你好,我现在用cubemx生成的hal_i2c_mem_read函数,发设备地址0x6b,寄存器地址0x01。用示波器发现,发设备地址的时候函数把最低位置0了,也就是改为了写的逻辑电平,我把他改回来发出0x6b的波形后,无法产生0x01的波形,请问你产生的波形是什么样子,谢谢!我的邮箱是768839134@qq.com,方便的话是否可以分享一下你成功的代码
xujiantj 回答时间:2019-1-18 08:31:45
遇到同样问题,学习一下
ckvlhf 回答时间:2019-2-9 16:40:51
羽夜霜降 发表于 2019-1-16 21:51
楼主你好,我现在用cubemx生成的hal_i2c_mem_read函数,发设备地址0x6b,寄存器地址0x01。用示波器发现,发 ...

必须要写入器件地址与寄存器地址才能读的啊,不然被读取的设备知道你要读哪里?被读器件数据手册里肯定有时序图的,你仔细看下。
羽夜霜降 回答时间:2019-3-21 11:42:01
已经确定了,只能模拟

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版