Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

dosdude1

macrumors 68030
Original poster
Feb 16, 2012
2,779
7,413
In this thread, my goal is to discuss the procedures, compatibility, and nuances with regard to upgrading soldered onboard memory on Intel-based Macintosh systems. For the majority of this thread, I will be focusing on my first attempt at one of these upgrades on a Late-2008/Mid-2009 MacBook Air model A1304/MacBookAir2,1 system, upgrading it from its original 2GB of RAM to 4GB.

As anyone is probably aware of, upgradeable memory on all modern systems is handled via the use of removable "DIMM" modules. These modules contain a set of memory chips in a specific layout and configuration, along with a small (usually 128K or 256K) I2C EEPROM, containing "SPD", or "Serial Presence Detect" data describing the layout, capacity, and properties of the chips on the module. This same principle is used on any Intel-based machine (and probably others), including Macs, that have soldered onboard memory as well. The difference being, that instead of using an external source for the SPD data, this data is integrated into the machine's BootROM.

Prerequisites

Before beginning any soldered memory upgrade, the following items need to be determined:
  1. Is SPD data for the desired memory configuration included in the machine's system ROM?
  2. Which chips (density, configuration, type, etc) are needed to perform the desired upgrade? And are such chips even available?
1. In order to determine which memory configurations your desired board supports natively, information, most likely a schematic, for your board needs to be acquired. On a machine that ships with multiple different memory configurations from the factory, there must be a way to tell the board to use a specific configuration based on the ordered spec, without having a different system ROM for each variation. This is indeed the case with all production boards with onboard memory, and they do so by utilizing a number of resistor "straps" on the board. Based on the combined setting of each strap configuration bit, either high(1) or low(0), the system BootROM can determine which piece of memory configuration SPD data to use upon system initialization, which of course should match the chips installed onto the board. So, for example, the MacBookAir2,1 never shipped with any memory configuration other than 2GB, so there are NO straps that can be changed to specify a different memory configuration. The later (2010+) models did, and as such have straps, along with descriptions in the respective schematic, to set the different memory configurations they shipped with. Here is one such description from the schematic of a Late-2013 model MacBook Air:

Screen Shot 2022-06-28 at 11.29.05 PM.png

(Notice there is no 16GB configuration available on this model, but SPD modification can be done to achieve 16GB).

2. In order to determine chip compatibility, you first should know a few small details about the way memory chips are described. First and foremost, the size of a single memory chip is usually represented as BITS, and not BYTES as you'd expect. One byte, of course, is 8 bits. So, for example, the MacBookAir2,1 has 16 memory chips. In order to achieve 4GB total, I would need 16 2Gbit chips, each of which is 256MB in capacity. 256MB x 16 = 4GB.

With the necessary chip capacity determined, you now need to determine the type of chip that's actually on the board. This would of course be DDR2, DDR3, DDR4, or the "LP" DDR, such as LPDDR3 or LPDDR4. The latter LP chips are completely different (used in all Late-2013 and later MacBook Airs), and will be touched on later.

If determined that your board has standard, non-LP memory (usually easily visibly determined, LPDDR will consist of a smaller amount of physically larger chips, while standard DDR will consist of a larger amount of smaller chips), you need to determine the physical configuration of the chips. This will be either x16, x8, or x4. These different configurations usually correspond to a different pinout as well. In my experience, I've found that usually DDR2 comes as x16 chips, and DDR3 comes as x8. This is not guaranteed, though, so make sure you verify. You also need to make sure the chips support your system's memory speed; this will be shown in the datasheet for any memory chip. The MacBookAir2,1 needs chips that support at least 1066MHz.

Example from datasheet for 2Gbit DDR3 chips:
Screen Shot 2022-06-28 at 9.02.52 PM.png


In the case of LPDDR chips, they all have the same configuration, so all you will need to worry about is the capacity of the chips needed to achieve your desired memory configuration. For example, if you wanted to upgrade the aforementioned Late-2013 MacBook Air to 8GB of RAM, you would need four 16Gbit LPDDR3 chips. Just check speed rating on chip datasheet, as mentioned.

With the necessary chips determined, you now need to find a place to source them. In the case of standard DDR, you can normally find what you need on a standard laptop SO-DIMM module (which is also VERY helpful as a source for SPD data as well if necessary). You just have to verify that the SO-DIMM module you get is in the correct configuration for your board. So in the example of the MacBookAir2,1, you would need two 2GB DDR3 SO-DIMM modules, each with only 8 chips. These modules would be marked "1Rx8", which means "1 rank of x8 chips". The number of chips that make up one single "rank" is determined by the chip's data output configuration, and will be 64 bits. If it's an x8 chip, 8 chips make up one rank (as 8 chips x 8 = 64). If it's a x16 chip, 4 chips make up one rank (as 4 chips x 16 = 64). You can also just buy the chips themselves (which you will not have to reball, as new BGA chips come pre-balled), but this is usually a bit more expensive, and will not provide a piece of SPD data you could dump and use.

LPDDR is not available on any SO-DIMM modules, so these chips MUST be purchased from an electronics reseller/distributor.

With all that checked and verified, there is one last thing that needs to be verified before buying chips, and that is to ensure your board actually has all the necessary pins routed to support your desired larger capacity chips. You can verify this by simply looking closely at the memory chip pads on the board (if you don't have a schematic), or looking at the schematic if you have one. In the example of the MacBookAir2,1, 8GB of RAM cannot be achieved because memory address line 15 is not routed out on the board, which is required for 4Gbit chips to function. This is expected in the MacBookAir2,1, as the nVidia MCP79 chipset does not support address line 15 at all, but on the 2010 and 2011 models, Apple ALSO did not route address line 15, even though the chipsets in those models DO support it.

There are also certain higher-density DDR3 chips marked as "Dual-Die" or "TwinDie" chips. These chips basically have two physical memory chips in one, but require four extra pins fanned out on the board to function. You may find SO-DIMM modules with these chips, you can identify them as being a DDR3 x8 SO-DIMM module with only 8 chips, but being marked "2Rx8". These chips are compatible with the Mid-2012 MacBook Air, and are necessary in order to achieve 16GB on that model.

Prepping and Soldering New Chips

First thing to do is to desolder and reball the donor chips from a SO-DIMM module, if you went that route. If you bought new chips, this part can be skipped. Just apply a bit of fresh flux on the new chips.

- NOTE: If using a SO-DIMM module, first install it in another computer, boot a copy of Linux on it, and dump its SPD EEPROM using i2c-tools. Info on doing that can be found here. You will need this later if editing your machine's SPD data. You can also just dump this EEPROM with an EEPROM programmer or other hardware with the correct adapters.

Once your new chips are prepared, you can desolder the original chips from your board, clean the pads, and solder your new chips on. I won't go into detail about that process here, but I have a video showing the entire process:


Upgrade Finalization

Now is the last tricky part of the upgrade: Getting the machine to actually detect the upgraded memory. There are two methods we will use to do so:
  1. Set the board's SPD configuration strapping resistors accordingly (do this if you know the correct resistor configurations, and your board supports the desired memory configuration)
  2. Modify the SPD data in the boards BootROM (do this if your board does NOT support the desired memory configuration natively, or you do not have a schematic/don't know where the strapping resistors are or what the board supports)
1. Obviously, this is the most optimal, and easiest thing to do. To do so, simply open your board's schematic/boardview, and locate each of the strapping resistor positions. Normally, each bit will have two resistor positions, one when installed would pull the line low, to ground, and the other which will pull the line high to 3.3V when installed.

Screen Shot 2022-06-28 at 9.54.57 PM.png

  • NOTE: Only ONE of the positions can be populated per bit! Installing a resistor on both will result in undefined behavior.
  • To set the strap configuration, start from the lowest bit (RAMCFG0 in the case of the Late-2013 MacBook Air). Move the resistor to the high or low position accordingly; leave it in place if it is already correct, of course.
  • Repeat the same process for the rest of the bits.
  • Once all strapping bits are set correctly, you're done! Boot up your machine and see if it POSTS, boots, and detects the correct memory size.
2. This method is a bit more complicated, but is the only way to get the newly-installed memory working properly if it is not a natively supported configuration. Doing so will require an EEPROM programmer, and proper adapter to connect a WSON8 EEPROM to it.

- First off, desolder the machines SPI-ROM, install it into the EEPROM programmer, and dump it.

- Once the EEPROM has been dumped, open the dump in a hex editor, and locate the SPD data.

- This is done by searching for known SPD data content, which can be determined using various SPD specs. The best resource I've found is this webpage for DDR3, and this page for DDR2. Normally, in my experience, DDR3 SPD data in these MacBooks begins with "92100B" hex, and DDR2 "800808" hex. So start there if you have issues, and modify accordingly.

- When found, the data should look similar to this:

Screen Shot 2022-06-28 at 10.14.29 PM.png


- Now, with the correct search bytes determined, open the dump in an old-engine version of UEFITool. The version I use can be downloaded here.

- In UEFITool, use its search function to locate the hex bytes determined earlier.

Screen Shot 2022-06-28 at 10.21.09 PM.png


- You will see any location where this set of bytes is found show in the bottom console area.

Screen Shot 2022-06-28 at 10.22.04 PM.png


- Double-click each of these, and verify the sections they appear in. You should have multiple hits per each section. Extract body of EACH section where SPD data is found to a file. There will normally be 2-3 sections where SPD data is found.

Screen Shot 2022-06-28 at 10.24.27 PM.png


- NOTE: If your results look like the following, select the GUID header instead of the individual section parts:

Screen Shot 2022-06-28 at 10.33.55 PM.png


- Find and replace the "important" part of ALL INSTANCES of SPD data in EACH extracted body file using the content of the SPD EEPROM dump from your donor SO-DIMM module using a hex editor. If you don't have a dump to go off of, you will need to edit the SPD data accordingly. By "important part", I'm referring to the portion of the SPD data that actually defines the memory configuration (first 29, or 0x1D, bytes of data for DDR3, and first 44, or 0x2C bytes for DDR2). The vast majority of the data is manufacturing and serial number info, which does not matter.

- Basically, copy this (first 29 or 44 bytes) from SO-DIMM SPD dump:

Screen Shot 2022-06-28 at 10.46.22 PM.png


- To EACH SPD data entry (red text shown has been pasted in/overwritten from the SO-DIMM SPD dump)

Screen Shot 2022-06-28 at 10.48.35 PM.png


- Once the SPD data in your extracted ROM body sections has been modified as described, you will now need to re-add the modified data back into the ROM using UEFITool. To do so, locate the section that each file was extracted from originally, right-click, and select "Replace body":

Screen Shot 2022-06-28 at 10.59.35 PM.png


- Then, select the now-modified file that was extracted from this EXACT section.

- Once the modified version of each section has been re-added, select "File > Save Image File", and save it to a desired location.

- Open this saved ROM image back into your EEPROM programmer, and program it onto the EEPROM.

- Solder the EEPROM back onto the board, and you're done! Boot up your machine and see if it POSTS, boots, and detects the correct memory size.

Here is the final success image, with the MacBookAir2,1 booted and running OS X, with 4GB of RAM detected and working!

IMG_0954.JPG

Caveats
  • If you set SPD strapping resistors to achieve your soldered memory upgrade, there are no caveats at all! Just use your machine as normal.
  • If you modified the SPD data in your system's BootROM, you need to be very careful of firmware updates. Unfortunately, Apple has now (as of macOS 10.13 High Sierra) decided to bundle firmware updates with every macOS system and security update, so installing these could result in an unwanted firmware upgrade, which WILL overwrite your modified SPD data, requiring you to repeat that modification process.
    • This can be avoided, though, by using OpenCore Legacy Patcher or one of my Patchers to run an unsupported version of macOS on your machine, which of course will not even have a firmware update compatible with your machine.
Conclusion

As you can tell, this upgrade isn't for the faint of heart. However, with the proper tools and some decent BGA soldering experience, this upgrade is really not that difficult, and is very worthwhile on most systems. If you would like to see some other soldered RAM upgrades I've done, you can see most of them on my YouTube channel.
 
Last edited:

nothingtoseehere

macrumors 6502
Jun 3, 2020
455
522
Thank you so much! This really has shed light on the mysteries of soldering! Will check out your YouTube channel.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.