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

【经验分享】STM32F4xxx 的 I2C 总线挂起异常处理

[复制链接]
STMCU小助手 发布时间:2022-2-14 23:35
前言+ Q! |! W# k6 }, R
客户使用 I2C 对 EEPROM 进行读取操作时,正常读取的最后一个字节,主机会传送一个 NACK 给 EEPROM,以便结束该次读取过程,如果主器件给出 ACK,而程序又默认结束读取过程,会出现 EEPROM 认为主机还需要读取数据,但此后 SCL 的时钟不会给出,将导致 I2C 总线被挂起占用,此时 START,STOP 命令将不会再次成功送出信号;本文针对这个异常状况结合实际应用问题给出处理方法。
3 F8 ^* v) G, X7 \3 S- d: f) P9 [9 ?
问题背景" u& J' [  |& J9 x  ^
在实际应用中,如果使用中断方式或者 DMA 方式给出 I2C 的处理机制,在读取最后一个字节需要给出 NACK 的时候,如果此时延迟或者错误给出了 ACK,I2C 总线将被 EEPROM 挂起;该问题已经在客户端出现,但出现随机,很难判定何时出现,但确实是一个应用隐患,因为此时无法通过寄存器发送 START,STOP 命令;
. @& J: b0 b  ~* D( H8 y
0 Z6 u; g9 I8 D6 O7 c/ C0 N0 u! a, s  r% v9 ]" K& c
判断依据
& M$ a: M$ x- G/ A, P2 M, m1 p为判定是主机(STM32F4xx)给出的 ACK,还是从机(EEPROM)拉低 ACK,需要加入辅助电路,如下:
2 r; U- S. q' B! c# I# v; ]* s( `
( G0 g6 m0 v% n. p) q 2}WR@X2VZML)~7@8Y`SC4}8.png
( T1 b1 H  q5 O9 R$ Y* U6 _8 Y1 c& I( w& r4 i7 l4 t( E
使用示波器探头察看 A 点电平,如果是 EEPROM 拉低电平的,则测试点电平为 0V,如果是 STM32F4xx 端给出的 ACK,拉低电平的,在 A 点测试将是大于 0 电平的一个波形存在;4 \9 G2 a; f4 v$ w, p/ I- d
2 h7 h% v0 _5 f
波形分析, B# X, _1 X% C" i, m
正常读取波形5 n1 U- v  `2 Q; Z; D( z

3 R% G0 a5 j3 [, W }FY6_VULKAVLF817{5}B_FD.png ) g8 C( b( M) Z3 r  C; u, R
# ^' }+ n- `% h& f" R4 l8 x
异常读取波形$ ]' [, x+ h5 c

6 H: I; G3 l7 \- H/ ?0 H( ?  x
* W+ h9 ^, K0 W2 K, J. P0 }+ }
& J' l0 L. j# \在异常读取波形后,程序给出的起始终止条件将不会被执行;# ]) B3 d0 X: W8 d& ~
  1. I2C_GenerateSTOP() ;& L; C4 j! U8 w
  2. I2C_GenerateSTART() ;
复制代码
; B6 H1 |" C( Q1 A$ k/ h! Q0 k* e
) F" ^  k  P( ]8 r0 b! Q8 A
处理方法
' }3 ?/ C( _; e当出现上述异常时,写 I2C 外设寄存器方法将不起作用,I/O 端口产生不了需要退出的波形,只能通过 I/O 口强拉效果退出,可以有两种方法进行处理:
$ `; F& Q9 U* O# E4 @4 @) q8 ~方法一:当出现异常总线占用时,直接复位 I2C 外设,以及重新初始化 I2C 端口,I/O 口配置为上拉模式的,产生虚拟的STOP 波形;此时因为 MCU 端口的强拉作用,将产生一个类似于 STOP 的 I2C 退出效果;
! o# P$ S7 K' U6 p7 y方法二:I/O 口配置为上拉模式的,SDA 设置为高电平,产生虚拟的 SCL 波形,产生 9 个 SCL 波形,虚拟最后一个字节的读取,以便从机退出异常状态。
+ E. M6 {1 S5 ^; C3 s% Y; Z' s
% G7 @# r3 P! |  C
Y}YL4M%@V7M)XC$21_T1Y2H.png
赞 收藏 评论0 发布时间:2022-2-14 23:35

举报

0个回答

所属标签

相似技术帖

官网相关资源

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