SPMA078 March   2021 TM4C1290NCPDT , TM4C1290NCPDT , TM4C1290NCZAD , TM4C1290NCZAD , TM4C1292NCPDT , TM4C1292NCPDT , TM4C1292NCZAD , TM4C1292NCZAD , TM4C1294KCPDT , TM4C1294KCPDT , TM4C1294NCPDT , TM4C1294NCPDT , TM4C1294NCZAD , TM4C1294NCZAD , TM4C1297NCZAD , TM4C1297NCZAD , TM4C1299KCZAD , TM4C1299KCZAD , TM4C1299NCZAD , TM4C1299NCZAD , TM4C129CNCPDT , TM4C129CNCPDT , TM4C129CNCZAD , TM4C129CNCZAD , TM4C129DNCPDT , TM4C129DNCPDT , TM4C129DNCZAD , TM4C129DNCZAD , TM4C129EKCPDT , TM4C129EKCPDT , TM4C129ENCPDT , TM4C129ENCPDT , TM4C129ENCZAD , TM4C129ENCZAD , TM4C129LNCZAD , TM4C129LNCZAD , TM4C129XKCZAD , TM4C129XKCZAD , TM4C129XNCZAD , TM4C129XNCZAD

 

  1.   Trademarks
  2. 1Introduction
    1. 1.1 Definitions
  3. 2Theory of Operation
    1. 2.1 Normal Use
    2. 2.2 Normal Endurance
    3. 2.3 High Endurance Use
    4. 2.4 Data Integrity
    5. 2.5 CRC Module
  4. 3Software Description
    1. 3.1 Environment
    2. 3.2 Files
    3. 3.3 Functions
      1. 3.3.1  FeeInit
      2. 3.3.2  FeeCheckDatasetValid
      3. 3.3.3  FeeFormat
      4. 3.3.4  FeeRead
      5. 3.3.5  FeeWrite
      6. 3.3.6  FeeGetStatus
      7. 3.3.7  FeeGetJobResults
      8. 3.3.8  FeeGetDatasetCounter
      9. 3.3.9  FeeGetVersionInformation
      10. 3.3.10 FeeMainFunction
  5. 4Execution Time
    1. 4.1 Read Time
    2. 4.2 Write Time
      1. 4.2.1 Write Time When no Erase is Required
      2. 4.2.2 Write Time when Sector Copy is Required
      3. 4.2.3 Write Time when Sector Copy is Required and Copy Sector is Full
      4. 4.2.4 Write Time with Interrupts
  6. 5Examples
    1. 5.1 Polling Fee Example
    2. 5.2 Interrupt Fee Example
    3. 5.3 Import, Program and Run Examples
      1. 5.3.1 To Import the Project into CCS, First Select "File" → "Import"
      2. 5.3.2 Select "CCS Projects" to Import the Example, Then Click "Next"
      3. 5.3.3 Provide the Path to Either the Unzipped Project by Selecting the First Radio Button or Import the Sip File Directly by Selecting the Second Radio Button. Click the "Copy Projects Into Workspace".
      4. 5.3.4 After the Project Path is Provided, it Will Show up as a Discovered Project. Click the "Finish" Button to Complete the Import.
      5. 5.3.5 Program the Example into the Flash Memory and Start Executing the Example
      6. 5.3.6 Configure the Serial Terminal Window
      7. 5.3.7 Run the Example
  7. 6Summary

Data Integrity

The most difficult part of a flash based EEPROM emulation driver is ensuring data integrity during unexpected loss of power or reset. While the hardware-based state-machine goes a long way to address this concern, it falls short as evidence by erratum MEM#07. Bits may be only partially erased or only partially programmed because the erase or program operation was cut short by power loss or reset. The actual programming time is much shorter than the erase time. (Programming is done with hot carrier injection, erase is done by Fowler-Nordheim tunneling.) Therefore, the most common issue with data integrity is with a partially erased sector. In this case, the sector may appear as totally erased, but some bits are on the threshold between 1 and 0. These bits may flip when being read. To avoid the partially erased sector, two sectors are used. The driver alternates between the sectors when it updates the data. After the data is written, the driver writes the CRC that was calculated from the buffer. The driver then runs a CRC calculation on the data in the EEPROM. Only if the CRC which was calculated on the buffer and then stored and retrieved from the EEPROM matches the CRC that was calculated from the EEPROM contents is the cycle count updated. If there is a mis-match, the write operation fails. The application may choose to rewrite the data. If there is an error indicated by the internal state-machine during a program or erase operation, this software will repeat the operation up to seven times. This is enough times to force a sector copy operation that would resolve corrupt data caused by erratum MEM#07. It is important that the writing of CycleCount3 not trigger a sector copy, as this operation is done after the data was validated. Because of this the seven retries are disabled during that write. A failure writing CycleCount3 will result in the write operation failing.

If the data in a dataset is programmed in the same order every time, the actual write operation which triggers the sector copy will progress down the line from the first word, to the second and eventually the cycle count. To avoid this, we use three copies of the counter. We write the first two instances of the counter before updating an image and update the third instance only after all data and the CRC have been updated. We alternate writing the first or the second instance of the counter first. This way, it will always be a write to one of the first two counters that initiates the sector copy operation.

If there is a power loss or reset during the programming process, that image of data is lost. The previous most recent image of data will be used.

In the read operation the driver calculates the CRC of the data read and compares it to the value stored in the control block. If there is a mismatch, the driver searches for the newest “old” copy of the data that has a good CRC value and reads that data with a return result of FEE_OLD.