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.

FRAM clarification -- read endurance and FRAM variable declaration -- part dies after 11.5k hours? Also, FRAM variable declaration and use.

Other Parts Discussed in Thread: MSP430FR5739

Considering using and MSP430 FRAM for a new application, but need clarification on a couple of items:


1. "read and write endurance" is specified in the data sheet (msp430fr5739) as 10^15 cycles.

Does this 10^15 cycle (min.) specification apply to program instruction fetch?

If it does, this implies  (((10^15/24MHz)/(60 sec/min))/(60 min/hour)) = 11.5 khours,

so does this mean that part dies after 11500 hours?

2. Does declaring variable with __persistent automatically place the variable in FRAM?

For example, is __persistent float test_variable = 5.67 placed in FRAM for nonvolatile storage?

Also, can this be changed during runtime; for example, can I write test_variable = 9.87, and this will be stored nonvolatile -- like from a run-time calibration/adjustment routine?

Thanks.

  • Hello,

    For your first question, I believe the following document will be of use. Specifically section 2.3. www.ti.com/lit/slaa526

    For your second question, Compiler/Linker wise, anything that would place direct the linker to place something in Flash, would place in FRAM portion of memory in FRAM devices. You can also manually do this by using pointers to the FRAM portion of memory.

    In order to store something in FRAM in memory, you just have to write to an address that is within the FRAM memory location. An example of this is located within the example code for FRAM devices. You can find this within the TI Resource Explorer in CCS. Navigate to MSPWare > Devices > (Select FRAM Device Family) > (Select FRAM Device). Code Example MSP430FRxxx_framwrite.c -- Long Word FRAM write

    Regards,
    JH
  • The device has 24MHz clock, but they state the maximum flash access speed is 8MHz.

    Does that cache described in 2.3.1 of the slaa526 document you reference allow higher effective instruction execution than 8MHz?

    A bit confusing.
  • 78Sys said:
    2. Does declaring variable with __persistent automatically place the variable in FRAM?

    For example, is __persistent float test_variable = 5.67 placed in FRAM for nonvolatile storage?

    Also, can this be changed during runtime; for example, can I write test_variable = 9.87, and this will be stored nonvolatile -- like from a run-time calibration/adjustment routine?

    Yes, the __persistent keyword will make the variable placed in FRAM. In the IAR tools, this corresponds to the DATA16_P and DATA20_P segments.

    Effectively, this mean that the downloader will write the initial value to the memory cell, just like it does with constants, when the device is initially programmed. However, the initialization code in the application will not change the value in any way, so the latest value is retained whenever the device is restarted.

        -- Anders Lindgren, IAR Systems, Author of the IAR compiler for MSP430

  • 778Sys,

    Yes, the device can have an MCLK up to 24 MHz. The FRAM is limited to 8MHz access rate. When running the MCU at a rate faster than 8MHz, wait states are used for access. To read more about how to maximize the write speed of MSP430 FRAM, please see the following document.

    www.ti.com/lit/slaa498

    With the cache, every 4-word instructions only cost one access to FRAM. Theoretically, if you always used the same 4-word instructions, you do not need to take more instructions from FRAM and thus could get a higher rate.
  • Good document -- thank you -- slaa498 shows approximate doubling of throughput from 8MHz to about 15MHz on a bench mark test (Figure 4 in slaa498) using a 24MHz clock versus an 8 MHz clock, but they state there can be variation between devices.

**Attention** This is a public forum