EDA365电子工程师网

标题: 请问一个I2C的问题 [打印本页]

作者: zsuhh    时间: 2014-5-25 08:01
标题: 请问一个I2C的问题
我有一个ST的RTC芯片m41t0,用I2C与beaglebone black的I2C1口通信,有个奇怪的问题,开机以后用i2cdetect -y -r 1可以读到正确的chipID 0x68. 但是,放一会后,再用i2cdetect -y -r 1读,就读不到ID了。主机是跑了一个Debian linux系统。请问到底是什么问题呢?
作者: fallen    时间: 2014-5-26 11:42
这种问题,查查软件吧,顺便跟你分享一些在实际情况中碰到I2C问题
3 t  z5 M7 f0 @3 @1 。I2C号称可以挂很多外设,实际上各个外设会相互干扰,导致有些外设不能正确读取。比如加密IC和其他的一些外设,最好分开使用。' j. ~$ D" [; L1 c3 g
2。有些时候,比如你接了两个外设A,B。如果你先初始化A,则B就不能被初始化。这个时候可以考虑,先初始化B,再初始化A.2 R- p; e6 O! m: `6 ~: V' N8 [
3。两个外设A,B,如果其中一个断电了,另外一个将不能初始化。
作者: zsuhh    时间: 2014-5-27 10:41
本帖最后由 zsuhh 于 2014-5-27 10:43 编辑
. s" T0 t- C7 r' ^) X, U5 K+ C
4 i9 y, f$ Z1 l1 H; p0 ^) E那是否意味着我这种情况硬件没有问题?在开始的时候,运行多次没有问题,只是放一会就不行了,奇怪。
作者: hukee    时间: 2014-5-27 10:49
fallen 发表于 2014-5-26 11:42
/ I* N' O7 ~3 y7 t这种问题,查查软件吧,顺便跟你分享一些在实际情况中碰到I2C问题8 p9 L# g0 k/ `. }4 A4 S8 p! T8 l, ^; u1 B
1 。I2C号称可以挂很多外设,实际上各个 ...
! _& S6 _) }' X- Y% Y
谢谢分享。
作者: fallen    时间: 2014-5-27 10:49
如果你只挂了一个这个RTC的话,可以证明硬件没有问题。
作者: yujingfa    时间: 2014-5-27 20:21
那你怀疑硬件有问题,就让硬件去抓波形啊,波形形状OK但波形数据不对就是软件。数据ok,但就是不对,那就是硬件问题。建议硬件抓波形形状(上下沿等),软件抓打印信息。不是一方面的问题
作者: timerc    时间: 2014-5-29 11:54
看是否管脚复用了没,有可能启动了什么程序,管脚复用了,导致读不到了
作者: xanthecrab    时间: 2014-5-30 15:48
建议你抓一下IIC的波形,抓一个完整的读时序,从起始位到结束位,看IIC的时序信号在哪里出现了错误。你这样说IIC出问题是分析不出原因的。我之前有个案例和你类似,IIC起始位OK,地址/读写位也OK,但是Slave没有发送ACK信号,导致master无法读slave。你看一下你的IIC挂在哪里了?我的问题原因是IIC读的时候master发生了软复位,而slave没有复位,导致IIC总线挂起。另外,你可以测量一下当你的IIC出现问题时,clk和data的电平分别是什么?
作者: zsuhh    时间: 2014-5-31 00:54
非常感谢大家的回复
作者: xanthecrab    时间: 2014-6-4 12:52
zsuhh 发表于 2014-5-31 00:54
# H8 o+ g4 B3 C: ]非常感谢大家的回复
' w5 Y/ R& c: E
没有后续了?问题解决了吗?解决了分享一下经验啊!
作者: zsuhh    时间: 2014-6-5 07:16
想用示波器量,可是实验室没买,对目前这个应用,只要开机时能读对数据,就行,先将就着用,正在layout第二板,上面layout另一个I2C器件,看看效果如何再说。
作者: 风起云涌    时间: 2014-6-9 18:54
看看你挂了几个设备?特别是否有支持400k以上的设备,如果有的,这个要仔细对待,要不改版很难解决这个问题。6 d1 U1 Y4 ?- ]2 @. }+ D% l2 r
i2cdetect -y -r 后,iic总线是什么状态?" D2 B( o( a1 a+ G# h0 z1 _% ^- j

作者: djxf    时间: 2014-6-9 19:16
本帖最后由 djxf 于 2014-6-9 19:58 编辑
- O. ^3 o2 q1 Y' E8 u
fallen 发表于 2014-5-26 11:42
3 h0 R* D  P" P这种问题,查查软件吧,顺便跟你分享一些在实际情况中碰到I2C问题9 l; g, I- \; B' w0 R
1 。I2C号称可以挂很多外设,实际上各个 ...
8 `* b1 o. \) s3 I. K6 ^! U6 B

$ \& q5 L4 d/ B1 ~* w对于1,2,如果添加了合适的上拉,电平也是匹配的话,感觉不好理解,呵呵。
5 c! R* P- _6 H1 N& F; ]2 G- y1 q) \我也建议先抓下data和clk的波形,看看电平、驱动能力和时序(因为data脚是双向的,读写之间的切换和配置时机也要把握好,尤其是用GPIO脚模拟I2C时)有没有问题,应该不太可能出现这么怪异的问题。) a8 v7 r% F6 N# v, L; V& O
) }$ n% m6 X' Z: p9 D
对于3,可以理解。
+ D( N5 s/ P/ Y3 B% O
作者: djxf    时间: 2014-6-9 19:38
xanthecrab 发表于 2014-5-30 15:48
; ~- D+ y: b" U7 Y; `* r建议你抓一下IIC的波形,抓一个完整的读时序,从起始位到结束位,看IIC的时序信号在哪里出现了错误。你这样 ...
8 i! v9 ^9 F& S- M) U# ?7 x. g
为什么在master软复位而slave没有复位的情况下会导致I2C总线挂死?I2C接口一般是OC门或者OD门啊?$ r) P- }) A5 N4 |" A! I' f
如果你说的现象成立,那也只能说slave芯片工作异常了(比如启动时没有通过复位进入到正常状态,等等),与I2C接口无关。
作者: fallen    时间: 2014-6-10 09:33
djxf 发表于 2014-6-9 19:162 `7 G- H  Q% X" i; K/ Q! B
对于1,2,如果添加了合适的上拉,电平也是匹配的话,感觉不好理解,呵呵。1 p$ M: z5 [9 S' R( g
我也建议先抓下data和clk的 ...
* j' w& j4 m5 b" D, M* [# \
这些都是我经历过的,我很深刻。你说的合适的上拉,这个是很基础的问题。发生问题后,我们修改了上拉,修改了软件,还是无果。对于这些问题,我现在已经不怪异了。
作者: djxf    时间: 2014-6-10 09:37
fallen 发表于 2014-6-10 09:33
' x5 L2 b. d" A) ?这些都是我经历过的,我很深刻。你说的合适的上拉,这个是很基础的问题。发生问题后,我们修改了上拉,修 ...
% r% _% j. F2 e4 _5 |
我不是怀疑你的描述,是觉得这个现象不正常,有深究的必要。3 v( _9 r: B; ]+ M; h; W
很可能是时序配置有问题。
作者: fallen    时间: 2014-6-10 09:51
本帖最后由 fallen 于 2014-6-10 10:30 编辑 ) j: ]  V" {6 v7 i0 j' S
djxf 发表于 2014-6-10 09:37+ N, n2 K. a! l  Q; X7 Y% Z! B1 I6 d
我不是怀疑你的描述,是觉得这个现象不正常,有深究的必要。
# C* m: S( e, X很可能是时序配置有问题。

$ G( {" P+ K( L1 S( w1 V$ I
2 D. W. Q2 m% z! Z深究估计就是无解。, \* ~, ?) g: F0 }% B0 f
对于1  加密IC跟DEMOD之类的相连,很多情况下都不行------所以大家都开始分开给I2C。5 Z8 C1 f3 P4 b2 s0 z
对于2  软件调试了很长时间,后来发现初始化的时候调整一下顺序就可以了-------这个暂且相信软件的实力吧。
0 W/ c* y# e0 @
作者: djxf    时间: 2014-6-10 10:22
fallen 发表于 2014-6-10 09:51
2 E# g2 b1 h9 N0 z9 {深究估计就是无解。; n$ x5 s1 Y2 }- a/ m/ |4 o2 ]
对于1  加密IC跟DEMOD之类的相连,很多情况下都不行------所以大家都开始分开给I2C ...
! I. @( d1 H6 w$ b8 P9 u9 t: z
我用过micrel和neowine的加密芯片(深圳也有加密芯片,但我没试过),没有遇到过硬件上解决不了的问题。
" U- d6 s% }- q0 S软件有个还算有经验的小伙曾经花了一个月调试neowine的加密芯片没有调好,找了原厂的FAE也没解决,后来耍聪明把加密芯片跳过去了,这事我很久以后才知道。随便找了个软件(因为我当时对那个平台的软件架构不熟悉),我跟他一起调,两个小时就搞定了,除非芯片本身有问题(我选器件会比较慎重,独家的尽量不选,如果必须选,会先尽量多了解和测试),我遇到过很多难解的问题(有些甚至搞得焦头烂额)但还没遇到过无解的问题,只要有心就一定有解。
作者: fallen    时间: 2014-6-10 10:30
djxf 发表于 2014-6-10 10:22
% n" |# C# E* P: W5 Y. b& \' p我用过micrel和neowine的加密芯片(深圳也有加密芯片,但我没试过),没有遇到过硬件上解决不了的问题。* x) m) V* F* b6 c2 o/ j0 l5 G' \' n
...
# @1 w! D& j9 f
因为我还没有达到你的水平。
作者: fallen    时间: 2014-6-10 10:31
djxf 发表于 2014-6-10 10:22
2 F4 {& x$ i4 s+ x3 V( g; L; Y( W我用过micrel和neowine的加密芯片(深圳也有加密芯片,但我没试过),没有遇到过硬件上解决不了的问题。
& f8 t; H# K. g ...

. y' V! D; ]% l1 D8 b那你可以分享一下,你是如何解决的吗?越详细越好
作者: djxf    时间: 2014-6-10 11:12
本帖最后由 djxf 于 2014-6-10 11:19 编辑 5 K" F+ Z2 x; X9 y0 G1 t
fallen 发表于 2014-6-10 10:318 k' A. k2 i) t8 e2 j4 z
那你可以分享一下,你是如何解决的吗?越详细越好
  \4 _  T1 u. m8 \$ F2 n8 l4 z

* [$ x0 V/ R: N! L, h做硬件好像没啥敲门,数字电路无非是,逻辑正确、电平和时序匹配、驱动能力足够、信号质量满足要求。' b# s6 z: M8 O+ E3 J* x
所以有人说数字电路玩的是时序,射频电路玩的是电磁场(这是宏观角度看,从微观看可能是量子力学或弦理论或其他什么理论,反正我没搞懂过。电磁场也是,很多也没搞明白,虽然看起来只有那么几个微/积分方程和物质方程)。
, G; _) k  z+ v; \6 x$ @7 b7 i" r/ {. Z  [0 q$ a' l+ j
像之前遇到的I2C问题,首先检查硬件有没有问题(逻辑正确,电平匹配,驱动能力是否合适,时序很简单都不需要计算),其次就是看管脚配置是否正确(读写高低电平是否正常,顺带检查是否有虚焊短路等硬件问题)、上电及初始化是否符合要求、时序是否正常(从上电和初始化就挂示波器监控,顺带看看电平、驱动能力和信号质量,但一般来说这种低速信号的信号质量不会有太大问题,即使有过冲之类的,调整时序避开就好了,或者调整管脚的驱动能力比如驱动电流等尽量改善),到此基本就知道问题出在哪里了,剩下的就是不断调整时序(先放宽再收紧到合适的位置,兼顾速度和可靠性),当然,还需要一些耐心。。。
% E5 O+ i9 Y: {6 \
7 z, V1 V" h5 P# x/ `多啰嗦一句,说到时序大家更多想到的是信号之间的读写时序,但往往忽略地、电源和信号之间的上/下电时序要求,有可能电路设计有问题,一上电或者掉电后再上电就导致芯片状态异常甚至出现栓锁了。
作者: fallen    时间: 2014-6-10 11:36
djxf 发表于 2014-6-10 11:12/ ^, c7 M9 {1 t; ~4 ^
做硬件好像没啥敲门,数字电路无非是,逻辑正确、电平和时序匹配、驱动能力足够、信号质量满足要求。
7 s( V/ V7 V# o) F9 k ...
# D8 c6 @) m& t2 e
非常感谢前辈的经验分享。! v& n" l# ?+ n( ^) F0 V' h6 y
但是这些都是解决问题的基本方法。当你尝试这些方法解决问题未果的时候,就是头痛的时候了。 ' j, s3 H, h4 t
6 Q2 E) y1 W& b# u# n7 E# P

作者: xanthecrab    时间: 2014-10-11 14:59
djxf 发表于 2014-6-9 19:38" o2 V) f9 Y) m, V8 f3 Q
为什么在master软复位而slave没有复位的情况下会导致I2C总线挂死?I2C接口一般是OC门或者OD门啊?) H% i! M: y( E$ l9 E
如果 ...
* d% e6 O: w1 Q) I4 w; e
IIC总线hung up是因为master软复位时,slaver并没有复位,而且没收到master给的ack信号,导致slaver不释放IIC总线(这种现象只有可能发生在read时序)。另外,任何芯片如果没有正确复位的话,它的全部功能都基本不可用,所以你说的slaver在上电时就没有正确复位这一说法,似乎不能成立,因为slaver的其他功能是work的。IIC总线的挂死是它本身协议的issue,所以建议你对比一下IIC和SMBUS协议的区别,或许就会知道为什么IIC会挂死,而SNBUS不会出现这样的情况。8 v7 d% l1 r& e- D$ T5 v
好久没来了,希望能和大家一起学习。。。! j  T8 ~# @8 r& T: D0 @0 c5 X





欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2