I am using Xilinx ML605, and hdl code rev1 and no-os drivers. For my project, sometimes it is success that XCOMM Init I2C success! But when I add other hdl code in my own IP core (do not modify any code in fmcomms1's driver ip core hdl code), it always appear that XCOMM Init I2C Failed! But I am puzzled that I do not modify any code about the fmcomms1's driver code, it becomes to be "XCOMM Init I2C failed!" from "XCOMM Init I2C success!"
When it is "XCOMM Init I2C failed!", I have tried to trace it. And I find in i2c_axi.c, function I2C_Write_axi:
Line 290: while(((Xil_In32(axi_iic_baseaddr + SR)&0x80) ==0x00) && (--timeout));
when "XCOMM Init I2C success!", Xil_In32(axi_iic_baseaddr + SR) will get 0xC0, where SR= 256; And when it is "XCOMM Init I2C failed!", Xil_In32(axi_iic_baseaddr + SR) get the value 0x44 once and 0x40 in another, it is error and not the same in several times. Because it is hided about the implementations details of I2C_Write_axi, so, what is it doing in Line 290 of i2c_axi.c, and why it is unstable and return uncertain values leading to "XCOMM Init I2C failed!" ?