最近写了一个I2C的I/O端口扩展器的VHDL程序,功能就和I/O端口扩展芯片PCA9555相似,FPGA使用EP1C6T144。电路板上还有一个I2C的热插拔芯片PCA9511。 硬件连接方式: LM3S8962的I2C引脚SDA,SCL接到FPGA(EP1C6T144)的任意两个I/O引脚上,将FPGA的这两个脚配置为auto open-drain。LM3S8962的I2C做主机,FPGA作为I2C从机,为了测试FPGA端的程序是否正确,LM3S8962的程序流程如下:
LM3S通过I2C总线向FPGA的一个端口写入数据 for(i=0;i<10;i++);软件延迟一下 LM3S通过I2C总线读取刚才写入的数据 if(读出的数据不等于写入的数据) { while(1); } else { 重复以上步骤 }
出现的问题如下: (1)如果将LM3S的I2C引脚接到FPGA的I/O脚上,同时,将FPGA的I/O脚配置为auto open-drain,按照上述“写入-读出-判断”流程,只能执行几次就down机,有时甚至一次就down机 硬件连接方式: LM3S8962_SDA <---> FPGA_I/O(配置为开漏且电路板上有10K上拉电阻) LM3S8962_SCL <---> FPGA_I/O(配置为开漏且电路板上有10K上拉电阻)
(2)因为电路板上有一个I2C的热插拔芯片PCA9511,如果将LM3S8962的SCL引脚不但接到FPGA上,还接到PCA9511的SCL_IN脚上(PCA9511的ENABLE脚接高电平),按照上述“写入-读出-判断”流程,连续测试2天都没有一次错误出现。 硬件连接方式: LM3S8962_SDA <---> FPGA_I/O(配置为开漏且电路板上有10K上拉电阻) LM3S8962_SCL <---> FPGA_I/O(配置为开漏且电路板上有10K上拉电阻) LM3S8962_SCL <---> PCA9511的SCL_IN脚
请问大侠这是什么问题???
|