I2C串行EEPROM芯片写周期问题记录
问题描述
最近在做I2C串行EEPROM芯片的读写测试时,我突发奇想做了如图1所示的策略,希望能验证所操作寄存器的好坏。我是用状态机实现该策略,但在进行板级调试时,我发现程序一直卡在“读出word_addr的数据”这一步,没有继续向下执行。
问题定位
通过用Signaltap抓取波形,我发现我的程序在写周期期间,有收到应答信号(ACK);但是在读周期的开始,即写入器件的地址及控制命令后,没有收到ACK应答信号。初步猜测,是我对EEPROM器件操作太快,EEPROM仍处在向寄存器写入数据期间,无法对外界发出应答信号。
注1:我是在写操作完成后,立即进行读操作,中间大概隔了40ns。
解决问题
通过查阅EEPROM芯片的数据手册发现,EEPROM最大的写周期是5ms。我用的是EEPROM芯片型号是AT2402,图2是kexin(科信)对写周期的介绍,在倒数第二行有介绍芯片写周期为5ms。
知道原因后,我在读数据前设计,先等待5ms。重新编译综合后,将新程序下载到开发板中,然后进行板级调试,功能实现,问题解决。
注2:在定位问题和解决的问题中,我发现一篇对IIC设计比较有帮助的文章,在这里记录下文章名:《I2C串行EEPROM应用系统的健壮性设计》。有兴趣的可以上网翻阅一下哈。