It is a rare situation, but sometimes in CBM-controlled devices with bad columns, we encounter a problem where the ECC does not fit perfectly.
The best way to explain this issue is through a real-world case.
In the example below, the chip has 4 physical planes, and the bad columns were removed correctly.
However, during the ECC search process, VNR detects codewords with different ECC sizes—one being 110 bytes and another 116 bytes.
To prove that both ECC sizes are valid, we can see that for blocks where the 116-byte ECC doesn't fit, the 110-byte ECC fits correctly.
1. Separation of Planes
The first step to solving the issue is to separate the planes into offset elements.
This is easy to do in VNR using the "Divide" tool found in the toolbar under the offsets section.
In this tool, you simply need to specify how many planes are in the NAND.
In our case, there are 4 planes (as found in the BCR element), so we divide accordingly.
After using the divide tool, we get 4 offset elements with separated planes.
To make things more clear, we can assign custom names to each plane.
2. Custom ECC
Once the planes are separated, the next step is to find the correct ECC for each one.
ECC analysis shows a high match rate for one plane, and one ECC configuration fits all data blocks in that plane.
3. Custom Page Layout
The third step is to determine the custom page layout for each plane.
As shown, two planes have codewords with a 116-byte ECC, and the other two with a 110-byte ECC.
The data area and spare area (SA) sizes remain the same across all planes.
4. XOR Detection
Once each plane has a correctly determined page layout, the fourth step is XOR detection.
CBM controllers generally come in two variants:
One that uses only static XOR
One that uses both static and dynamic XOR
In both cases, static XOR is needed first. To find it, we use the XOR Analyzer.
Even if ECC sizes differ, the number of data areas per page remains consistent across planes.
For pages around 8–9KB, there are 8 data areas of 1024 bytes each.
For pages around 16–18KB, there are 16 such areas.
So with CBM controllers, it’s possible to copy the XOR element and apply it across all planes.
A critical point is that the page layouts differ between the planes.
To match the XOR to the layout, click the bulb icon after connecting the XOR.
This will auto-adjust the XOR to the custom page layout.
5. Page Allocation
In rare cases, CBM controllers use multi-plane page allocation.
This means data is saved simultaneously into two or four planes.
To check for this, open all XOR or dynamic XOR elements at the same page address.
Then compare the data blocks.
Between planes with allocation, the data patterns will look similar.

As shown, planes 0 and 1 have similar patterns, and planes 2 and 3 also match each other (but differ from planes 0 and 1).
This indicates that data was allocated between planes 0–1 and planes 2–3.
To reconstruct the allocation—even with different page layouts—we focus only on the data area.
So the next step is to extract the data areas from each plane.
Then, connect the elements.
Where page allocation is detected, unite the data areas by page size:
If the page is 8–9KB: unite by 8192 bytes (8 × 1024)
If the page is 16–18KB: unite by 16384 bytes (16 × 1024)
In our case, the page size is 9216 bytes, so the data areas from planes 0 and 1 are united using 8192 bytes, and the same goes for planes 2 and 3.
Then merge both unified elements by dump size:
(If data differs between planes, it may be necessary to unite all data areas by dump size.)
6. Data Scan
CBM controllers do not use Logical Block Numbers (LBN), so the data appears mixed.
For such cases, we use the File Assembler tool.
Because the block size cannot be automatically determined, use the "Arranged blocks" option for scanning.
Then start the scan and extract the data:
Conclusions:
Devices with CBM controllers can occasionally use different page layouts across planes, particularly when bad columns are present.
This can result in different ECC sizes (e.g., 110 vs. 116 bytes) even within the same chip.
In such cases:
Separate planes using the Divide tool.
Identify the correct ECC for each plane individually.
Create custom page layouts to match each ECC structure.
Apply XOR appropriately—adjusting it to match page layout differences.
Rebuild page allocation, focusing only on the data area and matching by correct byte sizes.
Use the File Assembler with "Arranged blocks" for effective data recovery.
Understanding and adapting to these layout and ECC differences is crucial for successful data recovery from CBM-based NAND devices.