This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LS3137: TI FEE - Struck in TI_FeeInternal_PollFlashStatus()

Part Number: TMS570LS3137

Hi, 

We are using TI FEE Driver in our project. 

We have got a scenario where the code got has struck in TI_FeeInternal_PollFlashStatus() API. 
The call to this API is from TI_Fee_Init().

We have few questions related to this. 

1. What could be the reason for this to happen ? 
2. Why is the timeout so long ? 
3. Is there any other recovery mechanism ?


  • There is no external watchdog on my board. I use the internal watchdog, tried RTI clock=80MHZ, and RTI clock=2MHz, I am not able to re-generate this issue: timeout in the following function

  • From your dumped memory content, there is no enough space for block #87 (0x57) whose payload length is 120 bytes (0x78). The total space needed for this block is 24bytes (header) + 120 bytes data = 144 bytes.

    The start address is 0xF020FFE0, the left space is 20 bytes (0xF0210000-0xF020FFE0) only. The driver should write this block to next virtual sector. I don't understand why it was written to this VS. I'd like to check if the "end address of this virtual sector" was corrupted, or any other value of global variables were corrupted. 

  • Hi Wang,

    Thanks for your response and details. Please check about the corruption and let us know about the progress. Thanks. 

    Regards,

    Anitha 

  • Hi Anitha,

    If I use your FEE data, the FEE Init function generates data abort because it reads an invalid memory address (>0xf02010000). It is a bug, but I don't have a workaround now.

  • Hi Anitha,

    Thanks for the patience, QJ is in travel, and he will get back to you on this.

  • I am not able to reproduce the issue on setup. I run the code for very long time with watchdog reset every 400ms, and the EEPROM has been erased/programmed for thousand times. 

    In your case, the block was partially programmed and marked as a valid block. The block status (valid or invalid for example) is changed to valid only after the whole block data has been programmed correctly. I tried to ignore this partial programed valid block, but It don't work. I am sorry I don't have working workaround now.