没有合适的资源?快使用搜索试试~ 我知道了~
首页I2C 接口进入 Busy 状态不能退出.pdf
资源详情
资源推荐
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 状态。如图(一)所示:
ArthurZheng150
- 粉丝: 941
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功