没有合适的资源?快使用搜索试试~ 我知道了~
首页I2C接口进入busy状态不能退出
资源详情
资源评论
资源推荐

I2C接口进入接口进入busy状态不能退出状态不能退出
本文介绍了在使用STM32F103VDT6的I2C是出现的进入busy状态不能退出的问题、及解决方法。
问题:该问题发生在 STM32F103VDT6 器件上。在其产品设计中,使用了 STM32 的一个 I2C 接口与一个 EEPROM 通信。
在系统靠性测试中发现,经过长时间运行后,STM32 会出现不能读写 EEPROM 的现象。通过 NRST 管脚对 STM32 进行复
位,复位后该现象依旧存在。关掉电源,然后重新上电,现象消失。通过进一步测试发现,如果对 STM32反复做复位操作,
会很容易复现 这一现象。
调研:修改软件,通过打印监控 I2C 通信程序的流程,及 I2C 接口的各个寄存器的状态。当出现上述现象时,I2C接口的状态
寄存器 SR2中的 Busy 位置‘1’,状态寄存器 SR1 中的 ARLO 位置‘1’。用示波器观察 I2C 总线,发现其 SCL 为高电平,SDA
为低电平。将 STM32 的复位脚拉到地,SCL 及 SDA 的状态不变。检查原理图,确认 I2C 总线上只有 STM32 和 EEPROM
两颗器件。
结论:EEPROM 驱动 I2C 总线进入了非空闲状态,使得 STM32 在接管总线时发生总线仲裁失败,进而失去对总 线的控制,
无法启动数据的传输。EEPROM 的这种状态可能是通信被意外中断造成的。通过对 STM32 进行复位而重现这一现象,在一
定程度上吻合了这种猜测。但没有实验和理论依据证实一定是该原因 导致了这一问题,是否还有其它原因在起作用,不得而
知。
处理:修改软件,加入对 I2C 总线修复的功能。在每次发送起始条件之前首先检测 SR2 中 Busy 位,如果为 ‘1’,则说明总线
上有异常。此时,可由 GPIO 的 OD 模式代替 I2C 通信口接管 SCL 及 SDA 两个管 脚。通过翻转 GPIO,向 SCL 信号线上发
高电平脉冲,脉冲宽度及间隔匀为 10uS。每发出一个脉冲之 后,检测 SDA 信号是否为高电平。若 SDA 信号为已高电平,则
将 SCL 拉高,然后向 SDA 信号线发 出一个 10uS 宽的低电平脉冲。然后将 SCL 及 SDA 两个管脚交还给 I2C 接口,并通过
将 CR1 中的 SWRST 位置‘1’后再清‘0’来复位 I2C 接口,使其退出 Busy 状态。如图(一)所示:
A. 将 SCL 和 SDA 切换成 GPIO 的 OD 模式;
B. 发送时钟脉冲并等待 SDA 跳变到高电平;
C. 在 SDA 上发出一个低电平脉冲;
D. 在 SDA 拉高后,将 SCL 的 SDA 切换回 I2C 接口;
E. 通过 CR1 中的 SWRST 位复位 I2C 接口;
建议:STM32 中的 I2C 接口被设计成为主从自适应接口,并充许多个主机共享一条 I2C 总线。I2C 接口在被使 能之后,会不
断的检测 SCL 及 SDA 的电平与跳变。当发现有低脉冲出现在 SCL 或 SDA 上时,则认 为总线进入了 Busy 状态,其 Busy 标
志会置‘1’,直到在总线上检测到一个符合要的停止条件之 后,才认为总线回到了空闲状态,这时由硬件清除 Busy 标志。当
I2C 接口认为总处于 Busy 状态且不 是由自己占用时,会拒绝向总线上发送信号,因为它认为此刻 I2C 总线正在被其它的主机
所使用。这时 向 I2C 接口发命令,要求产生起始条件,会导致总线仲裁失败。要从这种状态退出,首先要保证总线是 处于空
闲状态,即 SCL 和 SDA 都为高电平。然后,通过将 CR1 的 SWRST 置‘1’然后清‘0’来复 位 I2C 接口,以达到清除 Busy 标志
回到空闲状态目的。




















weixin_38726407
- 粉丝: 20
- 资源: 956
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0