找回密码
 注册
查看: 5792|回复: 2
打印 上一主题 下一主题

I2C七宗罪之第五罪

  [复制链接]
  • TA的每日心情
    开心
    2023-5-19 15:05
  • 签到天数: 339 天

    [LV.8]以坛为家I

    跳转到指定楼层
    1#
    发表于 2019-3-20 14:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 EDA365_PCB 于 2024-1-22 17:54 编辑
    " r) p3 m- n2 r
    % V8 O; G" K5 |* N
    I2C七宗罪之第五罪——没有ACK怎么办?
    $ @& v0 @/ `' e8 D0 T8 t$ L
    EDA365原创 作者:John

    ! u$ L4 g: Z& b; Y( @! N* y" h
    每一笔I2C的访问都是随着设备互相之间的ACK后结束的,这就好像你和别人商量个事情,要等到别人答应了,这次对话才算结束;又或者你给别人寄一个包裹,一般要等到收件人收到东西后,给你回了电话,你才会认为东西送到了。
    这里的“答应”和“回电话”就等于I2C里面的ACK,这一点在前面都已经反复叙述了,这里不再展开说明(可以戳文段开头的链接回顾哦)。' l% c& Y: A7 a
    我们先来看看下面这张图:
    ; n& F( U3 T# O+ x
    做几点说明,让大家明白讨论内容。
    ) f& }3 l/ i! g6 Q* H9 K+ q1.系统串口打印信息如下,表示I2C访问失败:. t$ k- n- P% J5 {: J. C5 }+ p, {7 {

    6 k! ?1 `0 s  f$ A8 oI2C slave device not found num1,addr 0xe2====i2c_send_command_to+scc_rommon send_status Failed.
      G' I" U* W% o  d6 G0 EI2C slave device not found num1,addr 0xe2====i2c_send_command_to+scc_rommon send_status Failed., P" r9 y! Z4 P7 a4 O
    # }% T4 y) j% |+ k1 k- c. P
    2.上图中我在ACK的位置坐了标注,细心的读者只要和下面这张正常的图一比较,就可以看出差别,在ACK的位置,SCL为High/SDA为Low,但是上图确刚刚好相反;
    3.我们现在知道在第一个ACK的位置, Slave设备本来应该给出SDA=Low,为了更加清楚的分析问题,我们再来一张说明更多的图。
    由前面的说明,我知道是Slave设备出了问题,那么到底出了什么问题呢?
    7 W. t  B  u9 t: d
    我们先把最前面那张图的案例分析一下,可能有人已经注意到了图中有一个@-40C,对了,没错!就是我们的交换机放在温箱里面做高低温时,在零下-40C的时候发现的问题。
    8 p2 [" v( U4 W5 F8 a
    5 j- T. @& h7 v* C* W5 D0 F6 S有人问-40度下,这波形怎么量到的啊?
    这明显问到了关键点上,硬件工程师的辛苦就体现出来。首先要把I2C信号线和串口线分别从板子上焊接出来,再分别连到外面的示波器和电脑上,然后就苦逼地守着温箱,运气好的话很快就能复现问题,运气不好要折腾很久才能trigger到这个issue,真的是一把辛酸泪啊。
    . f/ u3 o1 |2 C# u3 ~/ p0 n6 I. W解决的问题过程更加复杂,而且并没有什么技术含量可言——说服Supply Chain的人认为是vendor的器件问题,让他们在芯片生产线做Screen的时候,从原来的泡-40/5分钟改为-45/20分钟,把没有margin的芯片筛选掉。这个和Supply chain以及vendor沟通的过程是痛苦的,大公司嘛,不说了,你们懂的……1 P. A% x0 Z) C; }2 D; d
    3 X6 J( j0 t( z( L/ }
    现在我们知道了器件受环境影响会产生I2C不ACK的问题,下面这张图是另外一种情况,先故设迷局,一起看看下图中有什么问题?

    / O4 Y6 N# x6 i) z5 ]% M! E
    我承认,这个真的不好发现,以前团队中的某工程师在调试一个Sony的IMX291 Sensor时,CPU通过I2C死活访问不了,最后把波形一点一点在示波器上触发下来看,还是看不出来,这就难怪,没有经验确实很难找。% w. `# M/ `1 P( f

    ; P8 y4 L9 Q! E我们先来看单次写操作:
    ( ?* Z  ^& H  G3 K& W: I/ X; g1.Start
    1 ]/ Q! ?  ^1 C1 b* C; {, t! ]2.Master发device address% |& w7 _. M' x
    3.Master发 R/W为Write
    ' [+ Q: \* `1 }. n( O4.Slave 回ACK
    ! m0 d, w2 A- I% w. v4 r- M7 D3 F5.Master发寄存器地址,也叫Word Address: X+ A1 `- J# H5 e9 O4 |' J
    6.Slave 再回ACK
    # \4 Y3 Z, Q& ~/ J8 B7.Master发要写的数据给Slave
    : ]9 w4 u* f; c8.Slave收到数据后回ACK5 z3 n3 U1 I, y+ M/ c
    9.Master看到ACK后发Stop结束本次操作& z- N$ u2 d7 g! K: q
    ) Z8 a4 e' T! J/ x4 k
    我们再来看单次多操作:
    % |6 [7 z6 C" T1.Start
    * f5 ^4 \: N4 t% \( G2.Master发device address
    9 x4 s  \) ?2 a7 d' p3 k3.Master发 R/W为Write
    % Q8 y: c& Q8 A! k- M4.Slave 回ACK: b& d5 o. P  b6 j
    5.Master发寄存器地址,也叫Word Address
    ! c9 P% p( U- S- S2 Z- D! u6.Slave收到后再回ACK+ c7 n; H, U2 L* ]4 E0 L- x9 v; y
    7.此时Slave内部的寄存器指针已经知道对应的寄存器地址! ]; o8 m' ~5 k! @- K8 Q& U+ Q
    8.Master发start. Y( s; K- R9 E& I
    9.Master再次发device address; u2 }0 M& z' x! c: J
    10.Master 发R/W为Read" x+ b% }% K8 k# j0 F, t
    11.Slave发出ACK3 E8 z2 D* P: ?$ c$ U
    12.Slave发数据给Slave
    . X# s) I/ h  @1 E; o5 b& ?13.Master收到数据后发NAK给Slave3# q7 @; S! I3 J5 V
    14.Master发stop结束本次读操作
    ( Z8 |" d5 j% U8 n" n6 H' A# H$ Q3 W6 ^  N
    所以上图的读操作一共有两个错误,为了防止读者烧脑,我直接标注出来吧:( Y2 Z+ Y7 ~6 u; G6 S( z6 K+ W9 K
    不知道大家在前面阅读的时候有没有看出来呢? 特别是第一个Start很容易漏掉,不是老司机一下子真心发现不了。( l. G+ b6 c/ \7 P& k
    添加了这里漏掉的START和ACK后,我们的Sony Sensor终于可以访问了,所以时刻要注意ACK是否少了。) r: e4 L+ ?5 L7 d- a2 f

    2 G/ e7 j3 n+ [8 V  g为了让大家清晰理解,这里给出一张完整的逻辑图,大家在理解时要注意和写操作做对比,然后一定要独立思考弄清楚为什么会有这样的差别?一直到自己彻底想明白了,以后独立解决问题的速度也就会变快。

    ) f* |+ \# q9 Q' ?5 J+ r- j8 f
    最后我再给大家看一张图,请大家自行研究错在哪里? 答案我们将在“第六宗罪”里面揭晓。
    4 {& @* J/ w! T, H0 z5 H9 ]$ A
    注:本文为EDA365电子论坛原创文章,未经允许,不得转载。
    * }3 M8 g. Y8 R6 ?$ P

    本帖被以下淘专辑推荐:

    该用户从未签到

    2#
    发表于 2019-11-19 18:20 | 只看该作者
    各位,有john大神的联系方式吗,很想认识一下,我邮箱2929219135@qq.com

    该用户从未签到

    3#
    发表于 2019-12-18 20:43 | 只看该作者
    谢谢资料分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-5-14 01:52 , Processed in 0.093750 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表
    网站统计