We ran into an issue where data was lost using Ti Fee 01.17.02.
We then checked if the latest version of Ti Fee 01.19.03 fixes the issue.
After a review of the code we noticed the following problems in the implementation.
- When the size of a block is changed - for instance in the course of a software update the block size is not detected correctly.
As an example we had a block that was 40 bytes in an old software version and the size was increased for a newer software release to 48 bytes. During TI_FeeInternal_UpdateBlockOffsetArray the size from the configuration is used (48bytes) while the block in flash is actually smaller (40 bytes). This causes the next block offset to be miscalculated which in turn causes the blocks size to be misinterpreted. This means that it is "random" where the block after that is searched - possibly skipping blocks. The data of these blocks is still in flash but will not be interpreted then. - The second problem we saw is related to a power cut during writing of block.
When the block is in state Start Program Block (0xFFFFFFFFFFFF0000) then the offset of the next block seems to be incorrectly calculated. I have attached a FEE dump.
At offset 0x8B0 you can find the block (block id 0x607) that is in programming state. The blocks size (0x38) was already written - however at the correct offset (0x900) of the next block ther is no new block. It seems that the next block starts at 0x8D0 - which is 32 bytes after the start of the block in programming state. This does not seem to be correct behaviour - since it cannot be known if there was already data writting at this address for the block starting at 0x8B0 - so the should probably have been skipped.
/cfs-file/__key/communityserver-discussions-components-files/312/2555.iccpd4_5F00_1115.zip