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

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

评分

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

查看全部评分

bargagebaobei 回答时间: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 结帖奖励,赞一个

查看全部评分

与龙共舞 回答时间: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
遇到同样问题,学习一下
lhf277 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版