没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
I
2
C 接口进入 Busy 状态不能退出
问题:
该问题由某客户提出,发生在 STM32F103VDT6 器件上。据其工程师讲述:在其产品设计中,使用了
STM32 的一个 I
2
C 接口与一个 EEPROM 通信。在系统靠性测试中发现,经过长时间运行后,STM32 会
出现不能读写 EEPROM 的现象。通过 NRST 管脚对 STM32 进行复位,复位后该现象依旧存在。关掉电
源,然后重新上电,现象消失。通过进一步测试发现,如果对 STM32 反复做复位操作,会很容易复现
这一现象。
调研:
修改软件,通过打印监控 I
2
C 通信程序的流程,及 I2C 接口的各个寄存器的状态。当出
现上述现象时,I
2
C 接口的状态寄存器 SR2 中的 Busy 位置‘1’,状态寄存器 SR1 中的
ARLO 位置‘1’。用示波器观察 I
2
C 总线,发现其 SCL 为高电平,SDA 为低电平。将 STM32
的复位脚拉到地,SCL 及 SDA 的状态不变。检查原理图,确认 I
2
C 总线上只有 STM32 和
EEPROM 两颗器件。
结论:
EEPROM 驱动 I
2
C 总线进入了非空闲状态,使得 STM32 在接管总线时发生总线仲裁失败,进而失去对总
线的控制,无法启动数据的传输。EEPROM 的这种状态可能是通信被意外中断造成的。通过对 STM32
进行复位而重现这一现象,在一定程度上吻合了这种猜测。但没有实验和理论依据证实一定是该原因
导致了这一问题,是否还有其它原因在起作用,不得而知。
处理:
修改软件,加入对 I
2
C 总线修复的功能。在每次发送起始条件之前首先检测 SR2 中 Busy 位,如果为
‘1’,则说明总线上有异常。此时,可由 GPIO 的 OD 模式代替 I
2
C 通信口接管 SCL 及 SDA 两个管
脚。通过翻转 GPIO,向 SCL 信号线上发高电平脉冲,脉冲宽度及间隔匀为 10uS。每发出一个脉冲之
后,检测 SDA 信号是否为高电平。若 SDA 信号为已高电平,则将 SCL 拉高,然后向 SDA 信号线发
出一个 10uS 宽的低电平脉冲。然后将 SCL 及 SDA 两个管脚交还给 I
2
C 接口,并通过将 CR1 中的
SWRST 位置‘1’后再清‘0’来复位 I
2
C 接口,使其退出 Busy 状态。如图(一)所示:
资源评论
- 马李灵珊2023-07-26阅读这个文件后,我对I2C接口进入Busy状态的原因和解决方法有了更深入的了解。
- 五月Eliy2023-07-26作者在这个文件中提供了一些解决I2C接口进入Busy状态的实际案例,对于工程实践非常有借鉴意义。
- maXZero2023-07-26这个文件对于I2C接口的Busy状态问题进行了全面分析,内容简洁明了,值得阅读。
- 懂得越多越要学2023-07-26这个文件详细介绍了I2C接口进入Busy状态不能退出的问题,对于经常使用I2C的人来说,非常有帮助。
- ali-122023-07-26对于初学者而言,这个文件提供了解决I2C接口进入Busy状态的一些建议,非常实用。
ArthurZheng150
- 粉丝: 939
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 笔记实验六,spark,大数据分析
- ####蓝桥杯python的详细的信息介绍
- 电子万年历软件仿真(经过多次修改,保证正确性)
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功