Identifying SSD Controller and NAND Configuration

January 31st, 2019 by Oleg Afonin
Category: «General», «Hardware»

In our previous article Why SSDs Die a Sudden Death (and How to Deal with It) we talked about SSD endurance and how it’s not the only thing affecting real life reliability. In that article, we assumed that manufacturers’ specifications of certain SSD models remain similar for a given SSD model. In fact, this is not the case. Quite a few manufacturers play tricks with consumers, releasing a certain SSD model with top notch specifications only to downgrade them at some point during the production cycle (but certainly after receiving its share of glowing reviews). While some OEMs do note the change at least in the revision number, the rest will just quote the small print allowing them to “change specifications at any time without prior notice”. We’ve seen well known SSD manufacturers switching from reliable MLC NAND to planar TLC trash within the same model (and zero notice to potential buyers). How can you tell which NAND configuration your particular SSD drive employs and whether or not it lives up to your expectations? Read along to find out.

For starters, you’ll need to know who made the controller in your SSD. Common manufacturers of SSD controllers found in many SSD drives are Marwell, Phison, Sandforce and Silicon Motion. You can look up the model’s controller manufacturer by checking out the reviews for your SSD. In order to determine the exact model of the controller as well as NAND flash configuration you’ll need a set of command-line tools: Phison Flash ID, Silicon Motion Flash ID, and SandForce Flash ID. You will only need the one utility corresponding to your controller manufacturer. Note: Marwell controllers are not supported by these utilities.

Download and save the tool you’re going to use on some disk you’re not going to check (e.g. use a folder on your C: drive). The tool officially supports disks that don’t have any partitions on them, or at least don’t have a drive letter. We found that, at least on some systems, the tool can work without such restrictions. If you’re analyzing a SATA drive, use “flash_idata.exe”. For USB drives, use the USB version. NVME SSDs are not supported.

Note: you must launch the tool with administrative privileges (Run as administrator).

So let’s check our first SSD: a 480GB Crucial BX300 drive. There have been mixed reports about this model. Early revisions were manufactured using 3D-MLC NAND, while later revisions were made using 3D-TLC chips (these drives can be identified by their firmware version, which is different from firmware used on the MLC-based revision).

smi_flash_id_ata.exe
SMI 224x/225x SSD Flash ID ATA reader v0.51a by Ochkin Vadim
OS: 10.0 build 17763
Use: smi_flash_id disk_num[u]
     - u - model check override
 0: (CT2000MX500SSD1
 1: (CT2000MX500SSD1
 2: (CT500MX500SSD1
 3: (Crucial_CT500MX200SSD1
 4: (CT480BX300SSD1
Please select drive number:4
Drive: 4(ATA)
Identify - ok!
Smart - ok!
Model: CT480BX300SSD1
Fw   : M2CR010
Size : 457862 MB
From smart : [SM2258] [M2CR010 ]
Controller : SM2258AB
Bank00: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank01: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank02: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank03: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank04: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank05: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank06: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank07: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank16: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank17: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank18: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank19: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank20: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank21: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank22: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die
Bank23: 0x2c,0xa4,0x64,0x32,0xaa,0x4,0x0,0x0 - Micron MLC 256Gb/CE 256Gb/die

What can we tell about this SSD?

  • This particular device uses MLC NAND chips made by Micron.
  • There are 16 banks, 256 Gbit each.
  • While the controller supports 4 channels, this model only populates 2 of them. This affects sustained write speeds after the SLC cache is filled up.
  • The total physical capacity of this drive is 512 GB. Its advertised capacity is 480 GB, meaning that some 32 GB are used for overprovisioning (reserved blocks and SLC cache). Compared to the Crucial MX500 with the same physical capacity of 512 GB, the MX series drive offers users some 500 GB.
  • The SM2258AB controller implements SLC caching. After filling up SLC cache, sequential writing speeds will take a severe hit due to the dual-channel configuration.

The larger overprovisioned area and the fact that Crucial installed the more expensive MLC NAND into a budget series drive makes us believe that BX300 were manufactured using 3D-TLC NAND chips that failed Micron’s internal quality control for TLC specifications. Since MLC has less strict tolerances compared to TLC, reusing these chips to build an MLC model (and increasing overprovisioned area just in case) seems like a win-win for both Micron and consumers. Do note, however, that Crucial advertises abysmal endurance rating for the BX300. Tom’s Hardware reviewer was surprised to see that, suggesting that “Crucial could be sacrificing endurance for performance, or the company could just be saving money on warranty claims down the line.” Our suggestion is different; we believe that Crucial simply used sub-standard TLC chips in MLC configuration here.

What if the tool does not work? In this case, you’ll see the following output:

Identify - ok!
Smart - ok!
Model: CT2000MX500SSD1
Fw : M3CR022
Size : 1907729 MB
From smart : [SM2258B16AR] [M3CR022 ]
Controller : SM2258AB
IOCtl: failed 0x5!
Possible disk has partition within first 64MB.

If this is the case, you can try removing the drive letter via dismgmt.msc. If that does not help, you’d have to delete the first partition on the drive (which is hardly worth it in our view). This is what the data for a Crucial MX500 2000GB looks like:

Model: CT2000MX500SSD1
Fw   : M3CR022
Size : 1907729 MB
From smart : [SM2258B16AR] [M3CR022 ]
Controller : SM2258AB
Bank00: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank01: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank02: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank03: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank04: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank05: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank06: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank07: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank08: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank09: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank10: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank11: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank12: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank13: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank14: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank15: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank16: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank17: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank18: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank19: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank20: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank21: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank22: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank23: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank24: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank25: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank26: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank27: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank28: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank29: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank30: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die
Bank31: 0x2c,0xc4,0x89,0x32,0xa1,0x0,0x0,0x0 - Micron TLC 512Gb/CE 256Gb/die

Conclusion

You can now verify manufacturers’ claims about the SSD NAND configuration, determine the model of your SSD controller and its NAND configuration.