[应用相关] 非常奇怪的I2C地址问题,召唤达人!

[复制链接]
8146|36
 楼主| mzscg 发表于 2008-7-2 12:11 | 显示全部楼层 |阅读模式
I2c, TE, ev, ST, se
如图片,这是我的芯片的I2C的地址说明。
我让芯片作为从,主机(STM32的I2C2)作为主。上面说了可以用:通用地址:0000000或者11XXXXHW,我把HW接高电平了,HW=1.
但是我试遍了11XXXX1,主机都得不到ACK,
用0000000曾经试通过,并且读到信息。现在又不通了。检查了芯片的连接,没有问题。
对了,I2C的广播地址是不是 0xFF.
以下为我的代码:
 I2C_GenerateSTART(I2C2, ENABLE);
  /* Test on I2C2 EV5 and clear it */
  while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)); 
  /* Send I2C slave Address for write */
  I2C_Send7bitAddress(I2C2, MOTOR_WRITE_ADDRESS7, I2C_Direction_Transmitter);
   
  /* Test on I2C2 EV6 and clear it */
程序一直死在这里,等待不到ACK:  while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  I2C_SendData(I2C2,Cmd_Byte);
  while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C2,ENABLE);
 楼主| mzscg 发表于 2008-7-2 12:12 | 显示全部楼层

很着急

这个问题搞了好几天了,
好费事啊,请达人给解决啊,急求。
香水城 发表于 2008-7-2 12:14 | 显示全部楼层

请注意:I2C的地址是7位不是8位

 楼主| mzscg 发表于 2008-7-2 13:10 | 显示全部楼层

回香水,我是用的是七位啊,

我用了0x00试过,曾经读过数据,现在不行了,
也试过别的,
你说的七位像上面的:11XXXXXHW,我用了11 1111 1(HW=1),它的十六进制值是不是应该是11 1111 1 0,就是0xFE,还是在前面加0,即0 11 1111 1 ,即0x7F??


对了,XXXXX是OTP4 OTP3 OTP2 OTP1 OTP0,
我在不知道OTP的情况下,该怎么设这个地方啊??
反正用0000 000现在是不行了。
香水城 发表于 2008-7-2 13:33 | 显示全部楼层

电路上是如何接的?HW管脚接到哪里?4个OTP位是如何配置的

 楼主| mzscg 发表于 2008-7-2 13:40 | 显示全部楼层

再回香水

OTP是要第一次与芯片通信之后才能写进芯片的ROM里面的。
我上次用OOOOOOO连接过,但还没有写OTP,
现在是无法连接了,
I2C广播地址是多少??用广播的方式可以实现对芯片的写不??
我是用EK的板子,因为没有额外的上拉电阻,所以用的是板子的上拉电阻,所以,I2C除了挂我的芯片以外,还挂着EK板子上的EEPROM.
按照应用例程,HW通过一个电阻连接到VBAT了,就是接高电平了。
上面那个关于地址的问题你帮我解答一下啊
香水城 发表于 2008-7-2 13:57 | 显示全部楼层

I2C广播地址是00

你的I2C设备是否接收广播地址要看你的数据手册。

如果I2C线上有2个设备,请在板子的上拉电阻旁边再并联一个2~3K左右的上拉电阻。

为什么HW要通过一个电阻连接到VBAT?为什么不接到VDD?
 楼主| mzscg 发表于 2008-7-2 14:02 | 显示全部楼层

这个是文档上给出的,有图,

为什么还要并联一个2~~3K的电阻,不是各有1个10K的上拉电阻分别与SDA和SCL相联了吗?
你能告诉我你平时是怎么用一个I2C器件的吗?
香水城 发表于 2008-7-2 14:08 | 显示全部楼层

I2C使用的是开漏输出驱动电路

如果I2C总线上有多个设备,必须加大上拉电流,否则推不动。

平时是怎么用一个I2C器件? 请参考EK板的电路图和Demo程序。
 楼主| mzscg 发表于 2008-7-2 14:22 | 显示全部楼层

香水,我就是照着Demo写的啊,

我觉得不是程序的问题,
就是从地址一直不对。
我访问EEPROM是可以的。
而且EK的I2C有些问题啊,
我挂通那天后,可以读数据,
但后来不行了,我一查,是I2C1的SCL对应的PB6坏了,
I2C有这么脆弱吗??
 楼主| mzscg 发表于 2008-7-2 14:22 | 显示全部楼层

我是找不到解决的办法了啊,

急,
香水城 发表于 2008-7-2 14:39 | 显示全部楼层

请问你的I2C设备工作电压是多少?I2C的电平是多少?

从8楼的图上看,你的I2C设备的供电有8~29V,这个电压对于STM32太高了,可能芯片就是这么被你烧坏的。
 楼主| mzscg 发表于 2008-7-2 15:03 | 显示全部楼层

香水,电压的问题。

那是供电电压,跟SDA和SCL没什么关系吧。
我量了下,不管是芯片,还是EK的SDA,SCL对应的引脚,
空载的时候电压都差不多,
都是高电平,都在3V左右。
我不知道你讲的8~29V跟这个有什么关系。
香水城 发表于 2008-7-2 15:11 | 显示全部楼层

请检查一下你的I2C设备的高低电平识别电压

它的供电电压是8~29V,对它来说有可能STM32的3.3V太低了,根本不能被识别。
 楼主| mzscg 发表于 2008-7-2 15:24 | 显示全部楼层

香水,你帮我看一下啊。电压不是问题

上面就说过了,我量过了,芯片SDA和SCL空载的时候的电压也是3.3伏左右。

现在问题是我发送从设备地址过去,
一直没有收到ACK啊。
我的主要问题是根据我上面贴的资料(我再贴一次吧),你帮我看一下这个芯片的地址到底是多少啊??我是怀疑地址不对。但我曾经用地址为0000 000试通过。现在不行了。

香水城 发表于 2008-7-2 15:28 | 显示全部楼层

如果没有对OTP编程,地址应该是1100001

如果以前已经有人对OTP编程,就不知道了。

请检查一下你的I2C设备的数据手册,它的高低电平识别电压是多少。它的供电电压是8~29V,对它来说有可能STM32的3.3V太低了,根本不能被识别。

这是个关键问题,不搞清楚有可能你永远做不出来!
 
 楼主| mzscg 发表于 2008-7-2 15:33 | 显示全部楼层

香水,OTP问题,电压问题

我前天用000 0000试通过。我没有对OTP编程,所以OTP还是新的。

你说的地址 1100001,它的十六进制数是0xA2呢还是0x61。因为它不满8位嘛,前面补0,还是后面补0?

我查一下高低电平电压。

香水城 发表于 2008-7-2 15:39 | 显示全部楼层

不好意思,不是0xA2,是0xC2

不好意思,不是0xA2,是0xC2
 楼主| mzscg 发表于 2008-7-2 15:40 | 显示全部楼层

香水,我贴个高低电平的图给你帮看一下。

就是下图:
 楼主| mzscg 发表于 2008-7-2 15:49 | 显示全部楼层

香水,刚试过0xA2不行。

我看了电气参数,应该是够的。
用EEPROM的例程跑是通的,
我现在都不知道是什么原因了。

问一个:从设备上电后,它的SDA和SCL也是高电平吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

234

帖子

0

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