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