在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5879|回复: 11

[求助] 有关于I2C的写周期方面的问题?

[复制链接]
发表于 2011-8-7 21:52:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 auv0513 于 2011-8-7 22:15 编辑

最近在用Verilog HDL写24C04接口的I2C写时序,想要完成的功能是按字节的方式连续写,就是发完一个字节就发个停止,然后重新发送下一个字节,但是遇到一个问题,就是发送完第一个字节后,再发第二个字节就没有ACK信号了,不知道是不是停止信号后的时间长短方面的问题,希望高手解答!
        下面就是我用SgnalTap II抓上来的信号,可以看到波形有一个完整的写周期,但其二个周期就收不到ACK信号了!

I2C.JPG
发表于 2011-8-7 22:00:25 | 显示全部楼层
看起来感觉时序有些乱,不是很规范
 楼主| 发表于 2011-8-7 22:21:59 | 显示全部楼层
图我已经重新标注了一下,时序是满足的,为了防止总线冲突,我是在发完第8个bit后立即把SDA完全放掉,然后等待24C04的ACK信号,因为外部有上拉电阻,当我放掉SDA时,SDA被拉高,所以才会看到ACK信号前后会有两个高电平脉冲,前一个高电平脉冲就是ACK的响应时间实测为100ns。
发表于 2011-8-7 22:57:49 | 显示全部楼层
俺是外行,不过,好像在data的ack后边在SCL的高电平期间SDA有个上升跳变,这应该是I2C传输结束的标志吧。前边都说此次传输结束了后边还怎么搞。。
 楼主| 发表于 2011-8-7 23:00:41 | 显示全部楼层
重现开始下一个写周期,继续写下一个字节!
发表于 2011-8-7 23:15:49 | 显示全部楼层
...俺果然是外行啊。。第二次写,怎么SCL后来成了高电平了。。。。你两次写的时间间隔长点会怎样。。。。。等高手来,哈
 楼主| 发表于 2011-8-7 23:28:13 | 显示全部楼层
我的下一个周期的写实质上使用了I2C总线的应答查询功能,因为一旦我发完停止信号后,器件就进入内部写周期,在此期间,正常器件操作将被禁止,微控制器对器件的所有访问尝试都将被忽略。因此,微控制器应等待写周期结束后再尝试访问EEPROM,这一点很重要。每个器件在其数据手册中都给出了最长的写周期时间,该参数通常用TWC表示。确保遵守写周期时间的一种简单方法是:在再次访问EEPROM之前执行规定时长的延时。但是,器件在短于规定的最长时间内完成写周期是很寻常的事。因而,用这种延时方法会使EEPROM完成写操作后的一段时间内微控制器仍在等待。为了消除这段额外的时间,使运行更加高效,强烈建议利用应答查询功能。由于I2C接口EEPROM器件在写周期内不会应答,所以可在发送停止条件并启动器件的内部写周期后持续地向器件发送写命令控制字节并进行应答查询,直到接收到指示写操作已完成的ACK位为止。
 楼主| 发表于 2011-8-7 23:48:48 | 显示全部楼层
问题找到了,谢谢大家,刚才看到一篇名叫《I2C串行EEPROM应用系统的健壮性设计》的文章,上面有个流程图说的很明白,在应答查询时应当采用轮询的机制,而我只查了一次就等在那里了,所以不向下进行了。呵呵!
下面附个图:
tu.JPG
 楼主| 发表于 2011-8-7 23:58:08 | 显示全部楼层
把Quartus II 11.0(32-Bit)的工程代码和Modelsim SE 6.5b工程的代码贴出来希望大家能给点建议!
I2CALL.rar (902.57 KB, 下载次数: 55 )
发表于 2011-8-8 00:10:09 | 显示全部楼层
建议你把你的状态机的状态寄存器调出来看看,看状态跳转对不对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 11:16 , Processed in 0.023474 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表