I2C从站地址未确认(有时)


11

我正在尝试使用I2C与远程连接的FRAM(Ramtron的FM24C04)进行通信。此内存嵌入在板上,可以随时将其插入系统或从系统中卸下(在卸下内存之前,通信已正确终止)。

问题是:刚插入包含FRAM的卡后,有时,它不确认地址。

信号测量

我测量了信号以查看发生了什么,看来在两种情况下(工作和不工作)的计时都可以。

正确的I2C通信(读取3个字节): 在此处输入图片说明

I2C FRAM地址未确认(从机地址已正确发送): 在此处输入图片说明

为了解决这个问题已经采取的行动(没有成功)

  • 插入带有嵌入式FRAM的卡后添加的延迟,以确保遵守电源顺序。
  • 检测到未确认从站地址后,I2C停止生成

I2C总线配置

  • 一个主机(ST的STM32F205微控制器)
  • 三个从机(Microchip的EEPROM 24AA1025,Maxim IC的RTC DS1339C和Ramtron的远程FRAM FM24C04
  • 一个I2C电平转换器(Maxim IC提供的MAX3373E)用于允许主机与FRAM之间的通信
  • 总线频率设置为100 kHz

编辑(2013-04-17)

首先,谢谢大家的评论。

由于有很多建议,所以这里是我所做调查的描述。

原理图

下图显示了I2C总线的简化原理图:

I2C总线原理图

I2C_SDA和I2C_SCL信号直接连接到微控制器,FRAM_SDA和FRAM_SCL信号连接到FRAM。请注意,使用村田制作所的BLM18铁氧体对连接到FRAM的SDA和SCL信号进行滤波。

FRAM的连接方式如下:

  • NC(引脚1)->未连接
  • A1(引脚2)-> GND
  • A2(引脚3)-> GND
  • VSS(引脚4)-> GND
  • SDA(引脚5)-> FRAM_SDA
  • SCL(引脚6)-> FRAM_SCL
  • WP(引脚7)-> GND(无写保护)
  • VDD(引脚8)-> + 5V

FRAM卡说明

该卡是仅嵌入FRAM的“类似ISA”卡。

调查

减慢频率

我在将SCL频率设置为50kHz和10kHz的情况下进行了测试。我用示波器测量了SCL信号,以确保它处于预期的频率。

这些修改不能解决问题。我检查了时序,它们在FRAM数据表的规格之内。

确保电源顺序

@jippie。

  1. 在插入嵌入FRAM的卡之前,将I2C电平转换器置于三态模式。FRAM_SDA和FRAM_SCL信号被拉低。
  2. 插入“ FRAM卡”后,添加100ms的延迟以确保电源稳定(根据数据表,在第一个启动条件之前至少需要11ms)。
  3. I2C电平转换器已激活。
  4. 为了确保I2C电平转换器被激活并且线路被拉高(数据手册要求约4us),添加了1ms的延迟。FRAM_SDA和FRAM_SCL信号被上拉。
  5. FRAM被访问。

在每个步骤之后都已测量了FRAM_SDA和FRAM_SCL信号。

问题仍然存在。

停止/启动条件,而不是重复启动

@gbarry。

在字节传输期间,我试图在重复开始之前停下来。我用示波器测量了字节传输:STOP条件后再加上START条件就可以了。

不幸的是,此解决方案无法解决问题。

思想

仅在连接了嵌入FRAM的卡后才发生此问题。插入“ FRAM卡”并正确寻址后,我运行了数千次成功的读取访问(从站寻址和读取)。

在我看来,这越来越像是硬件问题。但是我不知道它是否可能与I2C电平转换器或I2C总线上的其他从机相关。

您还有其他想法或建议吗?


编辑(2013-04-18)

问题似乎已解决

我更换了FRAM模块连接器,找到了一种直接在FRAM上进行测量的方法。似乎所有与此新连接器都运行良好。

我将进行更多测试,以确保问题来自不良的连接。


可以请您发布原理图吗?尝试降低总线频率,看看是否有区别。
Suirnder

问题是否仅在插入后才发生,而不是在其他时候才发生?“刚过”多久了?
卡兹(Kaz)

除了其他实验之外,您可以尝试删除其他从属,看看是否会影响行为。
本·加特纳

两个地址引脚是否正确拉低或悬空?
fm_andreas

@Suirnder我已经在答案中张贴了原理图。
johsey

Answers:


6

尽管您说的是在插入或卸下之前您的通信已正确终止,但是值得尝试这种解决方案,因为在某些情况下,仅复位总线上的一个设备后I2C总线可能会出现问题。

在初始化Master I2C硬件之前,将SDA设置为输入并测试SDA为低。

如果它为低,则将SCL引脚设置为高。

然后将SCL引脚切换为低电平和高电平,直到SDA变为高电平(即,时钟输出外设可能仍在尝试发送的所有剩余位)。这不能超过8个时钟周期-如果确实如此,则还有其他问题。

我不能保证这可以解决您的问题,但确实可以解决我的问题!


在初始化主机之前添加此“总线恢复算法”不是一个坏主意。我将实现它。谢谢。
johsey

2

对于FRAM:

  • 首先连接GND和Vcc;
  • 然后确保A1,A2和WP的电平正确;
  • 然后连接数据引脚。

在芯片加电之前连接电源以外的其他引脚可能会引起问题。


2

10k对于您的上拉来说似乎有点大,并且您的前沿看上去很慢。将电阻减小到3k左右,看看是否有帮助。

此外,为什么截止电压会随时间漂移?


我将上拉电阻减小到3.3k,这无济于事。我不知道这种漂移。
johsey

它在屏幕上看起来很小,但我认为它约为250 mV。您可能在3.3V侧遇到电源问题
Scott Seidman

没错,I2C电平转换器两侧的漂移约为300mV。+ 3.3V电源似乎工作正常(当SCL信号发生漂移时,其输出无漂移)。可能与I2C电平转换器有关吗?
johsey

完全不确定。3.3V是从哪里来的?开关转换器?无论如何,这都是可疑的。您是否在根据数据表提供3.3V的电压汲取器件所需的最小电流?如果没有,请在电源上加载一个电阻。如果在开始通信之前等待一两秒钟会怎样?
Scott Seidman

3.3V来自SMPS(TI的LM3103MH)。我不是电源专家,但据我了解,此设备没有最低要求的电流,因为它可以在轻负载下以不连续导通模式工作。如果我在开始通信之前等待两秒钟,则会发生相同的问题。
johsey

2

是否有其他尝试与董事会对话的机会?我曾经有过这样的问题;我有60%的时间会得到确认,但我不记得曾经看到过碰撞。我怀疑我所提供的i2c与真正的内部总线有所隔离。我可以连续运行它,它只会丢弃30%的消息。当我们开始直接与设备(电源)通信时,而中间没有“背板”,问题就消失了。

您的NAK错误出现后,我没有看到停止顺序。我猜你有一个断点,此时程序会停止?

最后,如果您认为自己是公交车上唯一的人,则不妨尝试将重复的启动替换为停止/启动。我已经看到了不太了解如何处理RS的设备(尤其是定制FPGA)。

[回应评论]:关于FRAM板,您没有说很多,例如,它只是内存还是整个子系统。但是,如果您可以将“作用域”正确地放在给您带来麻烦的i2c设备的引线上,并且您仍然看到图中所示的内容,那么我就可以排除干扰。I2C非常简单,如果您在输入上看到正确的信号,那么除非内部有问题,否则芯片应该可以正常播放。

特别是,您想进入该电平转换器的FRAM一侧。信号中断比发生通常被认为是冲突的事件更有可能。

我将指出,NAK周期与根本不存在的芯片是无法区分的。EEPROM将执行此操作以指示它们正忙。我在FRAM上查找了写入时间,它比单个i2c数据位还要快...所以这不是问题。


I2C总线上只有一个主机,并且嵌入FRAM的板仅连接到该总线。因此,我认为没有其他尝试与之交谈的机会。是的,我在停止顺序之前放置了一个断点。我会按照您的建议尝试将这种重复的开始替换为停止/开始,并将再次进行测试。根据其数据表,FRAM应该支持重复启动。您是否认为如果隔离FRAM(例如,在专用I2C总线上),最终可以解决此问题吗?
johsey

FRAM板仅嵌入FRAM。这是一个“像ISA一样”的板。由于该卡嵌入在塑料片中,因此很难直接在FRAM引脚上测量信号。无论如何,我将尝试找到一种方法来测量这些信号,使其尽可能靠近FRAM。
johsey

进入U13的FRAM方面将是一大步。
gbarry

2

由于问题在重现时是永久性故障,只能通过卸下并重新插入设备来解决,因此这是两件事之一:设备进入不良状态,只有在重启后才能恢复;或接触不良。

如果设备进入故障状态并在重新启动后从中恢复,则可以使用附加电路,使您的MCU可以关闭设备电源。然后,固件在没有得到设备确认的情况下可以执行恢复过程,从而使芯片断电一段时间,再次给芯片上电,然后再试一次。

如果接触不良,则可能必须查看连接器的可靠性并找到更好的方法。如果使用相同的连接器来制造更多这些板,则可能会在现场出现问题。在任何情况下,都可以通过人工程序来处理这种情况。使用该设备的操作员必须意识到插卡的潜在问题,并且可能必须重新安装才能正常操作。

您的主设备可能会发出警报,表明它无法与FRAM通讯:面板上的“故障” LED和/或发出蜂鸣声或其他任何声音。或反之:某些指示灯亮起,向用户反馈已接受FRAM并已建立通信。如果FRAM离主设备很远,则指示灯可以位于FRAM模块上:另一个驱动LED的I2C芯片。


0

问题的零星性质表明,这可能是时间问题。

数据表列出了两套定时,一个“标准模式”,一个针对“快速模式”。根据您的测量,您似乎处于“标准模式”计时的边界。从浏览数据表中我无法得知芯片是如何精确地置于两种模式下的。

我不认为您的设备处于快速模式。您可以将时序减少2-4倍吗,请确保您处于启动条件保持时间,时钟高电平周期和时钟低电平周期的标准模式时序之内,并查看是否仍然出现此问题?


我的设备处于“标准模式”(SCL频率为100kHz)。确实,该频率处于该模式的边界。我将尝试将其减少两倍,并进行一些测试。
johsey 2013年

0

您是否拥有24c04a,b或c?如果是c04a,那就是坚固的设计。b部分对电源斜坡敏感。您在pin8上将hv耦合到gnd的方式是什么?我会说一些有关信号电平的信息,但我发现您使用了电平转换器。您可能想检查一下您是否对芯片解释为额外时钟的SCL没有毛刺。


3
您是在只有九个按钮的旧手机上键入此字吗?
angelatlarge

所使用的FRAM是FM24C04B。您从哪里获得有关此存储器的功率灵敏度的信息?你能给我更多的意见吗?引脚8上没有去耦。该模块的设计已经在几年前完成,我们必须消耗整个产品。根据示波器进行的测量,当连接FRAM模块并激活电平转换器时,似乎SCL线上没有毛刺。
johsey

1
我意识到这个回应已经来得很晚,但是我有关Vcc敏感度的信息来自几年前对Ramtron的应用程序支持。我不记得确切的细节,但是在一定的斜率和温度下,该芯片实际上是锁定的,并且除非您以“良好”的斜率上电才允许I2C通信。没有靠近芯片的去耦电容是不好的。您可能会发现,使用0.1uF与10uF去耦会改变Vcc斜坡,其中一个起作用,而另一个则不起作用。@angelatlarge,是的,很抱歉,我从电话中输入了我的第一条回复。
gman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.