打印
[应用相关]

依旧是I2C的问题

[复制链接]
5041|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzscg|  楼主 | 2008-7-9 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上次烧了块EK的板子.

这次换了块新的,该慎重了. 在这里向大虾们确认个问题.

我的从设备,在没有跟我主机连接前,上电后,SDA和SCL的电压全是3.0V左右.

我查遍了从设备的datasheet,没有找到对高低电平的值的定义,

只是有一个关于I2C的通信中高低电平的定义,如贴图.

我是这么想的:I2C在没有接上拉时,它的SDA和SCL脚应该是开漏的,它上电后输出应该是低电平,是吧??

这种情况是不是说明我的从设备出了问题?
现在我都不敢轻易将从设备与主机相连了,我怕再次烧坏.



沙发
mzscg|  楼主 | 2008-7-9 15:21 | 只看该作者

香水啊香水

上次很感谢帮忙,但问题依然没有进展.


使用特权

评论回复
板凳
computer00| | 2008-7-9 15:33 | 只看该作者

你这张表是设备的吗?当工作速度小于100KHz时,

输入高电平最小为3V。因此你只要将SDA、SCL的上拉电阻接到3.3V电源即可。

现在不清楚你将上拉电阻接到哪了?

另外,不知道你设备与板子之间的地线连接是否可靠?连线有多长?如果连线长的话,
也可能会导致高电压烧IO口的。可以考虑在SDA和SCL脚上串联100欧姆左右的电阻试试。

使用特权

评论回复
地板
mzscg|  楼主 | 2008-7-9 15:44 | 只看该作者

回computer00

上面写得很清楚:从设备没有接上拉电阻,没有接主机的情况下,上电:SDA和SCL的电压依然是3.0V.

我就觉得纳闷了,我用过其他的从设备,在这种情况下,SDA和SCL是接近0伏的.

地线我连接了,

你指的地线牢不牢靠??

我的地线估计有50--60cm左右,这个算长吗??不应该吧

使用特权

评论回复
5
mzscg|  楼主 | 2008-7-9 15:45 | 只看该作者

回computer00

可以考虑在SDA和SCL脚上串联100欧姆左右的电阻试试???

SDA和SCL之间串连电阻的作用是什么???

使用特权

评论回复
6
mzscg|  楼主 | 2008-7-9 16:01 | 只看该作者

刚才试了下.

还是决定接上试了一下:程序运行到下面的最后的一行,就死掉了(一直在等待),原因应该是收不到ACK,我实测了一下电压:SDA为3.3V(上拉的),但SCL(当然也上拉了)为0V.  这是从设备地址不对的原因吗?还是另有原因??  谁有关于I2C详细故障排除的书或者文档啊.
I2C_GenerateSTART(I2C1, ENABLE);
  
  /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
   
  /* Send EEPROM address for write */
  I2C_Send7bitAddress(I2C1, MOTOR_WRITE_ADDRESS7, I2C_Direction_Transmitter);

  /* Test on EV6 and clear it */
  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

使用特权

评论回复
7
xwj| | 2008-7-9 16:08 | 只看该作者

难道是引脚设成输出了???

使用特权

评论回复
8
dkill| | 2008-7-10 09:14 | 只看该作者

这个问题在高速下 经常出现 速率低了 就好了

费解  难道是硬件有缺陷

使用特权

评论回复
9
香水城| | 2008-7-10 09:40 | 只看该作者

所谓高速,速度是多少?

如果线路的匹配不好,信号的翻转速度可能跟不上,自然高速时会有问题。

I2C使用的是开漏输出,信号的翻转速度与片外上拉电阻的关系很大。

请用示波器看看波形,看看信号的上升下降沿是否陡峭,如果信号变化过于平缓,则应考虑减小上拉电阻。

使用特权

评论回复
10
computer00| | 2008-7-10 09:45 | 只看该作者

是不是你的设备内部有上拉电阻,上拉到3V了?

用100欧电阻接设备的SDA或者DCL,再测输出电压,从而计算内部上拉电阻多大。
你的设备I2C引脚是否为专用?否则可能如老X所说,模式设置错误?

STM32的引脚模式选择是否也对了?

在SDA和SCL上串联100欧电阻,是为了防止IO口过流。

使用特权

评论回复
11
mzscg|  楼主 | 2008-7-10 11:06 | 只看该作者

再回computer00

回上面几个问题:


1.      这是个专用的I2C,不会出现模式设置错误的问题.

2.      速率我已经调得很低,I2C 一般在100K--400Kbps,我调到30K了还不行.

3.      线路我一直都是用一般的连接线 连在一起的,线总长大概40cm.

4.      EEPROM的例程中,有时会出现单步无法通过,这算正常不?

使用特权

评论回复
12
dkill| | 2008-7-10 13:28 | 只看该作者

400k 例程都通不过

使用特权

评论回复
13
香水城| | 2008-7-10 13:55 | 只看该作者

请用示波器看看波形,看看信号的上升下降沿是否陡峭

如果信号匹配有问题,什么例程都通不过!

使用特权

评论回复
14
mzscg|  楼主 | 2008-7-10 17:47 | 只看该作者

netjob兄见笑了,

我用了一个多月了,
电路就是常规设计,
烧了两个I2C,难道是人品问题??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

234

帖子

0

粉丝