AnsweredAssumed Answered

AD-FMCOMMs1-EBZ Initialize failed with ML605 board

Question asked by Marchzh on Sep 23, 2013
Latest reply on Sep 24, 2013 by DragosB

Hi,

     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[3] * 8 + 6; the real data in ptr[3] 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. 

 

    Cheers

     Zhonghua He

 

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))

396     {

397         for(i = 0; i < 255; i += 16)

398         {

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[0] != 0x01))

404                 return ver;

405         }

406         XCOMM_State.fruDataValid = 1;

407     }

408

409     /* Move to the Board Area offset from the FRU */

410     ptr += ptr[3] * 8 + 6;

411

412     /* Read the Board Manufacturer */

413     len = *ptr & 0x3F;

Attachments

Outcomes