I am using ad-fmcomms1-ebz with xilinx ml605 board. It had been working properly until yesterday that it suddenly failed to initialize. The details of the problem are: Getting XCOMM Revision is blank, meaning that there is nothing behind "Board Version:" with xil_printf, and "XCOMM Rx Init Failed!". When I debug it, I find that in the step of function XCOMM_GetBoardVersion in xcomm.c， the first few data read from EEPROM seems to be wrong(that is XCOMM_State.fruData). I store the data of XCOMM_State.fruData[0..256] which read from EEPROM as shown in attachment log_eepromdata.txt. The file log_ascii.txt is what is changed to ASCII from log_eepromdata.txt.
In line 470 of function XCOMM_GetBoardVersion at xcomm.c, ptr += ptr * 8 + 6; the real data in ptr is 255, meaning that ptr = ptr + 255*8+6. According to log_ascii.txt, I mean it should be ptr += 1*8+6; When I changed, tring ptr += 8+6, it can read the board versiong correctly and seems to initialize successfully according to what is xil_printf.
But Sometimes it still init failed at "XCOMM Rx init Failed!" or even "XCOMM Init I2C Failed!". About that, I do not know why or how to find the problem.When I debug for the "XCOMM Init I2C Failed!", I find the program died in XCOMM_InitI2C(&defInit) -> SPI_Init(pDefInit->fmcPort,enableCommMux, ps7Interface) -> I2C_Write(picI2cAddr,-1,sizeof(wrBuf)/sizeof(unsigned char), wrBuf) -> I2C_Write_axi(**) -> while(((Xil_In32(axi_iic_baseaddr + SR)&0x80)==0x00)&&(--timeout)); Can anyone help me why I2C initialize fail?
Also, I find the ad-fmcomms1-ebz is particularly hot when working.
The following content is extracted from function XCOMM_GetBoardVersion at file xcomm.c.（suggest to open the file with vim）
394 /* Read the FRU data */
395 if((!XCOMM_State.fruDataValid) || (readMode == XCOMM_ReadMode_FromHW))
397 for(i = 0; i < 255; i += 16)
399 ret = EEPROM_Read(XCOMM_boardFmcPort == FMC_LPC ?
400 IICSEL_FRU_LPC : IICSEL_FRU_HPC,
401 i, &XCOMM_State.fruData[i],
402 ((255 - i) > 16) ? 16 : (255 - i));
403 if((ret < 0) || (XCOMM_State.fruData != 0x01))
404 return ver;
406 XCOMM_State.fruDataValid = 1;
409 /* Move to the Board Area offset from the FRU */
410 ptr += ptr * 8 + 6;
412 /* Read the Board Manufacturer */
413 len = *ptr & 0x3F;