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.

TM4C1290NCPDT: EEPROM blocks with mysteriously higher protection level than what we applied to them

Part Number: TM4C1290NCPDT

Hello.

We have an application that only ever makes use of protection level EEPROM_PROT_RW_LRO_URW, and it applies this level of protection soon after start-up if it notices that any blocks do not already have that level of protection.

On three devices (out of many), this start-up code has encountered an handful of assorted blocks that have protection level of EEPROM_PROT_NA_LNA_URW applied instead, even though we don't have any source code in our application that could make this change.  An attempt to "downgrade" the protection level to the desired level of EEPROM_PROT_RW_LRO_URW on these particular units yields an error: EEPROM_RC_NOPERM (insufficient permissions). 

Two questions (at least) come out of this: 

  1. should I take any particular meaning from this impromptu change in block protection level - e.g. does it indicate that we have exhausted the available number of write cycles on this unit? - or is it more likely simply just some kind of random corruption?
  2. I don't see in the documentation if there is a sequence that should be followed when downgrading the protection level.  Do I perhaps need to ensure that the block is unlocked before downgrading the protection level, or perhaps to I need to totally remove _all_ protection as an intermediate step before applying the wanted protection level?

Many thanks for any insights!

  • We have an application that only ever makes use of protection level EEPROM_PROT_RW_LRO_URW, and it applies this level of protection soon after start-up if it notices that any blocks do not already have that level of protection.

    Hi,

    The first question to ask if blocks are password protected? If the blocks are password protected for this level of protection then it will only allow read access and not write access. 

    On three devices (out of many), this start-up code has encountered an handful of assorted blocks that have protection level of EEPROM_PROT_NA_LNA_URW applied instead

    Are you sure it behaves as EEPROM_PROT_NA_LNA_URW? In this level of protection, both read and write accesses are denied if the block is locked despite the password is set or not.  Are you saying that you cannot read or write to the block even if you give the password?

    • should I take any particular meaning from this impromptu change in block protection level - e.g. does it indicate that we have exhausted the available number of write cycles on this unit? - or is it more likely simply just some kind of random corruption?
    • I don't see in the documentation if there is a sequence that should be followed when downgrading the protection level.  Do I perhaps need to ensure that the block is unlocked before downgrading the protection level, or perhaps to I need to totally remove _all_ protection as an intermediate step before applying the wanted protection level?

    The protection should not change due to the number of write cycles. 

  • Hello Charles, thank you for the response.

    The reason why I claim that the block has somehow obtained EEPROM_PROT_NA_LNA_URW is that when I query the block protection status using EEPROMBlockProtectGet, that bit value is returned. 

    In answer to your question "Are you saying that you cannot read or write to the block even if you give the password?", I have seen that attempts to unlock the block (using the password) and write data to it are failing.  I haven't explicitly tried to unlock before reading and check the outcome; we never normally need to do that.  But on reflection, I do believe that to be the case, because a bunch of additional information became visible once I was successful in getting one unit back to the EEPROM_PROT_RW_LRO_URW protection status.

    One new thing that I have learned since my original post is this: 

    While prior attempts to change from EPROM_PROT_NA_LNA_URW to the desired EEPROM_PROT_RW_LRO_URW had been failing with return code of EEPROM_RC_NOPERM, if I first _unlock_ the block (using the password that we gave it when we originally requested EEPROM_PROT_RW_LRO_URW earlier in the life of that device) _before_ trying to change its protection status, it succeeds. 

    I think that this answers numbered question 2 in my original post - do you agree?  And I think that you have answered question number 1.

    Would like me to try something out with this unit in order for TI to understand it a bit more?  Otherwise, I believe I now have the answers to proceed,  and this ticket could be closed?

    Cheers,
    Grant

  • I think that this answers numbered question 2 in my original post - do you agree? 

    Hi Grant,

      You understanding is correct.