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

【实战经验】STM32F4xxx的I2C总线挂起异常处理

[复制链接]
zero99 发布时间:2017-1-4 17:08
前言3 n: J6 K' g. j+ q9 P- G
客户使用I2C对EEPROM进行读取操作时,正常读取的最后一个字节,主机会传送一个NACK给EEPROM,以便结束该次读取过程,如果主器件给出ACK,而程序又默认结束读取过程,会出现EEPROM认为主机还需要读取数据,但此后SCL的时钟不会给出,将导致I2C总线被挂起占用,此时START,STOP命令将不会再次成功送出信号;本文针对这个异常状况结合实际应用问题给出处理方法。
/ n  T. g# l. z$ j  l
( Q/ ^  M  y- D3 Z) W问题背景
0 F8 [- U( B5 e0 Q在实际应用中,如果使用中断方式或者DMA方式给出I2C的处理机制,在读取最后一个字节需要给出NACK的时候,如果此时延迟或者错误给出了ACK,I2C总线将被EEPROM挂起;该问题已经在客户端出现,但出现随机,很难判定何时出现,但确实是一个应用隐患,因为此时无法通过寄存器发送START,STOP命令;5 T" D/ c" A, Z0 r# d5 J) \
* d. m- W! c/ s
判断依据" H) I1 x3 I* x, L5 ^" |8 }; T
为判定是主机(STM32F4xx)给出的ACK,还是从机(EEPROM)拉低ACK,需要加入辅助电路,如下:& W# p5 Y- ?; R$ i
51.jpg ! W+ {! J  e$ L& j( n9 e
使用示波器探头察看A点电平,如果是EEPROM拉低电平的,则测试点电平为0V,如果是STM32F4xx端给出的ACK,拉低电平的,在A点测试将是大于0电平的一个波形存在;: {9 f# v6 C+ R3 V' A
波形分析" b7 @/ }# t0 g
正常读取波形
# a- E9 Q, W% P+ @% H* E
52.jpg
6 r1 i% m4 A; ]异常读取波形
1 f+ m! C2 H; a. h- w, u" |
53.jpg + j& ~+ K& p" G/ D, L& I
在异常读取波形后,程序给出的起始终止条件将不会被执行;3 c0 `- Q$ t) G$ K1 [; G
54.jpg ! g8 [: V$ L- K  ]8 T; M6 |
1 ?& `' z5 g3 R( x" J) z, k; J

8 A, \' C& S' Y3 I; B* R处理方法
* H4 u% p+ w3 N7 F$ e3 ?# m当出现上述异常时,写I2C外设寄存器方法将不起作用,I/O端口产生不了需要退出的波形,只能通过I/O口强拉效果退出,可以有两种方法进行处理:
4 j- s% ^& b0 }方法一:当出现异常总线占用时,直接复位I2C外设,以及重新初始化I2C端口,I/O口配置为上拉模式的,产生虚拟的STOP波形;此时因为MCU端口的强拉作用,将产生一个类似于STOP的I2C退出效果;. P4 }' Z2 G( i" ~# X5 S5 t
方法二:I/O口配置为上拉模式的,SDA设置为高电平,产生虚拟的SCL波形,产生9个SCL波形,虚拟最后一个字节的读取,以便从机退出异常状态。. V4 O  u- Q- c: n' n, {& Z5 D# K
2 R6 Q- e- F8 Y2 D
! Q% n) M# m! |/ j* L) ^
文档下载: p; @5 L( l3 @. k# Y! r, q# \

5 B; J1 |; {* A: ~! C更多实战经验9 _& M7 U8 ?) X/ N' S1 x' [6 @
赞 收藏 2 评论5 发布时间:2017-1-4 17:08

举报

5个回答
jackten 回答时间:2017-1-4 18:06:03
谢谢分享                     
五哥1 回答时间:2017-1-4 22:31:51
图上没有找到A点,楼主换个图吧
andypanfan 回答时间:2017-1-5 09:56:22
讲解比较清楚,,,
迷失的流星 回答时间:2017-2-6 10:26:47
可以先更改IO口模式为普通IO,然后更改IO口电平,再将IO口模式改为IIC
oldfang 回答时间:2019-3-8 17:19:05
最后一步解决方法没有看懂,既然从机拉低了SDA,主机又能怎样拉高电平?

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版