我正在尝试使用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_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。
- 在插入嵌入FRAM的卡之前,将I2C电平转换器置于三态模式。FRAM_SDA和FRAM_SCL信号被拉低。
- 插入“ FRAM卡”后,添加100ms的延迟以确保电源稳定(根据数据表,在第一个启动条件之前至少需要11ms)。
- I2C电平转换器已激活。
- 为了确保I2C电平转换器被激活并且线路被拉高(数据手册要求约4us),添加了1ms的延迟。FRAM_SDA和FRAM_SCL信号被上拉。
- FRAM被访问。
在每个步骤之后都已测量了FRAM_SDA和FRAM_SCL信号。
问题仍然存在。
停止/启动条件,而不是重复启动
@gbarry。
在字节传输期间,我试图在重复开始之前停下来。我用示波器测量了字节传输:STOP条件后再加上START条件就可以了。
不幸的是,此解决方案无法解决问题。
思想
仅在连接了嵌入FRAM的卡后才发生此问题。插入“ FRAM卡”并正确寻址后,我运行了数千次成功的读取访问(从站寻址和读取)。
在我看来,这越来越像是硬件问题。但是我不知道它是否可能与I2C电平转换器或I2C总线上的其他从机相关。
您还有其他想法或建议吗?
编辑(2013-04-18)
问题似乎已解决
我更换了FRAM模块连接器,找到了一种直接在FRAM上进行测量的方法。似乎所有与此新连接器都运行良好。
我将进行更多测试,以确保问题来自不良的连接。