N64 Memory: Battery Backed SRAM

Background

To save progress, the N64 uses either an external Controller Pak or saves directly to the Game Pak. A few games don’t support saving at all.

These save files are stored in memory which can either be volatile or non-volatile. Volatile memory such as SRAM will not retain data when unpowered unless accompanied by a battery backup. Non-volatile memory such as EEPROM or Flash on the other hand will retain data unpowered, typically for many years.

According to Micro-64 the Controller Pak uses SRAM and the Game Paks uses either EEPROM, SRAM, or Flash.

EEPROM and Flash typically retain data for over 100 years according to Motorola and Microchip.

Data retention for SRAM has a more limited life span since it relies on a battery.

Controller Pak Memory Swap

If you plug a Controller Pak in these days, your save files might be corrupted. Let’s disassemble the Controller Pak using a 3.8mm security bit to find out why.

Security bits, External, Internal

The memory soldered on the board is a Toshiba TC55257DFL-85V. Looking at the datasheet, this is an SRAM that requires 2V minimum for data retention. Hence there’s a CR2032 battery soldered on the other side of the board.

One option to prolong the life of a Controller Pak would be to just replace the battery, but let’s see if there’s a more permanent solution using non-volatile memory.

Looking at the datasheet again, this SRAM is 256Kbit organized as 32K x 8 in a 28-pin SOP package. The supply voltage was measured to be 3.38V.

After a quick search on DigiKey for non-volatile memory using these parameters, there were only 3 results in a few different package options. We’ll exclude the one EEPROM since the write cycle time is 10ms, which is 105 times slower than SRAM or FRAM.

The two FRAM results:

  • Cypress FM18W08-SG
  • Cypress FM28V020-SG

Both datasheets state “SRAM compatible” and “Industry-standard 32K × 8 SRAM pinout”. Data retention is 151 years at 65C. The main difference between the two is supply voltage, 2V-3.6V for the FM18W08-SG and 2.7-5.5V for the FM28V020-SG, so either should work. Old stock might be labeled Ramtron since they were acquired by Cypress in 2012.

The SRAM can be removed with a heat gun, masking off the surrounding components with Kapton tape is recommended. Next, the pads can be cleaned with solder braid before soldering the FRAM, a Ramtron FM28V020-SG in this case. Finally, the battery can be removed using a solder sucker since it’s no longer needed.

SRAM and battery removed, FRAM soldered, checking solder

Most games that use the Controller Pak will identify the new memory as corrupted and ask to repair. After repairing, everything works as it should.

ItemCost
Controller Pak$7
FRAM (Package of 2)$11
Security Bits$3
Total$21
Table 1

Battery Life Calculations

We now have a solution that lasts more than a lifetime. Out of curiosity, let’s find out how long the battery backup solution should last.

Looking at a few CR2032 datasheets:

BrandNominalCapacitySelf-Discharge
Maxell3V220mAh~1%/year
Energizer3V235mAh~1%/year
Omnergy3V210mAh<2%/year
Varta3V230mAh<1%/year
Table 2

Graphs from the datasheet:

Conveniently and probably uncoincidentally, the CR2032 battery capacity is measured until the voltage drops to 2V, which is the same as the SRAM minimum data retention voltage.

The battery will be drained by the SRAM, but also from self-discharge. Let’s look at these two factors individually and then combined.

SRAM Standby

The SRAM datasheet shows 0.3uA typical and 2uA maximum standby current for 3V at 25C.

A capacity of 235mAh will be used since 220mAh is for a nominal discharge current of 0.2mA (200uA) which is much higher than this application. This is approximately where the “1 Mohm continuous” line intersects 2V on the Pulse Discharge Characteristics graph (1 Mohm is 2-3uA at 2-3V respectively, which is much closer to the standby current).

Formula for time in years

Combining

Substituting and solving with typical standby current

Substituting and solving with maximum standby current

Battery Self-Discharge

The CR2032 that was removed is a Maxell, so we’ll use a self-discharge rate of 1% per year in future calculations.

Assuming linear rate since it wasn’t specified

Substituting and solving for current

Substituting and solving for self-discharge time

Combining Standby and Self-Discharge

Substituting and solving for typical standby current and self-discharge

Substituting and solving for maximum standby current and self-discharge

Controller Pak

Since we have an actual data point, let’s see how close it matches the calculations.

The battery measured 2.88V unloaded. A battery should be loaded for an accurate measurement. For a pulse measurement, the datasheet uses a 300 ohm resistor for 5 seconds. The battery measured 2.51V after applying the pulse load.

The CR2032 that was removed has a date code that’s 21 years and 9 months old (21.75 years). Using the 1Mohm line on the Pulse Discharge Characteristic graph since it’s the lowest current draw (3uA at 3V) shows that at 2.5V it has consumed about 230mAh.

Current Draw

Determining the current using the previous formula

Substituting 230mAh at 2.5V, since it’s close enough to the measured 2.51V

Isolating and solving

Battery Life

Next let’s determine how much capacity is left until the battery reaches 2V.

We’ll use the 1Mohm line on the Pulse Discharge Characteristic graph again. The plot seems to drop somewhat linearly after 2.6V, so let’s approximate the slope:

Determining the capacity remaining from 2.51V to 2V

Using the same formula again

Using the previously calculated current and capacity remaining

Adding the elapsed time to the estimated time remaining for the total life

Game Pak

Let’s disassemble a Game Pak that uses an internal SRAM.

Front, Back, Inside

The memory can be identified as Sharp LH52V246A. Unfourtunately no datasheet could be found after an hour or two of searching.

The battery measured 2.94V unloaded and 2.32V after applying the pulse load. Note that the unloaded voltage measured higher than the Controller Pak, but the loaded voltage measured lower. Hence why you can’t tell how much battery life is left just using an unloaded measurement.

Current Draw

The CR2032 battery has a date code that’s 21 years old. Using the 1Mohm line on the Pulse Discharge Characteristic graph, 2.5V has consumed about 230mAh.

First lets estimate the total capacity used. The graph shows 230mAh used at 2.5V. The slope after 2.6V has been determined to be 10mAh/V. Then the voltage drop after 2.5V is

Multiplying by the slope to determine the addition capacity used

Adding to the 2.5V capacity

Determining the current using the previous formula

Substituting

Isolating and solving

Battery Estimate

Determining the capacity remaining from the measured 2.32V until 2V

Using the historical current draw of 1.26uA to determine the estimated time remaining

Adding the elapsed time to the estimated time remaining for the total life

Conclusion

Compiling all the results:

ConditionCurrentTime
SRAM Typical0.3uA89.4yr
SRAM Maximum2uA13.4yr
Self-Discharge0.27uA99.4yr
SRAM Typ + Self-Discharge0.57uA47.1yr
SRAM Max + Self-Discharge2.27uA11.8yr
Controller Pak Estimate1.16uA22.2yr
Game Pak Estimate1.26uA21.3yr
Table 3

Nominally, the battery will be drained to the point it can no longer retain data after 47 years. Worst-case though, this could happen in 12 years. Using one Controller Pak and Game Pak as data points, 21-22 years was estimated which is reasonably somewhere between the nominal and worst-case calculations.

Therefore, it’s not unreasonable for a Controller Pak or Game Pak with an original battery to no longer retain data these days. Luckily, non-volatile memory that’s a drop-in replacement is relatively inexpensive and readily available.