[应用相关] 依旧是I2C的问题

[复制链接]
5971|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左右,这个算长吗??不应该吧
 楼主| mzscg 发表于 2008-7-9 15:45 | 显示全部楼层

回computer00

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

SDA和SCL之间串连电阻的作用是什么???
 楼主| 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));
xwj 发表于 2008-7-9 16:08 | 显示全部楼层

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

dkill 发表于 2008-7-10 09:14 | 显示全部楼层

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

费解  难道是硬件有缺陷
香水城 发表于 2008-7-10 09:40 | 显示全部楼层

所谓高速,速度是多少?

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

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

请用示波器看看波形,看看信号的上升下降沿是否陡峭,如果信号变化过于平缓,则应考虑减小上拉电阻。
computer00 发表于 2008-7-10 09:45 | 显示全部楼层

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

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

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

在SDA和SCL上串联100欧电阻,是为了防止IO口过流。
 楼主| mzscg 发表于 2008-7-10 11:06 | 显示全部楼层

再回computer00

回上面几个问题:


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

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

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

4.      EEPROM的例程中,有时会出现单步无法通过,这算正常不?
dkill 发表于 2008-7-10 13:28 | 显示全部楼层

400k 例程都通不过

香水城 发表于 2008-7-10 13:55 | 显示全部楼层

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

如果信号匹配有问题,什么例程都通不过!
 楼主| mzscg 发表于 2008-7-10 17:47 | 显示全部楼层

netjob兄见笑了,

我用了一个多月了,
电路就是常规设计,
烧了两个I2C,难道是人品问题??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

234

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部