打印
[应用相关]

非常奇怪的I2C地址问题,召唤达人!

[复制链接]
6559|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现在是不行了。

使用特权

评论回复
5
香水城| | 2008-7-2 13:33 | 只看该作者

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

使用特权

评论回复
6
mzscg|  楼主 | 2008-7-2 13:40 | 只看该作者

再回香水

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

使用特权

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

I2C广播地址是00

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

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

为什么HW要通过一个电阻连接到VBAT?为什么不接到VDD?

使用特权

评论回复
8
mzscg|  楼主 | 2008-7-2 14:02 | 只看该作者

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

为什么还要并联一个2~~3K的电阻,不是各有1个10K的上拉电阻分别与SDA和SCL相联了吗?
你能告诉我你平时是怎么用一个I2C器件的吗?

使用特权

评论回复
9
香水城| | 2008-7-2 14:08 | 只看该作者

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

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

平时是怎么用一个I2C器件? 请参考EK板的电路图和Demo程序。

使用特权

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

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

我觉得不是程序的问题,
就是从地址一直不对。
我访问EEPROM是可以的。
而且EK的I2C有些问题啊,
我挂通那天后,可以读数据,
但后来不行了,我一查,是I2C1的SCL对应的PB6坏了,
I2C有这么脆弱吗??

使用特权

评论回复
11
mzscg|  楼主 | 2008-7-2 14:22 | 只看该作者

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

急,

使用特权

评论回复
12
香水城| | 2008-7-2 14:39 | 只看该作者

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

从8楼的图上看,你的I2C设备的供电有8~29V,这个电压对于STM32太高了,可能芯片就是这么被你烧坏的。

使用特权

评论回复
13
mzscg|  楼主 | 2008-7-2 15:03 | 只看该作者

香水,电压的问题。

那是供电电压,跟SDA和SCL没什么关系吧。
我量了下,不管是芯片,还是EK的SDA,SCL对应的引脚,
空载的时候电压都差不多,
都是高电平,都在3V左右。
我不知道你讲的8~29V跟这个有什么关系。

使用特权

评论回复
14
香水城| | 2008-7-2 15:11 | 只看该作者

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

它的供电电压是8~29V,对它来说有可能STM32的3.3V太低了,根本不能被识别。

使用特权

评论回复
15
mzscg|  楼主 | 2008-7-2 15:24 | 只看该作者

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

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

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

使用特权

评论回复
16
香水城| | 2008-7-2 15:28 | 只看该作者

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

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

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

这是个关键问题,不搞清楚有可能你永远做不出来!
 

使用特权

评论回复
17
mzscg|  楼主 | 2008-7-2 15:33 | 只看该作者

香水,OTP问题,电压问题

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

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

我查一下高低电平电压。

使用特权

评论回复
18
香水城| | 2008-7-2 15:39 | 只看该作者

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

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

使用特权

评论回复
19
mzscg|  楼主 | 2008-7-2 15:40 | 只看该作者

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

就是下图:

使用特权

评论回复
20
mzscg|  楼主 | 2008-7-2 15:49 | 只看该作者

香水,刚试过0xA2不行。

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

问一个:从设备上电后,它的SDA和SCL也是高电平吗?

使用特权

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

本版积分规则

51

主题

234

帖子

0

粉丝